|
Проблема с управлением 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, 16:46
|
Участник

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

|
Инициализировал как в даташите - не помогло: курсор мигает черным прямоугольником в конце первой строки. На счет готовых библиотек - это ещё большие дебри, пробовал парочку - ничего не выводится, скорее всего я просто неумело их использую. Там куча всяких параметров, а мне много не надо. Я хочу сам разобраться на примере простых операций.
Сообщение отредактировал endasm - Dec 27 2012, 16:47
|
|
|
|
Сообщений в этой теме
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 и была охота велосипед изобретать? полно ведь гото... Dec 27 2012, 15:55 S17 Может поможет:
hd44780 online simulator: http://ww... Dec 27 2012, 20:11  ARV Цитата(S17 @ Dec 28 2012, 00:11) Мне бы н... Dec 28 2012, 08:10   S17 Цитата(ARV @ Dec 28 2012, 12:10) их есть ... Dec 28 2012, 10:28  Genadi Zawidowski Цитата(S17 @ Dec 28 2012, 00:11) Мне бы н... Dec 28 2012, 17:47   endasm Цитата(Genadi Zawidowski @ Dec 28 2012, 20... Dec 29 2012, 13:17    Сергей Борщ 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 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
|
|
|