Главная → Дисплеи

Дисплей LCD1602 с I2C-переходником PCF8574: обзор и подключение

17 сентября 2026 · Дисплеи

Экран 16×2 — первый дисплей, который берёт новичок, и первая же ловушка: ему нужны шесть проводов данных и управления, плюс отдельная подстройка контраста. Переходник на микросхеме PCF8574 сжимает всю обвязку до четырёх проводов: питание, земля и две линии шины I2C. Внутри стоит 8-битный расширитель портов: он принимает по I2C байт и раздаёт его на выводы дисплея в четырёхбитном режиме. Сэкономленные пины уходят под датчики и реле.

Что внутри связки

Сам LCD1602 построен на контроллере, совместимом с классическим HD44780: внутри — память символов DDRAM, знакогенератор в ROM и стандартный набор команд. По паспорту Winstar команда очистки экрана выполняется за 1,53 мс. Дисплей умеет обмениваться данными 8-битной параллельной шиной, но поддерживает и четырёхбитный режим — им пользуются все переходники: старшие четыре линии DB4–DB7 подключены к расширителю, полубайты он передаёт по очереди.

PCF8574 по паспорту NXP питается от 2,5 до 6 В, держит шину 100 кГц и в покое потребляет типовые 2,5 мкА. Это восемь квазидвунаправленных портов: на выводе сидит слабый источник тока 100 мкА, единицу он подтягивает сам, а ноль ставится сильным ключом. Гарантированный ток стока — 10 мА на вывод при 5 В, предельный — 25 мА; дисплею хватает с запасом, а подсветку на плате переходника коммутирует транзистор.

Адрес на шине задаётся перемычками A0–A2: у базового PCF8574 это 0x20–0x27, у младшего собрата PCF8574A — 0x38–0x3F. Поэтому «фирменный» адрес 0x27, зашитый в половину примеров из интернета, у части плат не совпадает — на переходнике может стоять именно 8574A. На плате также стоит подстроечник контраста и джампер включения подсветки.

Характеристики из паспортов

Параметр Значение
Индикация 16 символов × 2 строки, матрица 5×8 точек
Питание логики дисплея (WH1602B, Winstar) 4,5–5,5 В (номинал 5,0)
Ток логики 1,0–1,5 мА (тип. 1,2 мА при 5 В)
Контрастное напряжение VDD−V0 тип. 3,7 В при 25 °C (3,2 В при 70 °C)
Подсветка белый LED: 14,4–20 мА, тип. 16 мА при 3,5 В; питание только током; ресурс 50 000 ч при ≤16 мА
Контроллер дисплея LSI, совместимый с HD44780; очистка экрана 1,53 мс
Габариты 80×36×13,5 мм, зона просмотра 66×16 мм
Температура дисплея −20…+70 °C
Переходник PCF8574 (NXP) 2,5–6 В; I2C 100 кГц; покой 2,5 мкА; сток до 25 мА на вывод (суммарно 80 мА)
Адреса I2C 0x20–0x27 (PCF8574) или 0x38–0x3F (PCF8574A), выбор A0–A2

Источники: паспорт Winstar «WH1602B-TMI-ET#» (Rev. C, 2009) и datasheet NXP «PCF8574; PCF8574A» Rev. 5, май 2013.

Подключение к Arduino

UNO или Nano, питание 5 В:

После первой подачи питания крутите подстроечник контраста, пока на верхней строке не появятся символы: по паспорту дисплею нужно примерно 3,7 В между VDD и V0, и при заводском положении движка экран часто выглядит «пустым», хотя всё исправно.

Подключение к ESP32

SDA → GPIO21, SCL → GPIO22, питание переходника — от пина 5V (VIN при питании по USB). Есть тонкость: порог логической единицы у дисплея — 0,7 от напряжения питания, то есть 3,5 В при 5-вольтовой логике, а ESP32 выдаёт 3,3 В. Формально не хватает, но реальный порог чипов заметно ниже паспортного, и связка работает без преобразователей уровней — это массовая практика. Для ответственного промышленного устройства поставьте согласование уровней, в самоделках на столе оно не нужно.

Код: сначала сканер, потом текст

