Если на дисплее LCD 1602 строка текста обрезается, съезжает или вовсе не появляется, причина почти всегда кроется в неправильной адресации строк или в превышении лимита в 16 символов на линию. Дисплей 1602 имеет две строки по 16 знакомест, и контроллер HD44780 (или его совместимый аналог) адресует их не последовательно: первая строка начинается с адреса DDRAM 0x00, а вторая — с адреса 0x40. Если не учитывать эту особенность, «линия слова» на экране 1602 будет отображаться непредсказуемо.
В этой статье разберём, как устроена адресация строк дисплея 1602, как корректно вывести текст с помощью библиотеки LiquidCrystal для Arduino, какие ошибки чаще всего ломают отображение строк и как их диагностировать без перепрошивки вслепую.
Как устроены строки дисплея LCD 1602
Символьный индикатор 1602 — это жидкокристаллический модуль с двумя строками по 16 символов. Каждое знакоместо формируется матрицей точек, а за отображение отвечает встроенный контроллер, совместимый с HD44780. Память отображения (DDRAM) у контроллера больше, чем видимая область, поэтому логическая организация строк не совпадает с их визуальным расположением.
Ключевой момент: вторая строка не продолжает первую. Если вывести строку длиннее 16 символов, она не «переедет» автоматически на вторую линию — лишние символы уйдут в невидимую область памяти и просто пропадут с экрана. Именно это чаще всего принимают за неисправность дисплея.
- 📏 Строка 1: адреса DDRAM от 0x00 до 0x0F
- 📏 Строка 2: адреса DDRAM от 0x40 до 0x4F
- 🔤 Максимум 16 символов на одну видимую линию
- 🧭 Переход между строками выполняется только командой установки курсора
Вывод строки через библиотеку LiquidCrystal
Для Arduino стандартным инструментом является библиотека LiquidCrystal. Чтобы поместить слово на нужную линию, используется связка setCursor() и print(). Курсор задаётся в координатах (столбец, строка), где нумерация начинается с нуля.
#include <LiquidCrystal.h>LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print("Line one");
lcd.setCursor(0, 1);
lcd.print("Line two");
}
void loop() {
}
Обратите внимание: вызов lcd.begin(16, 2) обязателен — он сообщает библиотеке реальную геометрию дисплея. Без инициализации контроллер может остаться в неопределённом состоянии, и на экране появятся хаотичные символы или пустые квадраты. Распиновку выводов для вашего конкретного модуля сверяйте со схемой подключения: нумерация пинов в примере должна соответствовать фактическому монтажу.