Подключение жк дисплея к микроконтроллеру arduino

Подключение LCD 1602 (HD44780) к Arduino

Опубликовано 18.03.2014 10:17:00

LCD дисплеи размерности 1602, на базе контроллера HD44780, являются одними из самых простых, доступных и востребованных дисплеев для разработки различных электронных устройств.

Его можно встретить как и в устройствах собранных на коленке, так и в промышленных устройствах, таких, как например, автоматы для приготовления кофе.

 На базе данного дисплея собраны самые популярные модули и шилды в тематике Arduino такие как LCD I2C модуль и LCD Keypad Shield.

В данной статье мы расскажем как его подключить к Arduino и вывести информацию.

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

Размерность дисплеев на контроллере HD44780 может быть различной, управляться они будут одинаково. Самые распространенные размерности 16×02 (т.е. по 16 символов в двух строках) либо 20×04. Разрешение же самих символов – 5×8 точек.

Большинство дисплеев не имеют поддержку кириллицы, имеют её лишь дисплеи с маркировкой CTK. Но данную проблему можно попытаться частично решить (продолжение в статье).

Выводы дисплея:

На дисплее имеется 16pin разъем для подключения. Выводы промаркированы на тыльной стороне платы.

1 (VSS) – Питание контроллера (-) 2 (VDD) – Питание контроллера (+) 3 (VO) – Вывод управления контрастом 4 (RS) – Выбор регистра  5 (R/W) – Чтение/запись ( режим записи при соединении с землей) 6 (E) – Еnable (строб по спаду)  7-10 (DB0-DB3) – Младшие биты 8-битного интерфейса 11-14 (DB4-DB7) – Старшие биты интерфейса 15 (A) – Анод (+) питания подсветки

16 (K) – Катод (-) питания подсветки

 

Режим самотестирования:

Перед попытками подключения и вывода информации, было бы неплохо узнать рабочий дисплей или нет. Для этого необходимо подать напряжение на сам контроллер (VSS и VDD), запитать подсветку (A и K), а также настроить контрастность.

Для настройки контрастности следует использовать потенциометр на 10 кОм. Каким он будет по форме – не важно. На крайние ноги подается +5V и GND, центральная ножка соединяется с выводом VO

После подачи питания на схему необходимо добиться правильного контраста, если он будет настроен не верно, то на экране ничего не будет отображаться. Для настройки контраста следует поиграться с потенциометром.

При правильной сборке схемы и правильной настройке контраста, на экране должна заполниться прямоугольниками верхняя строка.

Вывод информации:

Для работы дисплея используется встроенная с среду Arduino IDE библиотека LiquidCrystal.h

//Работа с курсором 
lcd.setCursor(0, 0); // Устанавливаем курсор (номер ячейки, строка)
lcd.home(); // Установка курсора в ноль (0, 0)
lcd.cursor(); // Включить видимость курсора (подчеркивание)
lcd.noCursor(); // Убрать видимость курсора (подчеркивание)
lcd.blink(); // Включить мигание курсора (курсор 5х8)
lcd.noBlink(); // Выключить мигание курсора (курсор 5х8) //Вывод информации
lcd.print(“zelectro.cc”); // Вывод информации
lcd.clear(); // Очистка дисплея, (удаление всех данных) установка курсора в ноль
lcd.rightToLeft(); // Запись производится справа на лево
lcd.leftToRight(); // Запись производится слева на право
lcd.scrollDisplayRight(); // Смещение всего изображенного на дисплее на один символ вправо
lcd.scrollDisplayLeft(); // Смещение всего изображенного на дисплее на один символ влево //Информация полезная для шпионов:)
lcd.noDisplay(); // Информация на дисплее становится невидимой, данные не стираются
// если, в момент когда данная функция активна, ничего не выводить на дисплей, то
lcd.display(); // При вызове функции display() на дисплее восстанавливается вся информация которая была

Сам же дисплей может работать в двух режимах :

• 8-битный режим – для этого используются и младшие и старшие биты (BB0- DB7)

• 4-битный режим – для этого используются и только младшие биты (BB4- DB7)

Использование 8-битного режима на данном дисплее не целесообразно. Для его работы требуется на 4 ноги больше, а выигрыша в скорости практически нет т.к. частота обновления данного дисплея упирается в предел < 10раз в секунду.

Для вывода текста необходимо подключить выводы RS, E, DB4, DB5, DB6, DB7 к выводам контроллера. Их можно подключать к либым пинам Arduino, главное в коде задать правильную последовательность.

Пример программного кода:
//Тестировалось на Arduino IDE 1.0.5 #include  // Лобавляем необходимую библиотеку
LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7) void setup(){   lcd.

begin(16, 2); // Задаем размерность экрана   lcd.setCursor(0, 0); // Устанавливаем курсор в начало 1 строки
  lcd.print(“Hello, world!”); // Выводим текст
  lcd.setCursor(0, 1); // Устанавливаем курсор в начало 2 строки
  lcd.print(“zelectro.

cc”); // Выводим текст
} void loop(){
}

 

Создание собственных символов

С выводом текста разобрались, буквы английского алфавита зашиты в память контроллера внутри дисплея и с ними проблем нет. А вот что делать если нужного символа в памяти контроллера нет?

Не беда, требуемый символ можно сделать вручную (всего до 7ми символов). Ячейка, в рассматриваемых нами дисплеях, имеет разрешение 5х8 точек. Все, к чему сводится задача создания символа, это написать битовую маску и расставить в ней единички в местах где должны гореть точки и нолики где нет.

В ниже приведенном примере нарисуем смайлик.

//Тестировалось на Arduino IDE 1.0.5 #include 
#include  // Лобавляем необходимую библиотеку
// Битовая маска символа улыбки
byte smile[8] =
{
  B00010,
  B00001,
  B11001,
  B00001,
  B11001,
  B00001,
  B00010,
};    
LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7) void setup(){   lcd.begin(16, 2); // Задаем размерность экрана   lcd.createChar(1, smile); // Создаем символ под номером 1   lcd.setCursor(0, 0); // Устанавливаем курсор в начало 1 строки
  lcd.print(“1”); // Выводим смайлик (символ под номером 1) – “1”
      } void loop(){
}