Первый шаг при любой I2C-периферии — найти её на шине. Сканер перебирает адреса и печатает те, что ответили:

#include <Wire.h>

void setup() {
  Wire.begin();              // ESP32: Wire.begin(21, 22);
  Serial.begin(115200);
  for (byte a = 8; a < 120; a++) {
    Wire.beginTransmission(a);
    if (Wire.endTransmission() == 0) {   // 0 = устройство ответило ACK
      Serial.print("Найдено: 0x");
      Serial.println(a, HEX);
    }
  }
}

void loop() {}

Дальше — вывод текста. Библиотека LiquidCrystal_I2C (Frank de Brabander), ставится из менеджера библиотек Arduino IDE:

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);  // адрес из сканера, столбцов, строк

void setup() {
  lcd.init();          // инициализация переходника и дисплея
  lcd.backlight();     // включить подсветку
  lcd.setCursor(0, 0); // столбец 0, строка 0
  lcd.print("LCD1602+PCF8574");
  lcd.setCursor(0, 1);
  lcd.print("T = 25.4 C");
}

void loop() {}

setCursor считает столбцы с нуля: позиция (16, 0) — уже за краем экрана, символ уйдёт в невидимую область DDRAM, а не на вторую строку. Убрать подсветку — lcd.noBacklight(), выключить экран без потери текста — lcd.display() / lcd.noDisplay().

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

  1. Подсветка горит, букв нет. Почти всегда контраст: крутите подстроечник на плате переходника. Экран при этом живой, просто V0 стоит далеко от нужных 3,7 В.
  2. Сканер не находит адрес. Проверьте, что модуль запитан от 5 В и не перепутаны SDA/SCL. Вторая причина — чип PCF8574A с диапазоном 0x38–0x3F вместо ожидаемого 0x27. Третья — забыли Wire.begin() до обращения к шине.
  3. Верхняя строка из 16 квадратов. Дисплей включился, но инициализация не прошла: чаще всего неверный адрес или плохой контакт. Иногда помогает задержка перед lcd.init() — контроллеру дисплея нужно время на собственный сброс.
  4. Каша на экране, зависания. Длинные макетные провода ловят наводки на 100 кГц. Укоротите проводники, при необходимости снизьте частоту шины.
  5. Кракозябры при выводе кириллицы. В ROM знакогенератора кириллицы нет — там латиница, цифры и японская катакана. Варианты: нарисовать нужные буквы через createChar(), поставить библиотеку с таблицей перекодировки или печатать латиницей.
  6. Подсветка не включается. Сначала джампер на переходнике. Затем помните: LED питается током — по паспорту 16 мА, и жечь его напрямую от пина без транзистора нельзя; на плате он уже есть.

Итог

Связка LCD1602 + PCF8574 — самый дешёвый способ добавить в проект экран и не отдать за него шесть пинов: две линии шины, питание, готовая библиотека. Шина общая, поэтому соседями дисплея становятся, например, датчик освещённости BH1750 или часы реального времени DS3231: у каждого свой адрес, и все они висят на одних SDA/SCL.

Информация собрана из открытых источников и паспортов производителей и не является истиной в последней инстанции. Характеристики, распиновку и совместимость проверяйте по документации конкретной партии модуля перед покупкой и подключением.

Читайте дальше

Питание

Модуль TP4056: зарядка литиевого аккумулятора в проекте на Arduino

Как только устройство перестаёт висеть на USB и переезжает на аккумулятор, появляется вопрос зарядки. Ответ почти всегда один и тот же —…

Читать обзор →
Моторы и приводы

Драйверы шаговых двигателей A4988 и DRV8825: настройка тока подстроечником

Контроллер не может питать шаговый двигатель напрямую: обмотке нужны амперы, а пин Arduino отдаёт 40 мА. Между ними ставят драйвер, и две…

Читать обзор →
Контроллеры

Raspberry Pi Pico на RP2040: чем он лучше Arduino и где проигрывает

Что это за плата Raspberry Pi Pico — не уменьшенный «Raspberry Pi», а отдельная линейка микроконтроллерных плат на собственном чипе RP2040. Linux…

Читать обзор →