Если на дисплее 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) обязателен — он сообщает библиотеке реальную геометрию дисплея. Без инициализации контроллер может остаться в неопределённом состоянии, и на экране появятся хаотичные символы или пустые квадраты. Распиновку выводов для вашего конкретного модуля сверяйте со схемой подключения: нумерация пинов в примере должна соответствовать фактическому монтажу.

☑️ Проверка вывода строки на LCD 1602

Вызван lcd.begin(16, 2) в setup()Перед каждой строкой задан setCursor()Длина строки не превышает 16 символовКонтрастность отрегулирована потенциометромПитание и земля модуля подключены надёжноВыполнено: 0 / 5