Бонус

В комментариях участник сообщества скинул ссылку на генератор символов

В данный момент еще реализованы не все элементы нашего сообщества. Мы активно работаем над ним и в ближайшее время возможность комментирования статей будет добавлена.

Источник: http://zelectro.cc/LCD1602

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

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

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

Дисплеи бывают разные: разный цвет подсветки экрана, разное количество строк, разное количество символов в строке. Поэтому, здесь рассматривается дисплей 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
 
#asm
.equ __lcd_port=0x12 ;PORTD
#endasm
#include
 
void main(void)
{
PORTD=0x00;
DDRD=0x00;
lcd_init(8);
 
while (1)
{
 
};
}

#include #asm .equ __lcd_port=0x12 ;PORTD #endasm #include void main(void) { PORTD=0x00; DDRD=0x00; lcd_init(8); while (1) { }; }

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

#asm .equ __lcd_port=0x12#endasm Дисплей подключен к PORTD
#include Библиотека для работы с 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
 
#asm
.equ __lcd_port=0x12
#endasm
#include
 
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)
{
 
};
}

#include #asm .equ __lcd_port=0x12 #endasm #include 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).

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

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

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

Источник: http://avr-start.ru/?p=296

Оптимизированный интерфейс и адаптер для подключения к Arduino ЖК дисплея с 16-битной шиной. Часть 1 – Схемотехническое решение

На сегодняшний день на рынке представлено множество различных модулей с цветным TFT дисплеем (TFT модуль), которые могут использоваться радиолюбителями и разработчиками в своих проектах. Все они доступны по стоимости и предназначены для непосредственного подключения к микроконтроллеру или процессору.

К сожалению, большинство этих модулей имеет 16-битный интерфейс и рассчитаны на подключение к ARM микроконтроллерам, что не позволяет использовать их в проектах на базе платформы Arduino.

В общем случае, при подключении TFT модуля к Arduino усматриваются две проблемы: все TFT модули имеют рабочее напряжение 3.

3 В и 16-разрядную шину данных, что потребует от микроконтроллера наличия большого количества свободных линий ввода/вывода.

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

Аппаратная часть

Автором был разработан адаптер, подключаемый к плате Arduino и выполняющий преобразование логических уровней (из 5 В в 3.3 В) и формирование 16-битных данных из двух 8-битных последовательностей.

Если не принимать во внимание преобразование логических уровней, то адаптер представляет собой регистр-защелку, который позволяет сократить количество выводов, требуемых шиной данных, с 16 до 8 за счет дополнительных выводов управления защелкой.

В итоге мы экономим 7 выводов, но немного усложняем аппаратную часть (Рисунок 1).

Рисунок 1. Внешний вид адаптера для подключения ЖК дисплея с 16-битной шиной к плате Arduino.

Параллельный регистр-защелка работает как ячейка памяти. В «прозрачном» режиме данные, поступающие на вход, незамедлительно появляются на выходе регистра.

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

Именно это свойство регистра-защелки можно использовать для преобразования двух последовательных 8-битных значений в 16-битное, другими словами, с использованием защелки мы расширяем их до 16 бит (Рисунок 1).

Рисунок 2. Две фазы работы регистра-защелки при формировании 16-битных данных из двух 8-битных последовательностей.

На Рисунке 2 изображена диаграмма двух фаз работы регистра-защелки.

На первом этапе микроконтроллер передает младшие 8 бит, которые одновременно поступают на 16-битную шину данных через защелку и в обход нее, формируя младший байт (как нам требуется) и старший байт (который сейчас нам не нужен).

На втором этапе мы защелкиваем регистр, а затем микроконтроллер передает старшие 8 бит. Регистр в таком режиме игнорирует новые данные, поэтому старший байт, минуя защелку, формируется на выходе шины.

Читайте также:  Arduino: дополнительные модули, расширяющие возможности - arduino+

Еще одним важным преимуществом такого решения является прекрасная совместимость с интерфейсом внешней памяти XMEM, встроенного в некоторые микроконтроллеры Atmel AVR, в частности, в микроконтроллеры платы Arduino Mega 1280 и 2560. Использование интерфейса XMEM позволит упростить программный код для управления TFT дисплеем.

Принципиальная схема

В составе схемы (Рисунок 3) имеются преобразователи логических уровней, регистр-защелка, разъем для непосредственного подключения к плате Arduino Mega и разъем для подключения 16-разрядного TFT модуля.

Рисунок 3. Принципиальная схема адаптера для подключения TFT модуля с 16-разрядной шиной к плате Arduino Mega.

Выводы двухрядного штыревого разъема P2 (10×2) для подключения адаптера к плате Arduino Mega разведены так, чтобы соответствовать сигнальным линиям интерфейса XMEM, которые располагаются в блоке выводов, начинающихся с вывода 23.

Символ «H» в обозначении сигналов разъема означает, что это логические сигналы с уровнем 5 В (Рисунок 4).

На разъеме доступны сигналы данных и управления, включая сигнал CS (выбор кристалла), соответствующий сигналу ALE (разрешение фиксации адреса) интерфейса XMEM (хотя для управления TFT модулем он требуется очень редко и обычно просто подключен к «земле»).

Рисунок 4. Распределение выводов двухрядного разъема для подключения адаптера к плате Arduino.

Микросхема 8-разрядного шинного приемопередатчика SN54LVTH2245 компании Texas Instruments является идеальным выбором для преобразования логических уровней (Рисунок 5). Микросхема достаточно распространеа, имеют задержка распространения сигнала порядка 2 нс (это очень мало), а входы и выходы находятся на противоположных сторонах корпуса, что упрощает печатную плату и монтаж.

