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 Ом в цепи анода решает вопрос.
Что понадобится
- Дисплей LCD 1602
- Переходник I2C на PCF8574 — сильно упрощает подключение
- Потенциометр 10 кОм для контрастности
- Резистор 220 Ом для подсветки
- Arduino UNO