Куплен был как то на Aliexpress дисплей Nokia 5110, совместимый с дисплеем от Nokia 3310, в которых используются одинаковые контроллеры. Таким образом, можно было предположить, что этот дисплей должен быть полностью совместим с родным дисплеем от Nokia3310, в принципе, все так и есть. Разрешение дисплея составляет 48х84 пикселя. Основой является контроллер PCD8544 выполненный по технологии COG - Chip On Glass, чип на стекле, по этому дисплей очень хрупкий, это следует учитывать при установки, пайки и креплении.
Кстати наши китайские братья научились клепать такие дисплейчики, на оригинальном дисплее металлизированные контакты а на китайском металлические штырьки или ещё хуже - резинка. Тот дисплей, который «заведется» с использованием библиотек дисплея (размещенных на сайте) для Bascom’а, без какой – либо их доработки, можно будет считать соответствующим оригиналу. Собственно, задача состояла не только в этом, а просто хотелось выяснить, какие изменения надо (если надо!) внести в библиотеки, чтобы каждый из имеющихся дисплеев работал как оригинальный.
Дисплей 5110 заказанный с китая:
Если смотреть на лицевую сторону дисплея контактами к вверху то выводы считаются с права на лево от 1 до 8. Работает дисплей от 3 вольт (я про оригинал), модули заказанные с китая работают от 5вольт. Бывает иногда косяк с отображением а именно, не выводятся все пиксели, в этом случае рекомендую плотней прижать резинку между дисплеем и платой. Хочу заметить, что распиновка и название некоторых выводов 5110 от 3310 отличается! Вариантов подключения 3310 на других ресурсах полно, а вот работы с 5510 мною замечено не было...
Порядок подключения дисплея к микроконтроллеру следующий:
Вывод din - portb.4, Вывод scl - portb.3 , Вывод dc - portb.5, Вывод ce - portc.0 , Вывод reset - vcc
Код программы:
$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 32
$swstack = 8
$framesize = 52
Config Portb.5 = Output
D3310dc Alias Portb.5
Config Portc.0 = Output
D3310ce Alias Portc.0
Config Spi = Soft , Din = None , Dout = Portb.4 , Ss = None , Clock = Portb.3
' din - portb.4, scl - portb.3 , dc - portb.5, ce - portc.0 , reset - vcc
Spiinit
$include "3310init.bas"
Call D3310init
Do
Call D3310clear
Call D3310position(1 , 0)
Call D3310print( "cxema21.")
Call D3310position(7 , 1)
Call D3310print( "ucoz.ru")
Call D3310position(2 , 4)
Call D3310print( "cxema21.ucoz.ru ")
Waitms 5000
Call D3310invert
Waitms 5000
Call D3310uninvert
Waitms 5000
Loop
End
$include "3310end.bas"
Return
Компилируем, прошиваем и радуемся:
Вдруг если дисплей ничего не показывает при условии что монтаж правильный, попробуйте передернуть ногу RESET или просто питание (выключить и заново включить). Более подробная информация по работе с данным дисплеем есть на сайте , так что углубляться не буду.
Видео работы:
Команды для работы с 5110(3310):
void LcdSend (unsigned char data, unsigned char cmd); //запись данных в LCD
void LcdUpdate (void); //копирование буфера в RAM дисплея
void LcdClear (void); //очистка дисплея
void LcdInit (void); //настройка SPI и дисплея
void LcdContrast (unsigned char contrast); //установка контраста
void LcdMode (unsigned char mode); //режимы дисплея: 0 - blank, 1 - all on, 2 - normal, 3 - inverse
void LcdPwrMode (void); //инвертирует состояние вкл/выкл дисплея
void LcdImage (flash unsigned char *imageData); //вывод изображения
void LcdPixel (unsigned char x, unsigned char y, unsigned char mode); //управление пикселем с координатами x,y
void LcdLine (int x1, int y1, int x2, int y2, unsigned char mode); //рисование линии
void LcdCircle(char x, char y, char radius, unsigned char mode); //рисуем круг с координатами центра и радиусом
void LcdBar(int x1, int y1, int x2, int y2, unsigned char persent); //рисуем батарейку и заполняем ее на %
void LcdGotoXYFont (unsigned char x, unsigned char y); //установить курсор в положение x,y
void clean_lcd_buf (void); //очистка текстового буфера
void LcdChr (int ch); // печатает символ на текущем месте
void LcdString (unsigned char x, unsigned char y); //печатает строку
void LcdChrBold (int ch); //печатает символ на текущем месте, большой и жирный)
void LcdStringBold (unsigned char x, unsigned char y); //печатает большую и жирную строку
void LcdChrBig (int ch); //печатает символ на текущем месте, большой
void LcdStringBig (unsigned char x, unsigned char y); //печатает большую строку
Все файлы с архива размещайте в одной папке, нужно чтобы код программы в BASCOM и библиотеки были в одной папке, иначе работать не будет.
файлы проекта (~20кб.)
|