Рисунок 5. Микросхема шинного приемопередатчика SN54LVTH2245.

Скоростные характеристики микросхемы регистра-защелки D-типа SN74LV573APW удовлетворяют требованиям, предъявляемым интерфейсом XMEM  (Рисунок 6). Регистры и шинные приемопередатчики выпускаются многими производителями, поэтому вы можете использовать другие микросхемы с аналогичными параметрами.

Рисунок 6. Микросхема регистра-защелки SN74LV573APW.

Штыревой разъем питания и дополнительных сигналов P3 используется для подачи питания на TFT модуль от платы Arduino. Два выхода общего назначения U1 и U2 могут использоваться для некоторого расширения функционала. Как вариант, один из них можно использовать для ШИМ управления подсветкой TFT панели.

Двухрядный разъем P1 используется для подключения TFT модуля. Автор с целью экономии места применил разъем, выводы которого загнуты под прямым углом к плате.

Проект печатной платы

Ручная трассировка платы не представила каких-либо трудностей, все элементы схемы уместились на площади 45 × 35 мм (Рисунок 7).

Рисунок 7. Проект печатной платы адаптера.

Загрузки

Принципиальная схема и рисунки печатной платы (PDF) – скачать

Продолжение следует…

Часть 2 – Программная реализация

Часть 3 – Оптимизация алгоритма прорисовки линий и варианты конфигурирования драйвера

Источник: https://www.rlocman.ru/shem/schematics.html?di=149163

Как подключить LCD дисплей с I2C модулем к Arduino

В статье будем подключать к Ардуино жидкокристаллический дисплей 1602 с I2C модулем FC-113, благодаря чему подключение будет осуществляться всего по 2 проводам данных + 2 проводам питания.

  • Arduino;
  • LCD 1602 дисплей (16 символов, 02 строки);
  • I2C адаптер FC-113;
  • соединительные провода.
  • Модуль FC-113 сделан на базе микросхемы PCF8574T, которая представляет собой 8-битный сдвиговый регистр – «расширитель» входов-выходов для последовательной шины I2C. На рисунке микросхема обозначена DD1.
  • R1 – подстроечный резистор для регулировки контрастности ЖК дисплея.
  • Джампер J1 используется для включения подсветки дисплея.
  • Выводы 1…16 служат для подключения модуля к выводам LCD дисплея.
  • Контактные площадки А1…А3 нужны для изменения адреса I2C устройства. Запаивая соответствующие перемычки, можно менять адрес устройства. В таблице приведено соответствие адресов и перемычек: “0” соответствует разрыву цепи, “1” – установленной перемычке. По умолчанию все 3 перемычки разомкнуты и адрес устройства 0x27.

I2C модуль FC-113 для подключения ЖК экрана

Подключение модуля к Arduino осуществляется стандартно для шины I2C: вывод SDA модуля подключается к аналоговому порту A4, вывод SCL – к аналоговому порту A5 Ардуино. Питание модуля осуществляется напряжением +5 В от Arduino. Сам модуль соединяется выводами 1…16 с соответствующими выводами 1…16 на ЖК дисплее.

Схема подключения ЖК дисплея к Arduino по протоколу I2C

3Библиотека для работы по протоколу I2C

Теперь нужна библиотека для работы с LCD по интерфейсу I2C. Можно воспользоваться, например, вот этой (ссылка в строке “Download Sample code and library”).

Библиотека для работы по протоколу I2C

Скачанный архив LiquidCrystal_I2Cv1-1.rar разархивируем в папку libraries, которая находится в директории Arduino IDE.

Библиотека поддерживает набор стандартных функций для LCD экранов:

ФункцияНазначение
LiquidCrystal() создаёт переменную типа LiquidCrystal и принимает параметры подключения дисплея (номера выводов);
begin() инициализация LCD дисплея, задание параметров (кол-во строк и символов);
clear() очистка экрана и возврат курсора в начальную позицию;
home() возврат курсора в начальную позицию;
setCursor() установка курсора на заданную позицию;
write() выводит символ на ЖК экран;
print() выводит текст на ЖК экран;
cursor() показывает курсор, т.е. подчёркивание под местом следующего символа;
noCursor() прячет курсор;
blink() мигание курсора;
noBlink() отмена мигания;
noDisplay() выключение дисплея с сохранением всей отображаемой информации;
display() включение дисплея с сохранением всей отображаемой информации;
scrollDisplayLeft() прокрутка содержимого дисплея на 1 позицию влево;
scrollDisplayRight() прокрутка содержимого дисплея на 1 позицию вправо;
autoscroll() включение автопрокрутки;
noAutoscroll() выключение автопрокрутки;
leftToRight() задаёт направление текста слева направо;
rightToLeft() направление текста справа налево;
createChar() создаёт пользовательский символ для LCD-экрана.

4Скетч для вывода текста на LCD экран по шине I2C

Откроем образец: Файл Образцы LiquidCrystal_I2C CustomChars и немного его переделаем. Выведем сообщение, в конце которого будет находиться мигающий символ. В комментариях к коду прокомментированы все нюансы скетча.

#include // подключаем библиотеку Wire #include // подключаем библиотеку ЖКИ #define printByte(args) write(args); // uint8_t heart[8] = {0x0,0xa,0x1f,0x1f,0xe,0x4,0x0}; // битовая маска символа «сердце» LiquidCrystal_I2C lcd(0x27, 16, 2); // Задаём адрес 0x27 для LCD дисплея 16×2 void setup() { lcd.init(); // инициализация ЖК дисплея lcd.backlight(); // включение подсветки дисплея lcd.createChar(3, heart); // создаём символ «сердце» в 3 ячейке памяти lcd.home(); // ставим курсор в левый верхний угол, в позицию (0,0) lcd.print(“Hello SolTau.ru!”); // печатаем строку текста lcd.setCursor(0, 1); // перевод курсора на строку 2, символ 1 lcd.print(” i “); // печатаем сообщение на строке 2 lcd.printByte(3); // печатаем символ «сердце», находящийся в 3-ей ячейке lcd.print(” Arduino “); } void loop() { // мигание последнего символа lcd.setCursor(13, 1); // перевод курсора на строку 2, символ 1 lcd.print(” “); delay(500); lcd.setCursor(13, 1); // перевод курсора на строку 2, символ 1 lcd.print(” “); delay(500); }

