Главная » Статьи » PICBasicPro |
Вывод графической информаций на LCD 3310
В предыдущей статье мы рассматривали инициализацию LCD дисплея Nokia 3310, в этой статье мы научимся выводить простые примитивы (буквы, цифры) Немного теории. Дисплей от Nokia 3310 является графическим и сам не содержит библиотеки символов в отличие от знакогенерирующих. Это означает что все элементы(цифры,буквы) придется прорисовывать самому. С одной стороны это хорошо(можно создавать своий библиотеки символов), с другой программа занимает много памяти МК. Полный массив символов размером 5х8 (от A-Z в нашем случаи) записывается в EEPROM и занимает довольно таки большое количество памяти (EEPROM) используемого контроллера. Наглядно рассмотрим символ А(английский) он представляет собой массив 5х8 точек(Рис.1). Об адресаций писал ранне у нас идет от Младшего байта к Старшему, то есть $7E =Ст.б. 0111 Мл.б. 1110 Соответственно так же для каждого столбца символа А : Code
'...................................................' DEC |Chr|HEX Data $7E,$11,$11,$11,$7E,$00 '65| A |41 'команда Data записывает в EEPROM 5 байтов символа символа А начиная с нулевой ячейки памяти и в конце $00 пустой столбец нужен для отделения символов друг от друга Вся сложность у вас может возникнуть с правильной адресаций ячеек памяти. Напишем нашу первую программу вывода одного символа на экран, я привожу самый упрощенный вариант Code
CLK VAR GPIO.0 DTA VAR GPIO.1 DC VAR GPIO.2 RST VAR GPIO.4 Chr VAR Byte BitMap VAR Word PosX VAR Byte PosY VAR Byte Column VAR Byte [6] 'массив LcdData VAR Byte PAUSE 100 GOSUB LCD_INIT PAUSE 100 GOSUB LCD_Clear Start: PosX=0:PosY=0:GOSUB LCD_GotoXY ' устанавливаем курсор в нужную позицию FOR Chr=0 TO 5 'счетчик READ Chr,Column(Chr)' считываем из EEPROM начиная с 0 ячейки и заносим в массив Column(Chr) биты символа а NEXT Chr HIGH DC 'устанавливаем вод данных SHIFTOUT DTA,CLK,1,[Column(0),Column(1),Column(2),Column(3),Column(4),Column(5)] goto start LCD_Init: LOW RST :pause 100 : HIGH RST : LOW DC ' RESET LCD LcdData= $21: GOSUB LCD_ByteOut ' LCD EXTENDED COMMANDS LcdData= $c8: GOSUB LCD_ByteOut ' SET LCD Vop (CONTRAST) LcdData= $06: GOSUB LCD_ByteOut ' SET TEMP COEFFICENT LcdData= $13: GOSUB LCD_ByteOut ' LCD BIAS MODE LcdData= $20: GOSUB LCD_ByteOut ' LCD STANDARD COMMANDS LcdData= $0c: GOSUB LCD_ByteOut ' LCD IN NORMAL MODE RETURN LCD_ByteOut: SHIFTOUT DTA,CLK,1,[LcdData] RETURN LCD_Clear: PosX=0:PosY=0:GOSUB LCD_GotoXY HIGH DC FOR Chr=1 TO 252 LcdData=0:GOSUB LCD_ByteOut LcdData=0:GOSUB LCD_ByteOut NEXT Chr RETURN LCD_GotoXY: LOW DC LcdData=%01000000 | PosY :GOSUB LCD_ByteOut LcdData=%10000000 | PosX :GOSUB LCD_ByteOut RETURN '------------------------------------------------- ' Font DATA table '------------------------------------------------- '................................................. ' DEC Chr HEX DATA $20, $54, $54, $54, $78, $00 '224 а Отлично теперь напишем программу для вывода первой строчки, так как я в своих целях использовал pic12f629 то памяти EEPROM у меня не хватает на все символы от а до я. Code
CLK VAR GPIO.0 DTA VAR GPIO.1 DC VAR GPIO.2 RST VAR GPIO.4 Chr_1 VAR Byte Chr VAR Byte BitMap VAR Word PosX VAR Byte PosY VAR Byte Column VAR Byte [6] LcdData VAR Byte PAUSE 100 GOSUB LCD_INIT PAUSE 100 GOSUB LCD_Clear Start: PosX=0:PosY=0:GOSUB LCD_GotoXY ' начало координат FOR Chr_1=0 TO 9 LOOKUP Chr_1,["привет мир"],BitMap pause 40 GOSUB LCD_CharOut: NEXT Chr_1 stop LCD_CharOut: IF bitmap=32 THEN bitmap=243 ' SPACE BitMap=(bitmap-224) * 6 FOR Chr=0 TO 5 READ BitMap+Chr,Column(Chr) NEXT Chr HIGH DC SHIFTOUT DTA,CLK,1,[Column(0),Column(1),Column(2),Column(3),Column(4),Column(5)] RETURN LCD_Init: LOW RST :pause 20 : HIGH RST : LOW DC ' RESET LCD LcdData= $21: GOSUB LCD_ByteOut ' LCD EXTENDED COMMANDS LcdData= $c8: GOSUB LCD_ByteOut ' SET LCD Vop (CONTRAST) LcdData= $06: GOSUB LCD_ByteOut ' SET TEMP COEFFICENT LcdData= $13: GOSUB LCD_ByteOut ' LCD BIAS MODE LcdData= $20: GOSUB LCD_ByteOut ' LCD STANDARD COMMANDS LcdData= $0c: GOSUB LCD_ByteOut ' LCD IN NORMAL MODE RETURN LCD_ByteOut: SHIFTOUT DTA,CLK,1,[LcdData] RETURN LCD_Clear: PosX=0:PosY=0:GOSUB LCD_GotoXY HIGH DC FOR Chr=1 TO 252 LcdData=0:GOSUB LCD_ByteOut LcdData=0:GOSUB LCD_ByteOut NEXT Chr RETURN LCD_GotoXY: LOW DC LcdData=%01000000 | PosY :GOSUB LCD_ByteOut LcdData=%10000000 | PosX :GOSUB LCD_ByteOut RETURN '------------------------------------------------- ' Font DATA table '------------------------------------------------- ...................................................' DEC Chr HEX DATA $20, $54, $54, $54, $78, $00 '224 а DATA $3C, $4A, $4A, $49, $31, $00 '225 б DATA $7C, $54, $54, $28, $00, $00 '226 в DATA $7C, $04, $04, $04, $0C, $00 '227 г DATA $E0, $54, $4C, $44, $FC, $00 '228 д DATA $38, $54, $54, $54, $08, $00 '229 е DATA $6C, $10, $7C, $10, $6C, $00 '230 ж DATA $44, $44, $54, $54, $28, $00 '231 з DATA $7C, $20, $10, $08, $7C, $00 '232 и DATA $78, $42, $24, $12, $78, $00 '233 й DATA $7C, $10, $28, $44, $00, $00 '234 к DATA $20, $44, $3C, $04, $7C, $00 '235 л DATA $7C, $08, $10, $08, $7C, $00 '236 м DATA $7C, $10, $10, $10, $7C, $00 '237 н DATA $38, $44, $44, $44, $38, $00 '238 о DATA $7C, $04, $04, $04, $7C, $00 '239 п DATA $7C, $14, $14, $14, $08, $00 '240 р DATA $38, $44, $44, $44, $44, $00 '241 с DATA $04, $04, $7C, $04, $04, $00 '242 т DATA $00, $00, $00, $00, $00, $00 '32 space 20 Соответственно меня координаты PosX=0:PosY=0 можно менять расположения изображения на экране. если есть вопросы пишите в комментариях или в личку Выездной кейтеринг "Товарищ Полковник" предлагает услуги специализированного тематического кейтеринга для мероприятий любой сложности. С 2006 года мы обеспечиваем выездное обслуживание в Москве и Подмосковье, также работаем в других регионах. | |
Просмотров: 14866 | Комментарии: 5 | |
Всего комментариев: 5 | ||||
| ||||