Содержание
Урок 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).

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

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

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

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

  • потому что вы каждый раз ложите в буфер новые значения, поверх друг друга

  • Столкнулся с проблемой. Использую функцию float, в которой считаю проценты потом вывожу на дисплей, например Y=%.0f\x25 , где x25 собственно значок процента»%», при симуляции в Протеусе, дисплей просто его не показывает, как будто его нет, может существует другой способ его вывести на дисплей, а то без него как-то не эстетично.

  • lcd_putchar(‘%’);

  • Спасибо.

  • Уважаемый администратор! Я копировал вашу программу для пробы, на протеусе все ок. Залил в мк, припоя lcd, информацию не выводит. Чистый экран. все спасена правильно, но установлен внутренний генератор на 8 МГц. Может быть ли в этом проблема? И какие фьюзбиты ещё должны быть отмечены галочки? Программную прямо из codevisionavr. За ранее спасибо!

  • контрастность крутили?

  • Да. С схемой вроде все в порядке. Экранчик 1602А 2×16 При пуске когда контроллер пустой на экране отражается тестовая верхняя строка. прошиваю мк, экранчик мигнул и пустой. :shock:

  • вероятно инициализация вашего дисплея отличается от того что в библиотеке cavr

  • Как мне быть в этой ситуации? можно ли найти готовую библиотеку для этого LCD. или что-то можно корректировать в библиотеке? У Вас большой опыт помогите.
    Есть еще надписи 1602A и ниже QAPASS на али утверждали что он на камне HD44780.

  • Вот так на али написано было.
    ЖК-дисплей модуль с голубой Blacklight
    Широкий угол обзора и высокую контрастность
    Встроенный отраслевой стандарт HD44780 эквивалент ЖК Контроллер
    обычно используется в: копиров, факсов, лазерные принтеры, промышленных тестового оборудования, Сетевое оборудование, таких как маршрутизаторы и устройства хранения
    Тип НОК: персонажи
    может отображать 2-линии x 16-символов
    работать с 5 В DC
    модуль Размеры: 80 мм x 35 мм x 9 мм (приблизительно)
    Область просмотра размер: 64.5 мм x 15 мм (приблизительно)
    & #12288;
    ЖК-дисплей модуль x 1
    http://ae01.alicdn.com/kf/HTB1iltSRFXXXXcVaXXXq6xXFXXXH.jpg?size=86543&height=800&width=800&hash=8ab79d22fa2b5ee7e38dfa6c8f51e627

  • У меня в обвязки кварца стояли конденсаторы на 12 пик. Я их задел и экран запустился, там на 22 нужно ставить?

  • 18-22

  • Я долго ковырялся и наконец-то нашел! Экранчик оказался очень чувствительный к источнику питания. Сделал стабилизацию все ОК! Вам спасибо!
    Мне сайт ваш очень нравиться, огромное количество полезной инфы. Если у вас есть возможность, сделайте пожалуйста урок по i-button. считывание, запись и вывод на LCD и LED. Там заплет какой-то с с памятью МК. Просветите если можете. И еще раз Спасибо. :razz:

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

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

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Свежие записи
Последние комментарии
  • Загрузка...
Архивы
Счетчик
Яндекс.Метрика