Кстати, символы, записанные командой lcd.createChar();, остаются в памяти дисплея даже после выключения питания, т.к. записываются в ПЗУ дисплея 1602.

5Создание собственных символов для ЖК дисплея

Немного подробнее рассмотрим вопрос создания собственных символов для ЖК экранов. Каждый символ на экране состоит из 35-ти точек: 5 в ширину и 7 в высоту (+1 резервная строка для подчёркивания). В строке 6 приведённого скетча мы задаём массив из 7-ми чисел: {0x0, 0xa, 0x1f, 0x1f, 0xe, 0x4, 0x0}.

Преобразуем 16-ричные числа в бинарные: {00000, 01010, 11111, 11111, 01110, 00100, 00000}. Эти числа – не что иное, как битовые маски для каждой из 7-ми строк символа, где “0” обозначают светлую точку, а “1” – тёмную.

Например, символ сердца, заданный в виде битовой маски, будет выглядеть на экране так, как показано на рисунке.

Создание собственного символа для LCD экрана

6Управление ЖК экраном по шине I2C

Загрузим скетч в Arduino. На экране появится заданная нами надпись с мигающим курсором в конце.

Управление ЖК экраном с помощью Arduino по шине I2C

7Что находится «за» шиной I2C

В качестве бонуса рассмотрим временную диаграмму вывода латинских символов “A”, “B” и “С” на ЖК дисплей. Эти символы имеются в ПЗУ дисплея и выводятся на экран просто передачей дисплею их адреса. Диаграмма снята с выводов RS, RW, E, D4, D5, D6 и D7 дисплея, т.е. уже после преобразователя FC-113 «I2C параллельная шина». Можно сказать, что мы погружаемся немного «глубже» в «железо».

Временная диаграмма вывода латинских символов “A”, “B” и “С” на LCD дисплей 1602

На диаграмме видно, что символы, которые имеются в ПЗУ дисплея (см. стр.11 даташита, ссылка ниже), передаются двумя полубайтами, первый из которых определяет номер столбца таблицы, а второй – номер строки.

При этом данные «защёлкиваются» по фронту сигнала на линии E (Enable), а линия RS (Register select, выбор регистра) находится в состоянии логической единицы, что означает передачу данных. Низкое состояние линии RS означает передачу инструкций, что мы и видим перед передачей каждого символа.

В данном случае передаётся код инструкции возврата каретки на позицию (0, 0) ЖК дисплея, о чём также можно узнать, изучив техническое описание дисплея.

И ещё один пример. На этой временной диаграмме показан вывод символа «Сердце» на ЖК дисплей.

Временная диаграмма вывода символа «Сердце» из ПЗУ на ЖК дисплей 1602

Опять, первые два импульса Enable соответствуют инструкции Home() (0000 00102) – возврат каретки на позицию (0; 0), а вторые два – вывод на ЖК дисплей хранящийся в ячейке памяти 310 (0000 00112) символ «Сердце» (инструкция lcd.createChar(3, heart); скетча).

Скачать LCD 1602 datasheet

  • Скачать техническое описание на LCD дисплей 1602.

Источник: https://soltau.ru/index.php/arduino/item/372-kak-podklyuchit-lcd-displej-s-i2c-modulem-k-arduin

Подключение LCD дисплея hd44780 к Arduino

Всем привет! Сегодня мы будем подключать LCD дисплей к нашей ардуинке.

Ну начнем как полагается с железа! Вот стандартная распиновка дисплея на контроллере HD44780 16Х2 знакомест.

А вот стандартное подключение к Arduino

Все просто, нужен сам дисплей, Arduino и подстроечный резистор на 10Ком для регулировки контраста.

Для проверки дисплея можно подключить только вот эти контакты:

  • 1 контакт дисплея — Vss,  —> земля  GND
  • 2 контакт дисплея —  Vdd, —> питание  +5 В
  • 3 контакт дисплея —  Vo, —> управление контрастностью напряжением ⇨ выход потенциометра
  • 15 контакт дисплея — A, —> питание для подсветки  +5 В
  • 16 контакт дисплея —  K, —> земля для подсветки  GND

При таком подключении должен загорется первый ряд, вот так:

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

Полное подключение выглядит так:

  • 1 контакт дисплея — Vss, —> земля  GND
  • 2 контакт дисплея — Vdd, —>  питание  +5 В
  • 3 контакт дисплея — Vo, —> управление контрастностью напряжением выход потенциометра
  • 4 контакт дисплея — RS, —> выбор регистра пин 12 Arduino
  • 5 контакт дисплея — R/W, —> чтение/запись  земля (режим записи)
  • 6 контакт дисплея — E, —>  Enable  пин 11 Arduino
  • 7-10 контакт дисплея — DB0-DB3, —> младшие биты 8-битного интерфейса; не подключены
  • 11-14 контакт дисплея — DB4-DB7, —> старшие биты интерфейса  пины 5-2 Arduino
  • 15 контакт дисплея — A, —> питание для подсветки  +5 В
  • 16 контакт дисплея — K, —> земля для подсветки  GND
Читайте также:  Универсальный экзоскелет для переноски грузов

Ну а теперь софтовая часть! Запускаем Arduino IDE

Файл —> Образцы —> LiquidCrystal —> HelloWorld:

И видим код:

