|
Проблема с управлением HD44780, Не удается должным образом вывести на дисплей необходимую информацию |
|
|
|
Dec 27 2012, 12:34
|
Участник

Группа: Участник
Сообщений: 40
Регистрация: 9-07-12
Пользователь №: 72 673

|
Здравствуйте, несколько дней уже разбираюсь с управлением ЖКИ 16х2 на базе контроллера HD44780 по 4-битному интерфейсу. Написал по примеру несколько функций для этого. Но максимум что удалось сделать - это вывести мигающий курсор в верхнем левом углу дисплея в виде черного прямоугольника. Скорее всего в функциях есть проблема, помогите разобраться в чем дело, подключение дисплея правильное. Ниже код функций: CODE #include <avr/io.h>
#define F_CPU 4000000UL #include <avr/delay.h>
#define E 0 //E = PORTC.0 - стробирующий сигнал #define RS 1 //RS = PORTC.1 - определение типа данных: команда(RS=0) или данные(RS=1) #define RW 2 //RW = PORTC.2 - выбор режима: запись(RW=0) или чтение(RW=1)
void lcd_SendCommand(unsigned char lcd) //функция передачи команд в дисплей { unsigned char temp; temp =(lcd & ~(1<<RS)) | (1<<E); //задаём тип данных, который хотим переслать PORTC=temp; //выводим в порт старшую тетраду команды, сигналы RS и E PORTC=temp & ~(1<<E); //cигнал записи команды _delay_us(5); temp =((lcd*16) & ~(1<<RS)) | (1<<E); //задаём тип данных, который хотим переслать PORTC=temp; //выводим в порт младшую тетраду команды, сигналы RS и E PORTC=temp & ~(1<<E); //cигнал записи команды _delay_us(5); }
void lcd_SendData(unsigned char lcd) //функция передачи данных в дисплей { unsigned char temp; temp =(lcd & (1<<RS)) | (1<<E); //задаём тип данных, который хотим переслать PORTC=temp; //выводим в порт старшую тетраду данных, сигналы RS и E PORTC=temp & ~(1<<E); //cигнал записи данных _delay_us(5); temp =((lcd*16) & (1<<RS)) | (1<<E); //задаём тип данных, который хотим переслать PORTC=temp; //выводим в порт младшую тетраду данных, сигналы RS и E PORTC=temp & ~(1<<E); //cигнал записи данных _delay_us(5); }
void lcd_init(void) //функция инициализации дисплея { lcd_SendCommand(0b00101000); //4-бит интерфейс, 2 строки, 5х8 точек _delay_ms(10); lcd_SendCommand(0b00000001); //очистка дисплея, указатель встал на 0x00 DDRAM _delay_ms(10); lcd_SendCommand(0b00000110); //адресс будет инкреминтироваться, экран не движется _delay_ms(10); }
int main(void) { DDRC =0b01111111; //настройка PORTC на выход PORTC=0b01111011; _delay_ms(10); lcd_init(); //инициализация дисплея lcd_SendCommand(0b00001100); //включаем дисплей, настраиваем курсор(режим: в виде подчеркивания) lcd_SendData('1'); lcd_SendData('2'); lcd_SendData('3'); lcd_SendData('4'); lcd_SendData('5'); lcd_SendData('6'); lcd_SendData('7'); lcd_SendData('8'); lcd_SendData('9'); lcd_SendData('0'); lcd_SendData('A'); lcd_SendData('B'); lcd_SendData('C'); while(1); }
Сообщение отредактировал IgorKossak - Dec 27 2012, 17:45
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!, форматирование
|
|
|
|
|
 |
Ответов
|
Dec 27 2012, 20:11
|
Частый гость
 
Группа: Участник
Сообщений: 105
Регистрация: 22-06-05
Пользователь №: 6 228

|
Может поможет: hd44780 online simulator: http://www.dinceraydin.com/djlcdsim/djlcdsim.htmlЦитата(ARV @ Dec 27 2012, 19:55)  и была охота велосипед изобретать? полно ведь готовых работающих библиотек... Мне бы не помешали ссылки на работающие библиотеки...
|
|
|
|
|
Dec 29 2012, 13:17
|
Участник

Группа: Участник
Сообщений: 40
Регистрация: 9-07-12
Пользователь №: 72 673

|
Цитата(Genadi Zawidowski @ Dec 28 2012, 20:47)  http://forum.cqham.ru/viewtopic.php?t=17803, там архив с исходниками - файл с именем hd44780.c - для ускорения работы используется проверка готовности дисплея чтением его регистра состояни (т.е., вывод WR задействован). Там всё очень сложно и запутано для меня. Ситуация такая что знакомый написал мне прошивку для проверки работоспособности LCD (выводит русский текст) - и всё нормально вывелось, т.е. косяк точно в моей программе. Один например уже нашел: Вместо - temp =(lcd & ~(1<<RS)) | (1<<E); //задаём тип данных, который хотим переслать Нужно было - temp =(lcd | ~(1<<RS)) | (1<<E); Теперь я могу вывести на экран всякую белеберду, но не то что мне нужно и не там где мне нужно.
|
|
|
|
Сообщений в этой теме
endasm Проблема с управлением HD44780 Dec 27 2012, 12:34 Dust112 Советую проверить функцию инициализации, в частнос... Dec 27 2012, 13:18 endasm Проверил, всё правильно, биты: DL=0, N=1, F=0
lcd... Dec 27 2012, 13:47 Dust112 После 5 секудного гугления:
Необходимо помнить, ч... Dec 27 2012, 14:08 Ruslan1 Цитата(Dust112 @ Dec 27 2012, 16:08) Посл... Dec 27 2012, 15:47 endasm Сейчас поправлю и отпишусь.
Не помогло. Dec 27 2012, 14:54 Dust112 Значит затык в задержках. Какой конкретно ЖКИ испо... Dec 27 2012, 15:07 endasm WINSTAR WH1602B Dec 27 2012, 15:15 Dust112 А мануал на HD44780 читали? Там же есть пример ини... Dec 27 2012, 15:37  ARV Цитата(S17 @ Dec 28 2012, 00:11) Мне бы н... Dec 28 2012, 08:10   S17 Цитата(ARV @ Dec 28 2012, 12:10) их есть ... Dec 28 2012, 10:28    Сергей Борщ QUOTE (endasm @ Dec 29 2012, 15:17) Нужно... Dec 29 2012, 22:52     endasm Цитата(Сергей Борщ @ Dec 30 2012, 01:52) ... Dec 30 2012, 07:53      Marian Цитата(endasm @ Dec 30 2012, 10:53) Я оши... Dec 30 2012, 14:08       ARV Цитата(Marian @ Dec 30 2012, 18:08) Посмо... Dec 30 2012, 15:28 endasm Инициализировал как в даташите - не помогло: курсо... Dec 27 2012, 16:46 Ruslan1 Цитата(endasm @ Dec 27 2012, 18:46) Иници... Dec 27 2012, 20:08 hd44780 А незабываемый AVRLib - http://www.procyonengineer... Dec 28 2012, 16:03 ARV Цитата(hd44780 @ Dec 28 2012, 20:03) У ме... Dec 28 2012, 17:18 vgo1 Лет 7 назад я использовал ЖКИ модуль с Mega8. Прог... Dec 28 2012, 17:33 endasm Вообщем переделал я немного функции и дисплей почт... Dec 30 2012, 21:16 S17 Цитата(endasm @ Dec 31 2012, 01:16) Подск... Dec 30 2012, 21:54 _Артём_ Цитата(endasm @ Dec 30 2012, 23:16) а вот... Dec 30 2012, 21:55  endasm Цитата(_Артём_ @ Dec 31 2012, 00:55) Види... Dec 30 2012, 22:18   Сергей Борщ QUOTE (endasm @ Dec 31 2012, 00:18) подск... Dec 30 2012, 22:55 endasm Вообщем всё наконец таки заработало как надо, спас... Dec 30 2012, 23:02 S17 Цитата(endasm @ Dec 31 2012, 03:02) Вообщ... Dec 31 2012, 16:29
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|