Подключение дисплея от nokia3310 к pic16f628A (часть 2)
Написание программы.
Дисплей nokia 3310
Результат работы функции проверки дисплея.
В предыдущей статье был описан сам дисплей и его подключение к микроконтроллеру.
Был выбран микроконтроллер PIC16F628A , который содержит 2К памяти, демонстрационный проект занимает около 91% flash памяти.
Подключение:
- RES# – RA1
- CS# – RB4
- D/C – RB5
- SDI – RB6
- CLK – RB7
Сам проект написан на C и использовался компилятор — HI-TECH 9.70 .
В данном проекте был реализован только вывод на дисплей символов т.к. в дисплей происходит запись построчно, т.е. побайтно, т.е. одной посылкой отправляются значения 8 пикселям одного столбца строки. При обычном рисование удобно закрашивать только одну точку, а не столбец, т.к. при наложении рисунков и приметивов ниже находящиеся приметивы будут искажаться. Также можно где-то хранить состояние всех точек дисплея, но внутренней памяти контролера на это не хватает, а внешнюю подцеплять не всегда возможно. Но не кто не запрещает выводить на дисплей готовые картинки, размеры которых кратны размерам символов (6х8).
Функции для работы с дисплеем в текстовом режиме:
- lcd_init() – инициализация дисплея
- lcd_clear() – очистка дисплея
- lcd_test() – функция проверки дисплея (заполняет весь экран символами)
- lcd_putch(char) – функция вывода символа размером 5х8
- lcd_puts(const char *s) – вывод строки при помощи функции lcd_putch(char)
- lcd_putch_big(int width, int height ,char) – функция вывода большого символа на экран, позволяет выводить символы, растянутые в 2,4,8 раза от стандартных символов 5х8, кратность задаётся отдельно по ширине и высоте
- lcd_putch_beauty(char) – функция вывода символов размером 10х16 точек, требуется дополнительный массив шрифтов
- lcd_gotoxy(int X, int Y) – переход к символу расположенному в Y строке, на X позиции
Также для работы понадобятся следующие дефайны:
// логические операции #define SetBit(x,y) (x|=(1< <y)) #define ClrBit(x,y) (x&=~(1<<y)) #define ToggleBit(x,y) (x^=(1<<y)) #define TestBit(x,y) (x&(1<<y)) // Назначение выводов контроллера #define LCD_CLK RB7 #define LCD_DATA RB6 #define LCD_DC RB5 #define LCD_CE RB4 #define LCD_TRIS() TRISB &= 0x00 #define LCD_RESET RA1 // Режимы #define LCD_TCMD 0 #define LCD_TDATA 1
И две глобальные переменные расположения курсора:
unsigned char X,Y;
Дисплей от ноки 3310 является графическим и сам не содержит библиотеки символов в отличие от знакогенерирующих. Полный массив символов размером 5х8 занимает 1/3 — 1/2 памяти используемого контроллера (PIC16F628A).
Можно воспользоваться готовыми массивами символов 5х8:
- Цифровые и спец + латинские символы
- Цифровые и спец + латинские + русские символы
А можно сгенерировать свой массив символов с помощью специальной программы – символьный генератор.
Для демонстрации возможностей дисплея и данной библиотеки была написана небольшая демонстрационная прошивка, которая по очереди отображает 4 страницы:
сразу после включения запускает функцию проверки дисплея, которая заполняет весь дисплей символами (как на первой фотографии), далее выводит букву «A» различных размеров, потом демонстрирует разрешение дисплея и в заключении информация о демки.
Ниже приведён сам проект, который содержит полный набор символов (5×8) и функций приведённых выше.
Alex_EXE | 20.07.2010 | Микроконтроллеры |
dimension пишет 30.01.2012 в 21:19 #
Очень интересно! Хороший сайт!
Правда очень хочется ознакомиться с принципами подключения данного ЖКИ к пику на ассемблере!
Alex_EXE пишет 30.01.2012 в 22:15 #
На асме предпочитаю не писать, нечем помочь не могу.
dimension пишет 05.02.2012 в 20:50 #
То есть Вы начинали писать свои проекты сразу на Си?
Не было промежуточных стадий на ассемблере?
Alex_EXE пишет 05.02.2012 в 21:30 #
Ну почему, первые две мои программы были на асме 🙂 (мигание светиками).
В то время уже знал Си, решил на нём и начать писать.
rexxer пишет 18.09.2012 в 16:47 #
привет
поставил такой же компилятор
попытался скомпилить picc —chip=pic16f688 3310.c
ругается на lvalue в #define LCD_TRIS() TRISB &= 0x00
вернее ниже, где она вызывается
что не так?
rexxer пишет 18.09.2012 в 16:49 #
мне нужно просто проверить дисплей на 16ф688
Alex_EXE пишет 18.09.2012 в 18:39 #
Можете исключить из кода все упоминания LCD_TRIS()
Михаил пишет 05.12.2012 в 17:46 #
Проверил код с конфигурацией под PIC16F877А- все работает!! Отлично!! Спасибо большое!!!Теперь бы разобраться как можно картинку вывести, может подскажете?
Михаил пишет 05.12.2012 в 18:05 #
Разобрался!!! Просто, нужно внимательно смотреть ваши труды!!)
Большое спасибо!!!