// подключаем библтотеку для работы с LCD:#include // команда инициализации пинов дисплеяLiquidCrystal lcd(12, 11, 5, 4, 3, 2);  // запускаем дисплей, 2 строки по 16 символов  // выводим на дисплей хеллоу ворд  lcd.print(“hello, world!”);  // ставим курсор на вторую строку на нулевой столбец// нумерация строк с 0 (верхняя строка 0 нижняя 1)  // выводим на дисплей число секунд, прошедших с момента старта Arduino  lcd.print(millis() / 1000);

Компилируем, загружаем и получаем результат:

Давайте теперь рассмотрим стандартные процедуры библитеки LCD Arduino:

  • home() и clear()Первый метод возвращает курсор в начало экрана; clear() делает то же самое, заодно стирая всё, что было на дисплее до этого.
  • write(ch)Выводит одиночный символ ch на дисплей. Пример:
    lcd.write(0); // вывести символ с кодом 0; см. метод createChar()

     

  • cursor() и noCursor()Позволяют показать курсор на дисплее (символ подчёркивания) и скрыть его.
  • blink() и noBlink()Включить и выключить мигание курсора, если включено его отображение.
  • display() и noDisplay()Включить и выключить дисплей.
  • scrollDisplayLeft() и scrollDisplayRight()Прокрутить экран на один символ влево или вправо.
  • autoscroll() и noAutoscroll()Включить и выключить режим автопрокрутки. В этом режиме при выводе каждого следующего символа содержимое экрана будет смещено на один символ влево (или вправо, если включен режим вывода справа налево), а выводимый символ займёт место первого сдвинутого. Проще говоря, в этом режиме все последующие символы выводятся в одно и то же место, вытесняя текущее содержимое экрана.
  • leftToRight() и rightToLeft()Устанавливают направление вывода текста: слева направо и справа налево, соответственно.
  • createChar(ch, bitmap)Самая крутая функция: позволяет создать свой символ с кодом ch (от 0 до 7), пользуясь массивом битовых масок bitmap для задания тёмных и светлых точек. Пример:
      // Регистрируем собственные символы с кодом 0  lcd.createChar(0, symbol);// выводим на экран собственный символ

    Сегодня мы научильсь использовать LCD дисплей с Arduino!

Источник: http://it-chainik.ru/podklyuchenie-lcd-displeya-hd44780-k-arduino/

Жидкокристаллический дисплей (LCD) 1602 и Arduino

Жидкокристаллический дисплей (LCD) мод. 1602 (даташит) – отличный выбор для ваших проектов.

Первое, что радует – низкая цена. Второе – наличие готовых библиотек под Arduino. Третье – наличие нескольких модификаций, которые в том числе идут с различными подсветками (голубая, зеленая). В этой статье рассмотрим основы подключения данного дисплея к Arduino и приведем пример небольшого проекта для отображения уровня освещенности на дисплее с использованием фоторезистора.

Ссылки для заказа необходимого электронного оборудования, которое использовалось в двух примерах ниже из Китая

Контакты и схема подключения LCD 1602 к Arduino

Контакты на этом дисплее пронумерованы от 1 до 16. Нанесены они на задней части платы. Как именно они подключаются к Arduino, показано в таблице ниже.

Табл. 1. Подключение контактов LCD 1620 к Arduino

Подключение 1602 к ArduinoЕсли дисплей 1602 питается от Arduino через 5-ти вольтовой USB-кабель и соответствующий пин, для контакта контраста дисплея (3-й коннектор – Contrast) можно использовать номинал 2 кОм. Для Back LED+ контакта можно использовать резистор на 100 Ом. Можно использовать и переменный резистор – потенциометр для настройки контраста вручную.

На основании таблицы 1 и схемы, приведенной ниже, подключите ваш жидкокристаллический дисплей к Arduino. Для подключения вам понадобится набор проводников. Желательно использовать разноцветные проводники, чтобы не запутаться.

Табл. 2. Предпочтительные цвета проводников

Схема подключения LCD дисплея 1602 к Arduino:

Базовый пример программы для работы LCD 1602 с Arduino

В примере используются 0, 1, 2, 3, 4, и 5 пины Arduino для подключения соответствующих пинов 4, 6, 11, 12, 13 и 14 с дисплея 1602 (смотри табл. 1). После этого в коде для Arduino мы инициализируем lcd() следующим образом:

LiquidCrystal lcd(0, 1, 2, 3, 4, 5);

Этот кусок кода объясняет Arduino, как именно подключен LCD дисплей.

Весь соурс файл проекта метеостанции, в которой используется дисплей LCD 1602 можно скачать по этой ссылке.

LCD 1602A, Arduino и датчик освещенности (фоторезистор)

В примере мы рассмотрим подключение модификации дисплея – 1602A и фоторезистора. В результате данного проекты мы сможем отображать на дисплее числовые значения, пропорциональные интенсивности освещения.

Данный пример будет хорошим стартом для начинающих разбираться с Arduino. Стоит обратить внимание, что у дисплея 1602 существуют различные модификации. Соответственно, расположение контактов на них могут несколько отличаться.

Необходимые материалы

  • 1 Arduino UNO;
  • 1 макетная плата (63 рельсы);
  • 1 датчик освещенности (фоторезистор);
  • 1 потенциометр на 50 кОм;
  • 1 LCD дисплей 1602A;
  • 1 резистор на 10кОм;
  • 1 рельса коннекторов (на 16 пинов);
  • 1 USB кабель.

LCD Дисплей 1602A

Дисплеи, как правило, продаются без распаянных коннекторов. То есть, паяльник в руках придется подержать. Вам понадобится 16 пинов. Запаивайте со стороны коротких ног, длинные оставляйте для дальнейшего подключения к плате или другим периферийным устройствам.

После распайки можете устанавливать дисплей на макетной плате. Желательно, на самой нижней дорожке, чтобы у вас осталась возможность соединять дисплей через дополнительные коннекторы с платой.

Подключение дисплея 1602A к Arduino

