Разное и полезное > Микроконтроллеры и их программирование

Работа с ЖКИ

(1/4) > >>

lgedmitry:
Сегодня-таки научился буквы писАть.
Надо сказать, готового рецепта в инете накопать не смог.
Пришлось помучиться.

Вот что получилось: (Извините, но у Вас нет доступа в Галерею)

Выкладываю листинг, вдруг кому полезно будет:

--- Код: ---*
 * lcd_servo1.asm
 *
 *  Created: 30.09.2013 19:18:45
 *   Author: se
 */

.macro del //задержка
 
ldi bebe,@2  //0,0,1-0.6338us
ldi meme,@1  //0,1,0-0.16ms
ldi kuku,@0  //1,0,0-40.96ms
subi bebe,1
sbci meme,0
sbci kuku,0
brcc pc-3
.endmacro

.macro lcdcom //отправка команды в ЛСД
cbi portc,rs
ldi bebe,@0
out portd,bebe
sbi portc,e
del 0,0,3
cbi portc,e
del 0,0,60
.endmacro

.macro lcddata //отправка данных в ЛСД
sbi portc,rs
ldi bebe,@0
out portd,bebe
sbi portc,e
del 0,0,3
cbi portc,e
del 0,0,60
.endmacro

.macro initlcd
//настраиваем порты Д-на вывод данных. С4 и С5 на вывод е и rs соответственно
ldi bebe,255
out ddrd,bebe
out portd,bebe
in bebe,ddrc
sbr bebe,((1<<rs)|(1<<e))
out ddrc,bebe
sbi portc,rs
sbi portc,e
del 0,200,0

lcdcom 0b00111000 //8бит шина 2строки 5*8 пикселов в знаке
lcdcom 0b00001100
//забиваем символы в знакогенератор
lcdcom 0b01000000
// Б
lcddata 0b00011110
lcddata 0b00001001
lcddata 0b00001000
lcddata 0b00001110
lcddata 0b00001001
lcddata 0b00001001
lcddata 0b00010111
lcddata 0b00000000
// Е
lcddata 0b00011110
lcddata 0b00001001
lcddata 0b00001000
lcddata 0b00001100
lcddata 0b00001010
lcddata 0b00001000
lcddata 0b00010111
lcddata 0b00000000
// Р
lcddata 0b00011110
lcddata 0b00001001
lcddata 0b00001001
lcddata 0b00001101
lcddata 0b00001011
lcddata 0b00001000
lcddata 0b00010100
lcddata 0b00000000
// Н
lcddata 0b00011010
lcddata 0b00001001
lcddata 0b00001001
lcddata 0b00001101
lcddata 0b00001011
lcddata 0b00001001
lcddata 0b00010001
lcddata 0b00000000
// Д
lcddata 0b00011110
lcddata 0b00001001
lcddata 0b00001001
lcddata 0b00001001
lcddata 0b00001101
lcddata 0b00001011
lcddata 0b00010001
lcddata 0b00000000
// Й
lcddata 0b00011010
lcddata 0b00001000
lcddata 0b00001001
lcddata 0b00001011
lcddata 0b00001101
lcddata 0b00001001
lcddata 0b00010001
lcddata 0b00000000
// -
lcddata 0b00000000
lcddata 0b00000000
lcddata 0b00000000
lcddata 0b00011110
lcddata 0b00000001
lcddata 0b00000000
lcddata 0b00000000
lcddata 0b00000000

lcdcom 0b00000001
del 0,17,255
lcdcom 0b00000110
.endmacro

.equ rs=5
.equ e=4
.def bebe=r16
.def meme=r17
.def kuku=r18
.org 0
rjmp start

start:
initlcd


lcdcom 0b00000001
del 0,10,0
lcddata 'n'
lcddata 'u'
lcddata 'c'
lcddata 'l'
lcddata 'o'
lcddata 'n'
lcddata 0x20
lcddata '-'
lcdcom 0b11000110
lcddata 6
lcddata 0x20
lcddata 0
lcddata 1
lcddata 2
lcddata 1
lcddata 3
lcddata 4
lcddata 1
lcddata 5
loop:
rjmp loop
--- Конец кода ---

Catcatcat:
вот мой вариант работы с HD44780 или KS0066U, на Си.
http://catcatcat.d-lan.dp.ua/skachat/biblioteki/biblioteka-dlya-rabotyi-s-lcd-indikatorami-na-drayvere-hd44780-ili-ks0066u/

Библиотека состоит из 5 функций которые облегчают вывод на индикаторы любых сообщений. Библиотека корректно выводить как латинские так и русские символы, очень удобна для формирования строковых сообщений.

InitLCD ()  - функция начальной инициализации дисплея. Необходимо использовать один раз в начале программы.

ClearLCD () – очистка индикатора. Когда необходимо полностью очистить индикатор.

CursorLCD (unsigned char stroka,unsigned char stolbec), где stroka – номер строки 0-3, stolbec – 0-40. В функции нет проверки привязки к типу индикатора, по этому необходимо корректно вводить номер столбца и номер строки. Используем эту функцию, когда необходимо установить курсор для вывода сообщения с определенной позиции индикатора. Пример, CursorLCD(0,5); – вывод в самую верхнюю строку с 6 знакоместа.

StringLCD (const unsigned char *str); – вывод строки текста в положение курсора, длина текста не должна превышать 255 символов. Хотя для вывода на индикатор необходимо учитывать его длину. Необходимо понимать, что драйвер HD44780 представляет собой управления до 40 знакомест, а в зависимости от того как производитель подключил драйвер к ЖКИ матрице и сколько он таких драйверов использует в дисплее, то превышение длины строки может в одном варианте привести к потере информации, в другом, то что конец строки появиться на третей или четвертой строке дисплея.

Пример,StringLCD(“Привет мир ILLISSI!!”);



SendLCDdata (unsigned char data, unsigned char rs); – загрузка в индикатор команды или данных для вывода на индикатор. Где data - код символа или команда, rs - 0 команда, 1 – данные. Предназначена когда необходимо вывести какой-то определенный (не печатный) символ из таблицы кодировки или команду. Пример, SendLCDdata (0xEF,1); – выводит на дисплей символ градус, SendLCDdata (0b00001111,0); – команда – дисплей включен/курсор включен/мигание курсора включено.

lgedmitry:
Catcatcat, Ген, завтра попробую твой вывод строк поглядеть  поближе. Темка интересная :v:

Catcatcat:
Если будут непонятки спрашивай помогу.

xar:
lgedmitry, Шрифт прикольный )

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Перейти к полной версии