ELECTRONICS

LCD 1602 и Arduino: схема подключения, библиотека LiquidCrystal и скетч

ДисплеиСкетч проверен компиляцией

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

У него шестнадцать выводов, и это главное, что отпугивает новичков. На деле подключать нужно не все: данные идут по четырём линиям вместо восьми, и в схеме остаётся двенадцать проводов. Если и это много — берут переходник I2C, и проводов становится четыре.

Схема подключения без переходника

Наведите курсор на провод — расскажу, зачем он нужен.

Распиновка

ПроводКуда и зачем
VSS, RW, KЗемля, режим записи и катод подсветки — все на GND.
VDD, AПитание логики и анод подсветки — на 5 В, подсветку через резистор 220 Ом.
V0Контрастность. Средний вывод потенциометра 10 кОм.
RSКоманда или символ. Любой цифровой вывод.
EСтроб чтения. Любой цифровой вывод.
D4–D7Линии данных в четырёхбитном режиме. Четыре любых цифровых вывода.
D0–D3Не подключаются: нужны только в восьмибитном режиме, который экономии ради не используют.

Характеристики

Формат
16 символов × 2 строки
Контроллер
HD44780 или совместимый
Питание
5 В
Ток с подсветкой
около 20 мА
Знакогенератор
латиница, цифры, восемь своих символов
Выводов при подключении
12 напрямую или 4 через переходник I2C

Переходник I2C: двенадцать проводов превращаются в четыре

Маленькая плата с микросхемой PCF8574 припаивается прямо к гребёнке дисплея. После этого от Arduino идут всего четыре провода: питание, земля и две линии шины — на выводы A4 и A5. Контрастность настраивается подстроечником на самом переходнике, а не отдельным потенциометром.

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

В скетче меняется только библиотека: вместо LiquidCrystal берут LiquidCrystal_I2C и указывают адрес — обычно 0x27, реже 0x3F.

Библиотека

LiquidCrystalВходит в состав Arduino IDE, ставить ничего не нужно. Для варианта с переходником понадобится LiquidCrystal_I2C — её устанавливают через менеджер библиотек.

Готовый скетч

#include <LiquidCrystal.h>

// порядок аргументов: RS, E, D4, D5, D6, D7
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
  lcd.begin(16, 2);          // 16 символов, 2 строки

  lcd.setCursor(0, 0);       // столбец 0, строка 0
  lcd.print("Privet!");

  lcd.setCursor(0, 1);       // вторая строка
  lcd.print("LCD 1602");
}

void loop() {
  // счётчик секунд во второй строке
  lcd.setCursor(10, 1);
  lcd.print(millis() / 1000);
}

Скетч собирается arduino-cli под Arduino UNO

Отсчёт в setCursor идёт с нуля, и первым указывается столбец, а не строка. Перепутанный порядок — причина половины вопросов «почему текст выводится не туда».

Частые ошибки

Дисплей светится, но текста нет

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

Видны чёрные прямоугольники в верхней строке

Это дисплей в исходном состоянии — контрастность есть, а данные до него не дошли. Проверяйте RS, E и линии данных.

Текст выводится не в ту строку

В setCursor сначала идёт столбец, потом строка, и обе нумеруются с нуля. Вторая строка — это единица.

Кириллица не выводится

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

Подсветка подключена напрямую к 5 В

Работать будет, но светодиоды подсветки живут заметно меньше. Резистор на 220 Ом в цепи анода решает вопрос.

Что понадобится