Первое что необходим о – запитать дисплей. Подключите два кабеля от +5 вольт и земли к соответствующим рядам плюс-минус на макетной плате.

Подключите: пин на 5 вольт (5V) с Arduino к одной из дорожек макетной платы.

Подключите: пин Земля (GND) Arduino к другой дорожек (макетной платы).

После этого подключаем питание экрана и его подсветку к дорожкам, на макетной плате, на которых у нас получается 5 вольт и минус.

Подключите: дорожку GND (минус) на макетной плате к 1 пину на LCD экране (он обозначен как VSS).

Подключите: дорожку 5 вольт (плюс) на макетной плате ко 2 пину на LCD экране (он обозначен как VDD).

Подключите: дорожку 5 вольт (плюс) на макетной плате к 15 пину на LCD экране (он обозначен как A).

Подключите: дорожку GND (минус) на макетной плате к 16 пину на LCD экране (он обозначен как K).

Подключаем нашу Arduino к персональному компьютеру через USB-кабель и вуаля! Экран должен включиться.

Следующий шаг – подключение потенциометра для регулировки контрастности дисплея. В большинстве гайдов, используется потенциометр на 10 кОм, но 50 кОм тоже подойдет. Из-за большего диапазона значений сопротивлений на выходе потенциометра, более точная настройка становится сложнее, но для нас в данном случае это не критично. Установите потенциометр на макетной плате и подключите три его пина.

Подключите: первый пин на потенциометре к минусу на макетке.

Подключите: средний пин потенциометра к 3 пину на дисплее (он обозначен как V0).

Подключите: третий пин на потенциометре к плюсу на макетке.

После подачи питания на плату через USB-кабель, на дисплее первый ряд должен заполниться прямоугольниками.

Если вы их не увидели, немного проверните ручку потенциометра слева направо, чтобы отрегулировать контраст.

В дальнейшем, когда мы будем отображать числовые значения на экране, вы сможете более точно отрегулировать контрастность. Если ваш дисплей выглядит примерно так, вы все делаете верно:

Продолжим. Теперь нам надо обеспечить обмен данными между Arduino и LCD дисплеем 1602A для отображения символов.

Для этого подключите 4 пин дисплея (RS) к 7 пину Arduino (желтый коннектор). 5 пин дисплея (RW) – к ряду пинов земля на макетке (черный кабель).

6 пин дисплея (E) – к 8 пину Arduino (ШИМ).

11 пин дисплея (D4) – к 9 пину Arduino (ШИМ).

12 пин дисплея (D5) – к 10 пину Arduino (ШИМ).

13 пин дисплея (D6) – к 11 пину Arduino (ШИМ).

14 пин дисплея (D7) – к 12 пину Arduino (ШИМ).

Программа для Arduino IDE – отображение надписи на дисплее 1602A

Представленный ниже кусок кода достаточно скопипастить в Arduino IDE и загрузить на плату:

#include<\p>

LiquidCrystal lcd(7, 8, 9, 10, 11 , 12);

void setup() {

lcd.begin(16, 2);

lcd.setCursor(0,1);

lcd.write(“LIGHT: “);

}

void loop() { }

После загрузки программы на плату, на дисплее во второй строке отобразится следующая надпись:

Своеобразный “hello world!” на LCD 1602A запущен. Я вас поздравляю.

Подключаем фоторезистор и заливаем всю программу в Arduino

Теперь подключим фоторезистор. Подключите три провода к свободным рельсам на макетной плате (условно пронумеруем их 1, 2, 3). Оставьте в рельсах немного места для самого датчика освещенности и резистора.

Рельсу GND с макетной платы подключаем к рельсе 1. A0 (аналоговый вход) с Arduino – к рельсе 2. 5 вольт с макетной платы – к рельсе 3.

Дальше подключаем наш датчик и резистор к подготовленным рельсам. Какие именно ноги идут к земле, а какие – к питанию для нашего датчика освещенности и резистора неважно (в отличие от, например, светодиода, в котором есть катод и анод). Так что тут не перепутаете.

Датчик освещенности подключаем к рельсе 1 и рельсе 2. Резистор – к рельсе 2 и к рельсе 3.

Теперь вернемся к нашей программе и добавим несколько строк в пустующее пока что тело функции loop():

void loop() {

int sensorValue = analogRead(A0);

lcd.setCursor(7,1);

lcd.print(sensorValue);

delay(100);

}

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

Источник: http://arduino-diy.com/arduino-zhidkokristallicheskiy-displey-LCD-1602

AVR. Учебный курс. Подключение к AVR LCD дисплея HD44780

Сегодня разменял четверть века!

Так случилось, что прикупил я тут себе поприколу LCD дисплейчик две строки по восемь символов. Валялся он в ящике валялся, да чегото поперло меня и решил я его заюзать, попутно вкурив в его работу.

О том как подключить к AVR LCD дисплей я вам сейчас и поведаю.

Для начала оговорюсь сразу, что речь тут пойдет о LCD индикаторах на контроллере HD44780, который стал промышленным стандартом де-факто на рынке цифро-буквенных дисплеев.

Продается везде где только можно, стоит недорого (8х2 мне обошелся порядка 150 рублей), а также под него написана куча кода. Я же, как обычно, решил изобрести велосипед и сварганить свою собственную тру-библиотеку для работы с этим типом индикаторов. Разумеется на ассемблере, а на чем же еще? 😉

