Библиотека LiquidCrystal
Символьные дисплеи 1602 и 2004 на контроллере HD44780, подключённые напрямую шестью проводами.
Это библиотека для дисплея без переходника I2C: сам модуль 1602 подключается к плате шестью сигнальными выводами — RS, E и четыре линии данных. Если на обороте дисплея припаяна маленькая плата с подстроечником и четырьмя выводами, нужна другая библиотека, LiquidCrystal I2C.
Дисплей — это объект класса Print, поэтому на него работает всё то же, что для Serial: print() с числами, строками и точностью для дробных.
Установка и подключение
В менеджере библиотек ищите LiquidCrystal автора Arduino. Если менеджер предложит поставить зависимости — соглашайтесь. Как открыть менеджер и что делать, если библиотека не находится, — в общей статье про библиотеки.
#include <LiquidCrystal.h>Создание объекта — обычно до setup():
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // RS, E, D4, D5, D6, D7 — выводы платы
lcd.begin(16, 2); // в setup(): столбцов и строкМетоды
Только то, что нужно в обычном скетче. Сигнатуры сверены с версией 1.0.7.
begin(uint8_t cols, uint8_t rows)- Инициализация: размер дисплея. 16×2 или 20×4.
print(...)- Вывести текст или число с текущей позиции курсора. Как у Serial: print(3.14159, 2) даст 3.14.
setCursor(uint8_t col, uint8_t row)- Поставить курсор: столбец и строка с нуля. setCursor(0, 1) — начало второй строки.
clear()- Очистить экран и вернуть курсор в начало. Медленная операция, около 2 мс.
home()- Курсор в начало без очистки.
cursor() / noCursor()- Показать или спрятать подчёркивание под курсором.
blink() / noBlink()- Мигающий курсор.
display() / noDisplay()- Выключить показ, не стирая содержимое, и включить обратно.
scrollDisplayLeft() / scrollDisplayRight()- Сдвинуть всё содержимое на один символ.
autoscroll() / noAutoscroll()- Автоматически сдвигать текст при выводе за край.
createChar(uint8_t n, uint8_t map[8])- Задать свой символ 5×8 точек под номером 0–7; выводится как write(n).
write(uint8_t c)- Вывести один символ по коду, в том числе свой из createChar().
Пример
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
lcd.begin(16, 2);
lcd.print("Привет? Нет: Hello"); // кириллицы в HD44780 нет
}
void loop() {
lcd.setCursor(0, 1);
lcd.print(millis() / 1000);
lcd.print(" s "); // пробелы затирают хвост от длинного числа
delay(500);
}Контраст крутится подстроечником на выводе V0. Если видны только чёрные прямоугольники или ничего — крутите его, прежде чем искать ошибку в коде.
На чём попадаются
Два ряда чёрных квадратов
Дисплей не инициализировался: перепутаны RS и E или неверные номера выводов в конструкторе. Порядок — RS, E, D4, D5, D6, D7.
Кириллица выводится как мусор
В обычных модулях знакогенератор без русских букв. Либо латиница, либо свои символы через createChar(), либо модуль с русской прошивкой.
Старое число не стирается
print() не чистит строку. Дописывайте пробелы после короткого значения или печатайте поле фиксированной ширины.
Мерцает при обновлении
clear() каждый цикл — плохая идея. Перерисовывайте только изменившиеся позиции через setCursor().