Содержание
Урок 1. Первый проект
Урок 2. Управление кнопками
Урок 3. Подключение LCD
Урок 4. Использование ШИМ
Урок 5. Таймеры
Урок 6.1. Статическая индикация
Урок 6.2. Динамическая индикация
Урок 7.1. Генерация звука
Урок 7.2. Генерация звука. Продолжение
Урок 8.1. Передача данных через UART
Урок 8.2. Передача данных через UART. Продолжение»
Урок 9. Передача данных через SPI
Урок 10. Изучение АЦП. Простой вольтметр
Урок 11. Получение синуса при помощи ШИМ
Урок 12. Измерение температуры
Урок 13. Внешние прерывания.
Урок 14. Использование отладчика
Урок 15.1. Управление инкрементальным энкодером
Урок 15.2. Управление громкостью, при помощи энкодера
Урок 16. Управление RGB светодиодом
Урок 17. Использование ИК
Урок 18.1. Знакомство с графическим дисплеем
Урок 18.2 Вывод изображения на графический дисплей
Урок 18.3 Вывод русскоязычного текста
Урок 19. Формирование сигнала, при помощи ЦАП (R2R)
Урок 20. Опрос матричной клавиатуры
Урок 21. Сторожевой таймер
Урок 22.1 Воспроизведение wav. Введение.
Урок 22.2 Воспроизведение wav. Продолжение.
Урок 23.1 Работа с внешней памятью
Урок 23.2 Работа с файловой системой Fat

Мы научились: управлять микроконтроллером и управлять чем то, при помощи микроконтроллера. Теперь, чтобы сделать наше устройство более дружелюбным, будем к нему подключать дисплей.

Сразу оговорюсь дисплей — символьный. Это значит что внутри у него, в памяти, уже есть алфавит. Все что нам нужно — дать команду вывести строку.

Дисплеи бывают разные: разный цвет подсветки экрана, разное количество строк, разное количество символов в строке. Поэтому, здесь рассматривается дисплей WH0802A-YGK-CT, 2 строки по 8 символов, подсветка желтая светодиодная.

Создадим проект в CodeVision. На вкладке LCD укажем порт, к которому будет подключен наш дисплей (PORTD). В строке Char/Line указываем количество символов нашего ЖК дисплея (8).

Генерируем, сохраняем проект. Приводим код к следующему виду:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <mega8.h>
 
#asm
.equ __lcd_port=0x12 ;PORTD
#endasm
#include <lcd.h> 
 
void main(void)
{
PORTD=0x00;
DDRD=0x00;
lcd_init(8);
 
while (1)
{
 
};
}

Добавились новые строчки

#asm
.equ __lcd_port=0x12
#endasm
Дисплей подключен к PORTD
#include <lcd.h> Библиотека для работы с LCD дисплеями

 

Немного изменим код нашей программы:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 #include <mega8.h>
 
#asm
.equ __lcd_port=0x12
#endasm
#include <lcd.h>
 
void main(void)
{
 
PORTD=0x00;
DDRD=0x00;
 
lcd_init(8);
 
lcd_gotoxy(0,0);
lcd_putsf("lesson3");
 
#pragma rl+
lcd_gotoxy(0,1);
lcd_putsf("Урок3");
#pragma rl-
 
while (1)
{
 
};
}
lcd_gotoxy(0,0); Переставить курсор в координату ХУ,х – позиция по горизонтали,у – по вертикали
lcd_putsf(«lesson3»); Вывести слово lesson3 на LCD дисплей
#pragma rl+
lcd_putsf(«Урок3»);
#pragma rl-
Данная директива позволяет вывести на экран русский алфавит, при условии что дисплей его поддерживает

Запустим получившийся код на симуляцию в ISIS Proteus. Как видно первая строчка отображается правильно, а вот вторая кракозябами. Дело в том, что протеус не распознает русский алфавит и если ваш дисплей не будет поддерживать его, то на реальном дисплее тоже будут непонятные символы.

Теперь нужно опробовать все это на настоящем дисплее. Тут есть свои нюансы. Открываем даташит на наш дисплейчик и видим такую вот таблицу с распиновкой:

Наверное, тут все очевидно, но все же:

1 — Земля 0В.

2 — Питание +5В.

3 — Управление контрастностью. Подключается  через переменный резистор.

Светодиодная подсветка. Подключаем как обычный светодиод.

А — подключаем к «+» через токоограничивающий резистор, К — подключаем к «земле» (GND).

Еще один важный момент — микроконтроллер должен тактироваться от кварцевого резонатора, в противном случае корректная работа не гарантируется.

Внешний вид прошитого устройства

Файл прошивки и протеуса доступны тут

206 комментариев: Урок 3. Как подключить ЖК(LCD) дисплей к AVR микроконтроллеру

  • Просьба четко прояснить строку .equ __lcd_port=0x12. Почему именно 0х12? А если будет порт C, или D? Просто пытаюсь понять суть…

  • Вопрос отпал… Залез в заголовочник, PortВ — 0х12, PortC — 0x15, PortD — 0x18… Я всё правильно понял?

  • Извиняюсь, наоборот: PortD — 0x12, PortC — 0x15, PortB — 0x18

  • правильно

  • Пытаюсь подключить дисплей к Mega328P в протеус, выдаёт ошибку «[HD44780] Attempted to read after writing a single nibble [LCD2]» Код полностью ваш скопировал, порт правильно прописал 0x0B — PORTD В чём может быть проблема?

  • сгенерите заново код, там в разных версиях cavr немного отличалось.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Последние комментарии
  • Загрузка...
Счетчик
Яндекс.Метрика