Подключение.
LCD на базе HD44780 подключается к AVR микроконтроллеру напрямую к портам. Есть два способа подключения — на 8 бит и на 4 бита. В восьмибитном режиме немножко проще закидывать байты — не нужно сдвигать байт, зато в четырех битном резко нужно тратить на целых четыре ножки контроллера меньше. Есть еще одна особенность работы в 8-битном режиме — к некоторым контроллерам можно подрубить этот дисплей как внешнее ОЗУ и засылать данные простыми командами пересылки. Лично я подключил его в режиме полного порта у меня один фиг выводы уже девать некуда было, так что не жалко.

  • Выводы DB7…DB0 это шина данных/адреса.
  • E — стробирующий вход. Дрыгом напряжения на этой линии мы даем понять дисплею что нужно забирать/отдавать данные с/на шину данных.
  • RW — определяет в каком направлении у нас движутся данные. Если 1 — то на чтение из дисплея, если 0 то на запись в дисплей.
  • RS — определяет что у нас передается, команда (RS=0) или данные (RS=1). Данные будут записаны в память по текущему адресу, а команда исполнена контроллером.

Со стороны питания все еще проще:

Подключение дисплея
Видимая и скрытая область экранной памяти
Структура адресации контроллера HD44780
Формирование символа в ячейке CGRAM

  • GND — минус, он же общий.

  • Vcc — плюс питания, обычно 5V
  • V0 — вход контрастности. Сюда нужно подавать напряжение от нуля до напряжения питания, тем самым задается контрастность изображения. Можно поставить переменный резистор, включенный потенциометром и крутить в свое удовольствие.

    Главное поймать значение максимального контраста, но чтобы не было видно знакомест (серый ореол из квадратов вокруг символа). Если же выставить слишком малый контраст, то символы будут переключаться лениво и задумчиво. Примерно как в калькуляторе у которого сели батарейки.

  • А — это вход Анода светодиодной подсветки. Короче плюс.

  • К — соответственно Катод, он же минус. Подсветка хавает примерно 100мА и поэтому нужно выставить туда токоограничительный резистор на 100 Ом. Кстати, многие ЖК дисплеи имеют на плате пятачки для припайки резисторов.

    Если прозвонить, то можно убедиться в том, что эти линии ведут на входы питания LCD, поэтому, впаяв резисторы, можно не заморачиваться на запитку подстветки, она будет подключена к питанию контроллера.

Логическая структура LCD контроллера HD44780

Контроллер имеет свой блок управления, который обрабатывает команды и память. Она делится на три вида:

DDRAM — память дисплея. Все что запишется в DDRAM будет выведено на экран. То есть, например, записали мы туда код 0x31 — на экране выскочит символ «1» т.к. 0х31 это ASCII код цифры 1.

Но есть тут одна особенность — DDRAM память гораздо больше чем видимая область экрана. Как правило, DDRAM содержит 80 ячеек — 40 в первой строке и 40 во второй, а на дисплей может двигаться по этой линейке как окошко на логарифмической линейке, высвечивая видимую область.

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

Курсор не обязательно может быть на экране, он может располагаться и за экраном или быть отключен вовсе.

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

CGRAM — тоже таблица символов, но ее мы можем менять, создавая свои символы. Адресуется она линейно, то есть вначале идет 8 байт одного символа, построчно, снизу вверх — один бит равен одной точке на экране. Потом второй символ тем же макаром. Поскольку знакоместо у нас 5 на 8 точек, то старшие три бита роли не играют.

Всего в CGRAM может быть 8 символов, соответственно CGRAM имеет 64 байта памяти. Эти программируемые символы имеют коды от 0х00 до 0х07.

Так что, закинув, например, в первые 8 байт CGRAM (первый символ с кодом 00) какую нибудь фигню, и записав в DDRAM нуль (код первого символа в CGRAM) мы увидим на экране нашу хрень.

Доступ к памяти.
Тут все просто. Мы командой выбираем в какую именно память и начиная с какого адреса будем писать. А потом просто шлем байты. Если указано, что записываем в DDRAM то на экран (или в скрытую область) полезут символы, если в CGRAM то байты полезут уже в память знакогенератора. Главное потом не забыть переключится обратно на область DDRAM

Система команд.
Система команд проста как мычание. О том, что передается команда контроллеру дисплея сообщит нога RS=0. Сама команда состоит из старшего бита, определяющего за что отвечает данная команда и битов параметров, указывающих контроллеру HD44780 как дальше жить.

Таблица команд:

DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 Значение
1 Очистка экрана. Счетчик адреса на 0 позицию DDRAM
1 Адресация на DDRAM сброс сдвигов, Счетчик адреса на 0
1 I/D S Настройка сдвига экрана и курсора
1 D C B Настройка режима отображения
1 S/C R/L Сдвиг курсора или экрана, в зависимости от битов
1 DL N F Выбор числа линий, ширины шины и размера символа
1 AG AG AG AG AG AG Переключить адресацию на SGRAM и задать адрес в SGRAM
1 AD AD AD AD AD AD AD Переключить адресацию на DDRAM и задать адрес в DDRAM

Теперь поясню что значат отдельные биты:

  • I/D — инкремент или декремент счетчика адреса. По дефолту стоит 0 — Декремент. Т.е. каждый следующий байт будет записан в n-1 ячейку. Если поставить 1 — будет Инкремент.
  • S — сдвиг экрана, если поставить 1 то с каждым новым символом будет сдвигаться окно экрана, пока не достигнет конца DDRAM, наверное удобно будет когда выводишь на экран здоровенную строку, на все 40 символов, чтобы не убегала за экран.
  • D — включить дисплей. Если поставить туда 0 то изображение исчезнет, а мы в это время можем в видеопамяти творить всякие непотребства и они не будут мозолить глаза. А чтобы картинка появилась в эту позицию надо записать 1.
  • С — включить курсор в виде прочерка. Все просто, записали сюда 1 — включился курсор.
  • B — сделать курсор в виде мигающего черного квадрата.
  • S/C сдвиг курсора или экрана. Если стоит 0, то сдвигается курсор. Если 1, то экран. По одному разу за команду
  • R/L — определяет направление сдвига курсора и экрана. 0 — влево, 1 — вправо.
  • D/L — бит определяющий ширину шины данных. 1-8 бит, 0-4 бита
  • N — число строк. 0 — одна строка, 1 — две строки.
  • F — размер символа 0 — 5х8 точек. 1 — 5х10 точек (встречается крайне редко)
  • AG — адрес в памяти CGRAM
  • АD — адрес в памяти DDRAM

Я сам долго тупил в эту табличку, пытаясь понять, что же от меня хотят. Видимо был невыспавшийся, но и вправду, она на первый взгляд не очевидна, поэтому подкреплю все примером.

Задача:

  1. Включить дисплей.
  2. Очистить содержимое.
  3. Сдвинуть курсор на одну позицию.
  4. И записать туда «1».

Решение (последовательность команд):

Первым делом Инициализация дисплея без которой большая часть дисплеев на HD44780 просто откажется работать. Некоторые виды имеют дефолтные состояние (шина 8 бит, курсор в 0) и им только дисплей включить. Но все же ее лучше сделать, мало ли что там намудрил разработчик. Лишней не будет.

  • 00111000 Шина 8 бит, 2 строки
  • 00000001 Очистка экрана
  • 00000110 Инкремент адреса. Экран не движется
    1. 00001100 Включили дисплей (D=1)
    2. 00000001 Очистили дисплей. Указатель встал на DDRAM
    3. 00010100 Сдвинули курсор (S/C=0) вправо (R/L=1)
    4. 00110001 — это мы уже записали данные (ножка RS=1) код «1» 0х31

    Жирным шрифтом выделен идентификатор команды, ну а остальное по таблице увидите.

    Задача: создать свой символ. С кодом 01 и вывести его на экран.
    Считаем, что дисплей у нас уже инициализирован и готов к приему данных.

    Решение:

    1. 01001000      Выбираем в CGRAM адрес 0х08 — как раз начало второго символа (напомню, что на один символ уходит 8 байт)
    2. 00000001     Это пошли 8 байт данных.

      (RS=1)

    3. 00000010     Рисуем значок молнии, ну или
    4. 00000100     ССовскую Зиг руну, кому как
    5. 00001000     больше нравится.

    6. 00011111     Старшие три бита не действуют
    7. 00000010     Туда можно писать что угодно, на
    8. 00000100     результат влиять не будет.

    9. 00001000     Последний байт данных  
    10. 10000000      А это уже команда — переключение адреса на DDRAM и указатель на адрес 0000000 — первый символ в первой строке.
    11. 00000001      И снова данные (RS=1), код 01 — именно в него мы засунули нашу молнию.

    Опа и он на экране!

    Так, с логикой разобрались, пора вкуривать в физику протокола общения. Код я приведу несколько позже, когда вылижу свою библиотеку и заоптимизирую до состояния идеала. Пока же дам алгоритм, а его уж на любом языке программирования реализовать можно. Хоть на ассемблере, хоть на Сях, да хоть на Васике 🙂

    Алгоритм чтения/записи в LCD контроллер HD44780
    Направление, а также команда/данные определяются ножками, а чтение и запись осуществляется по переходу строба (вывод Е) из 1 в 0

    Инициализация портов

    1. RS, RW, E — в режим выхода.
    2. DB7..DB0 в режим входа. Впрочем, можно их не трогать, дальше переопределим.

    Ожидание готовности, чтение флага занятости.

    1. Порт данных на вход с подтяжкой (DDR=0, PORT=1)
    2. RS=0 (команда)
    3. RW=1 (чтение)
    4. E=1 (Готовьсь!!!)
    5. Пауза (14 тактов процессора на 8МГЦ хватало)
    6. Е=0 (Пли!)
    7. Читаем из порта. Если бит 7 (Busy flag) установлен, то повторяем все заново, пока не сбросится.

    Запись команды

    1. Ожидание готовности
    2. RS=0 (команда)
    3. RW=0 (запись)
    4. Е=1 (Готовьсь!!!)
    5. Порт на выход
    6. Вывести в порт код команды
    7. Пауза
    8. Е=0 (Пли!)
    9. Орудие на плечо Порт на вход, на всякий случай.

    Запись Данных

    1. Ожидание готовности
    2. RS=1 (Данные)
    3. RW=0 (запись)
    4. Е=1 (Готовьсь!!!)
    5. Порт на выход
    6. Вывести в порт код команды
    7. Пауза
    8. Е=0 (Пли!)
    9. Порт на вход, на всякий случай.

    Чтение команды

    1. Ожидание готовности
    2. Порт данных на вход с подтяжкой (DDR=0, PORT=1)
    3. RS=0 (команда)
    4. RW=1 (чтение)
    5. Е = 1 (Готовьсь! В этот момент данные из LCD вылазят на шину)
    6. Пауза
    7. Считываем данные с порта
    8. E=0 (Ать!)

    Чтение Данных

    1. Ожидание готовности
    2. Порт данных на вход с подтяжкой (DDR=0, PORT=1)
    3. RS=1 (Данные)
    4. RW=1 (чтение)
    5. Е = 1 (Готовьсь! В этот момент данные из LCD вылазят на шину)
    6. Пауза
    7. Считываем данные с порта
    8. E=0 (Ать!)

    С четырех разрядной шиной все точно также, только там каждая операция чтения/записи делается за два дрыга строба.

    Запись:

    1. E=1
    2. Пауза
    3. Выставили в порт старшую тетраду
    4. E=0
    5. Пауза
    6. Е=1
    7. Пауза
    8. Выставили в порт младшую тетраду
    9. Е=0

    Чтение

    1. E=1
    2. Пауза
    3. Читаем из порта старшую тетраду
    4. Е=0
    5. Пауза
    6. Е=1
    7. Пауза
    8. Читаем из порта младшую тетраду
    9. Е=0

    Ждите код 🙂 Скоро будет 🙂
    UPD:
    А вот и код!

    Источник: http://easyelectronics.ru/avr-uchebnyj-kurs-podklyuchenie-k-avr-lcd-displeya-hd44780.html

    Ссылка на основную публикацию
    Adblock
    detector