Подключение LCD дисплея к Ардуино
LCD дисплей Arduino позволяет визуально отображать данные с датчиков. Расскажем, как правильно подключить модуль QAPASS LCD к Arduino по I2C и рассмотрим основные команды инициализации и управления LCD 1602. Также рассмотрим различные функции в языке программирования C++, для вывода текстовой информации на дисплее, который часто требуется использовать в проектах Ардуино.
Как подключить к Arduino LCD без I2C
Текстовый экран 16×2 используется для вывода информации с датчиков, отображения меню или подсказок. На экране выводятся черные символы размером 5×8 пикселей. Встроенная подсветка включается подачей питания на пины модуля. Текстовый дисплей 16×2 без модуля IIC подключается к микроконтроллеру через 16 контактов. Распиновка экрана с примером подключения размещена ниже.
Для этого занятия потребуется:
- Arduino Uno / Arduino Nano / Arduino Mega;
- LCD монитор 1602 i2c;
- провода «папа-мама».

| LCD 1602 i2c | Arduino Uno | Arduino Nano | Arduino Mega |
| GND | GND | GND | GND |
| VCC | 5V | 5V | 5V |
| SDA | A4 | A4 | 20 |
| SCL | A5 | A5 | 21 |
Жидкокристаллический дисплей имеет 2 ряда по 16 символов, отсюда и его название LCD 1602. В память устройства встроено 192 знака, еще 8 знаков может определить сам пользователь. При подключении дисплея без IIC модуля потребуется использовать 6 портов общего назначения у микроконтроллера Arduino, не считая питания. Соберите схему, как на картинке выше и загрузите следующую программу в плату.
Скетч. Ардуино и LCD 1602 без I2C модуля
// подключаем библиотеку для работы с экраном #include LiquidCrystal.h> // объявляем объект, для управления дисплеем указываем пины LiquidCrystal LCD(13, 12, 11, 10, 9, 8); void setup() < LCD.begin(16, 2); // указываем количество строк и столбцов LCD.setCursor(1, 0); // ставим курсор на 1 символ первой строки LCD.print(«I LOVE»); // печатаем сообщение на первой строке LCD.setCursor(8, 1); // ставим курсор на 1 символ второй строки LCD.print(«ARDUINO»); // печатаем сообщение на второй строке > void loop()
Пояснения к коду:
- для данного примера используется стандартная библиотека LiquidCrystal.h для QAPASS, которая не поддерживает кириллицу;
- чтобы упростить схему и не использовать большое количество пинов микроконтроллера, следует использовать дисплей с модулем I2C.
Принцип работы I2C интерфейса Arduino
I2C — последовательная двухпроводная шина для связи интегральных схем внутри электронных приборов, известна, как I²C или IIC (англ. Inter-Integrated Circuit). I²C была разработана фирмой Philips в начале 1980-х годов, как простая 8-битная шина для внутренней связи между схемами в управляющей электронике (например, в компьютерах на материнских платах, в мобильных телефонах и т.д.).

В простой системе I²C может быть несколько ведомых устройств и одно ведущее устройство, которое инициирует передачу данных и синхронизирует сигнал. К линиям SDA (линия данных) и SCL (линия синхронизации) можно подключить несколько ведомых устройств. Часто ведущим устройством является контроллер Ардуино, а ведомыми устройствами: часы реального времени или LCD Display.
Как подключить LCD 1602 I2C к Arduino
Жидкокристаллический дисплей 1602 с I2C модулем подключается к плате Ардуино всего 4 проводами — 2 провода данных и 2 провода питания. Подключение QAPASS 1602a к Arduino проводится стандартно для шины I2C: вывод SDA подключается к порту A4, вывод SCL – к порту A5. Питание LCD дисплея осуществляется от порта +5V. Смотрите подробнее схему подключения жк монитора 1602 на фото ниже.

После подключения LCD монитора к Ардуино через I2C вам потребуется установить библиотеку LiquidCrystal_I2C.h для работы с LCD дисплеем по интерфейсу I2C и библиотека Wire.h (имеется в стандартной программе Arduino IDE). Скачать рабочую библиотеку LiquidCrystal_I2C.h для LCD 1602 с модулем I2C можно на странице Библиотеки для Ардуино на нашем сайте по прямой ссылке с Google Drive.
Скетч для жк дисплея QAPASS 1602 I2C
#include Wire.h> // библиотека для управления устройствами по I2C #include LiquidCrystal_I2C.h> // подключаем библиотеку для QAPASS 1602 LiquidCrystal_I2C LCD(0x27,16,2); // присваиваем имя LCD для дисплея void setup() < LCD.init(); // инициализация LCD дисплея LCD.backlight(); // включение подсветки дисплея LCD.setCursor(1, 0); // ставим курсор на 1 символ первой строки LCD.print("I LOVE"); // печатаем сообщение на первой строке LCD.setCursor(8, 1); // ставим курсор на 1 символ второй строки LCD.print("ARDUINO"); // печатаем сообщение на второй строке > void loop() < LCD.noDisplay(); // выключаем и включаем надпись на дисплее delay(1000); LCD.display(); delay(1000); >
Пояснения к коду:
- перед выводом информации на дисплей, необходимо задать положение курсора командой setCursor(0,1) , где 0 — номер символа в строке, 1 — номер строки;
- в отличии от clear() — команда noDisplay() не удаляет надпись, а отключает ее вывод на дисплее и ее можно снова показать.
Подключение двух дисплеев по I2C
По умолчанию у всех дисплеев 1602 с модулем I2C адрес — «0x27», но можно изменить адрес текстового экрана и узнать его через сканер iic шины. Таким образом, если у вас есть необходимость подключить к одному микроконтроллеру несколько дисплеев 1602, то следует изменить адреса устройств, что бы не было совпадений. Давайте рассмотрим, каким образом изменить IIC адрес жидкокристаллического дисплея.

Если перевернуть дисплей и посмотреть на IIC модуль (смотри фото выше), то там можно заметить контакты, обозначенные, как «A0», «A1» и «A2». Если по умолчанию LCD имеет адрес «0x27» на шине IIC, то замкнув перемычку «A0», адрес дисплея сменится на «0x26». Таким образом, к одной шине можно подключить несколько дисплеев, не забыв указать их адреса в скетче — смотри следующий пример кода.
Скетч. Подключение нескольких LCD 1602 к шине i2c

Перед загрузкой следующего скетча, сначала соберите схему с двумя дисплеями и просканируйте шину IIC. Это необходимо сделать, чтобы убедится в том, что плата Arduino «видит» оба устройства на шине. А также перепроверить правильность адресов. После этого можно загружать следующий код, который позволит управлять сразу двумя дисплеями с модулями IIC от одного микроконтроллера Arduino Uno.
#include Wire.h> // библиотека для шины I2C #include LiquidCrystal_I2C.h> // библиотека для 16x2 I2C LiquidCrystal_I2C LCD1(0x27, 16, 2); // присваиваем имя первому дисплею LiquidCrystal_I2C LCD2(0x26, 16, 2); // присваиваем имя второму дисплею void setup() < LCD1.init(); // инициализация первого дисплея LCD2.init(); // инициализация второго дисплея LCD1.backlight(); // включение подсветки LCD2.backlight(); // включение подсветки > void loop() < // прокручиваем надпись на первом дисплее LCD1.setCursor(1, 0); LCD1.print("I LOVE ARDUINO"); LCD1.scrollDisplayLeft(); // прокручиваем надпись на втором дисплее LCD2.setCursor(1, 0); LCD2.print("HELLO WORLD"); LCD2.scrollDisplayRight(); delay(300); >
Пояснения к коду:
- в программе у каждого дисплея имя должно быть уникальным.
Библиотека LiquidCrystal_I2C.h для LCD дисплея
В следующем примере разберем сразу несколько возможностей, которая дает библиотека LiquidCrystal_I2C Arduino (на самом деле мы взяли команды из стандартной библиотеки). Продемонстрируем вывод мигающего курсора, как убрать надпись с экрана на некоторое время без удаления и, как управлять подсветкой дисплея из кода программы. Для этого загрузите в Ардуино следующий код программы.
Скетч. Описание библиотеки LiquidCrystal_I2C.h
#include Wire.h> // библиотека для управления устройствами по I2C #include LiquidCrystal_I2C.h> // подключаем библиотеку для QAPASS 16x2 LiquidCrystal_I2C LCD(0x27,16,2); // присваиваем имя LCD для дисплея void setup() < LCD.init(); // инициализация LCD дисплея LCD.backlight(); // включение подсветки дисплея LCD.blink(); // включение мигающего курсора delay(2000); LCD.noBlink(); LCD.setCursor(1, 0); // ставим курсор на 1 символ первой строки LCD.print("I LOVE"); // печатаем сообщение на первой строке LCD.setCursor(8, 1); // ставим курсор на 1 символ второй строки LCD.print("ARDUINO"); // печатаем сообщение на второй строке delay(2000); LCD.cursor(); // включение текущей позиции курсора delay(2000); LCD.noCursor(); > void loop() < LCD.noBacklight(); // выключаем и включаем подсветку экрана delay(1000); LCD.backlight(); delay(1000); >
Пояснения к коду:
- библиотека LiquidCrystal_I2C.h содержит встроенные команды для управления LCD дисплея по шине I²C и позволяет значительно упростить скетч.
- читайте также про возможность авто прокрутки строки на дисплее Ардуино.
Заключение: Используя программы Ардуино для lcd 1602a из этой записи и схему подключения lcd 1602 к Ардуино по i2c вы сможете применять данный дисплей в проектах Ардуино с LCD и в различных примерах. Если у вас остались вопросы по использованию монитора 1602 i2c Arduino — оставляйте их в комментариях на этой странице. Возможно, то что вы ищете уже решено и есть в ответах.
Подключение к Аrduino дисплея LCD 1602 i2c

Рассмотрим, как подключить модуль дисплея LCD 1602 к плате Arduino и рассмотрим основные команды инициализации и управления жидкокристаллическим дисплеем. Разберем основные функции библиотеки LiquidCrystal_I2C.h для вывода текстовой информации на экран, которые вы можете использовать в своих различных проектах, так как этот модуль позволяет визуально отображать данные от датчиков и сенсоров.
Необходимые компоненты:
- Arduino Uno / Arduino Nano / Arduino Mega
- экран lcd 1602 arduino
- экран lcd 1602 с i2c модулем
- коннекторы
- скачать библиотеку LiquidCrystal_I2C.h
Текстовый дисплей используется для отображения информации с датчиков, создания меню или подсказок. На экране lcd 1602 отображаются черные символы размером 5×8 пикселей. Встроенная подсветка включается при подаче питания на контакты модуля. Текстовый дисплей без модуля i2c подключается к микроконтроллеру Ардуино через 8 контактов. Пример подключения lcd с i2c модулем показан на изображении ниже.
LCD 1602 i2c Arduino распиновка, характеристики

Характеристики LCD 1602 i2c (datasheet)
- Напряжение питания: 5 В
- Количество строк: 2
- Количество символов в строке: 16
- Общее количество символов: 32
- Диапазон рабочих температур: 0 — +60º C
По умолчанию жк дисплей с модулем I2C имеет адрес «0x27«. Если необходимо подключить к микроконтроллеру более одного дисплея 1602, необходимо изменить адреса устройств. Если вы перевернете дисплей и посмотрите на модуль IIC, вы увидите контакты, обозначенные «A0», «A1» и «A2». Если по умолчанию модуль имеет адрес «0x27» на шине IIC Arduino, то замыкание перемычки «A0» изменит адрес устройства на «0x26«.
Как подключить LCD 1602 к Ардуино по i2c

| LCD 1602 i2c | Arduino Uno | Arduino Nano | Arduino Mega |
| GND | GND | GND | GND |
| VCC | 5V | 5V | 5V |
| SDA | A4 | A4 | 20 |
| SCL | A5 | A5 | 21 |
ЖК дисплей 1602 i2c подключается к плате Ардуино всего 4 проводами — 2 провода для обмена данными и 2 провода питания. Подключение дисплея QAPASS 1602a к Arduino осуществляется стандартным для шины i2c способом: вывод SDA подключается к порту A4 (SDA), вывод SCL — к порту A5 (SCL). Питание дисплея осуществляется от 5 Вольт. Подробная схема подключения дисплея 1602 приведена на изображении выше.
Скетч для дисплея LCD 1602 i2c Arduino
#include «Wire.h» #include «LiquidCrystal_I2C.h» LiquidCrystal_I2C LCD(0x27,16,2); void setup() < LCD.init(); LCD.backlight(); LCD.setCursor(1, 0); LCD.print("HELLO"); LCD.setCursor(8, 1); LCD.print("WORLD"); >void loop()
Как подключить два экрана LCD 1602 iic к Ардуино

Перед загрузкой следующей программы сначала соберите схему с двумя ЖК дисплеями 1602a и просканируйте шину i2c Arduino Uno. Это гарантирует, что микроконтроллер «увидит» оба устройства на шине. Также проверьте правильность адресов. После этого вы можете загрузить следующую программу, которая позволит вам управлять сразу двумя жк дисплеями с помощью модулей i2c от микроконтроллера Arduino.
Скетч для двух дисплеев LCD 1602 iic Arduino
#include «Wire.h» #include «LiquidCrystal_I2C.h» LiquidCrystal_I2C LCD1(0x27, 16, 2); LiquidCrystal_I2C LCD2(0x26, 16, 2); void setup() < LCD1.init(); LCD2.init(); LCD1.backlight(); LCD2.backlight(); >void loop()
Как подключить display LCD 1602 без модуля iic

Жидкокристаллический дисплей имеет два ряда по 16 символов, отсюда и название LCD 1602. Память устройства содержит 192 символа, при этом 8 дополнительных символов могут быть заданы пользователем. Если вы подключите дисплей без модуля IIC, вам потребуется использовать 6 портов общего назначения на плате, не считая портов питания. Соберите схему, как на картинке выше и загрузите в плату следующую программу.
Скетч display LCD 1602 Arduino без модуля iic
#include «LiquidCrystal.h» LiquidCrystal LCD(13, 12, 11, 10, 9, 8); void setup() < LCD.begin(16, 2); LCD.setCursor(1, 0); LCD.print("HELLO"); LCD.setCursor(8, 1); LCD.print("WORLD"); >void loop()
Заключение. В простой схеме подключения устройств по протоколу I²C может быть несколько ведомых устройств и одно ведущее устройство, которое инициирует передачу данных и синхронизирует сигнал. Используя примеры программ для платы Ардуино и жк экрана лсд 1602, представленные в этой статье, и схему подключения lcd 1602 к Arduino по i2c, вы сможете использовать этот модуль в своих будущих проектах на Arduino.
FAQ (часто задаваемые вопросы)
Какая используется библиотека для дисплея LCD 1602 i2c ?
Для управления LCD 1602 QAPASS от Ардуино используется библиотека LiquidCrystal_I2C.h, ссылка на скачивание архива размещена в начале статьи.
Что означает fatal error LiquidCrystal_I2C.h No such file or directory ?
Если при компиляции скетча появляется ошибка «LiquidCrystal_I2C.h No such file or directory», то это значит, что отсутствует библиотека LiquidCrystal_I2C.h. Следует скачать и установить библиотеку для дисплея LCD 1602, которая используется в программе.
Почему не работает дисплей LCD 1602 i2c Arduino ?
Во-первых, проверьте подключение lcd tft экрана к микроконтроллеру. Проверьте питание дисплея — 5V и GND, проверьте не перепутаны ли пины SDA и SCL. Во-вторых, на обратной стороне дисплея расположен переменный резистор для регулировки яркости — попробуйте покрутить его для настройки экрана LCD 1602 i2c QAPASS.
Дисплей для Ардуино: подключение экрана LCD1602 по I2C

Для подключения LCD экрана нам понадобятся такие компоненты
- Любой Arduino (в нашем случае Arduino UNO)
- ЖК-дисплей на базе HD44780
- Разделочная доска
- Соединительные кабели
- Потенциометр (опция)

Другие полезные функции библиотеки LiquidCrystal
Есть несколько полезных функций, которые вы можете использовать с объектом LiquidCrystal. Некоторые из них перечислены ниже:
- Если вы просто хотите поместить курсор в левый верхний угол дисплея, не очищая его, используйте home().
- Есть много приложений, таких как turbo C ++ или notepad ++, в которых нажатие клавиши «ввод» на клавиатуре меняет курсор. Точно так же вы можете изменить курсор на ЖК-дисплее с помощью blink () или lcd.Cursor().
- Функция blink () отображает мигающий блок размером 5 × 8 пикселей и lcd.Cursor () подчеркивание (линию) в том месте, где будет написан следующий символ.
- вы можете использовать функцию noblink (), чтобы отключить мигающий курсор на дисплее, и lcd.noCursor (), чтобы скрыть курсор.
- вы можете прокручивать отображаемое содержимое на один пробел вправо с помощью lcd.scrollDisplayRight () или на один пробел влево с помощью lcd.scrollDisplayLeft (). Если вы хотите непрерывно прокручивать текст, вы должны использовать эти функции внутри цикла for.
Шаг 4: Библиотека LiquidCrystal.h
Библиотеку LiquidCrystal.h можно скачать в разделе «Библиотеки» нашего сайта на этой странице или с официального ресурса arduino.cc. Но вы также можете скачать ссылки ниже:
Эксперимент 2
В этом эксперименте мы покажем значение счетчика из программы Arduino на ЖК-дисплее. Счетчик обратится в обратном направлении до 100 секунд, после чего дисплей очистится.
Необходимые комплектующие
В этом эксперименте используются те же компоненты, что и в первом эксперименте.
Схема соединений

Подключение LCD экрана
Подключить ЖК-экран к Arduino несложно даже для ребенка. Прикрепите экран к макету и подключите + 5 В и землю от Arduino к шинам питания макета, как показано на фотографии. (Поскольку мы будем многократно использовать питание и «землю», то удобнее подключаться к дорожкам, и в целом нужно привыкнуть к такому подключению)

Для полноценной работы Ардуино с дисплеем подключите 12 контактов:
- 1 — Vss, земля ⇨ GND
- 2 — Vdd, питание +5 В
- 3 — Vo, регулировка контрастности выходного напряжения потенциометра
- 4 — RS, выбор регистра 12 пина Arduino
- 5 — чтение / запись, чтение / запись ⇨ масса (режим записи)
- 6 — E, псевдоним Enable, гейт при спаде ⇨ вывод 11 Arduino
- 7-10 — DB0-DB3, младшие биты 8-битного интерфейса; Нет соединения
- 11-14 — DB4-DB7, бит интерфейса высокого порядка (пин 5-2 Arduino
- 15 — А, блок питания для подсветки ⇨ +5 В
- 16 — K, масса для подсветки ⇨ GND
Этот дисплей, как и другие на контроллере HD44780, поддерживает два параллельных варианта:
- 8 бит, вывод DB0-DB7, 1 байт (8 бит) передается за такт
- 4-битный, вывод DB4-DB7, полубайт (4 бита) передается за один такт
Нет смысла использовать 8-битную версию, потому что для нее требуется больше ножек, но прироста скорости все равно нет: частота обновления дисплея не превышает 10 раз в секунду, поэтому мы пока не сможем увидеть обновленные данные довольно часто. Поэтому выводы DB0-DB3 оставляем неподключенными.
Дисплей подключен и готов к приему данных. Осталось написать программу для Ардуино.
Описание протокола I2C
Прежде чем говорить о подключении дисплея к Arduino через адаптер i2c, давайте кратко поговорим о самом протоколе i2C.
I2C / IIC (Inter-Integrated Circuit) — это протокол, изначально созданный для обмена данными между интегральными схемами в электронном устройстве. Разработка принадлежит Philips. Протокол i2c основан на использовании 8-битной шины, необходимой для связи блоков в управляющей электронике, и системы адресации, благодаря которой можно обмениваться данными по одним и тем же проводам с несколькими устройствами. Мы просто передаем данные на то или иное устройство, добавляя в пакеты данных необходимый идентификатор элемента.
Простейшая схема I2C может содержать ведущее устройство (чаще всего микроконтроллер Arduino) и несколько ведомых устройств (например, ЖК-дисплей). Каждое устройство имеет адрес в диапазоне от 7 до 127. Не должно быть двух устройств с одинаковым адресом в одной цепи.
Плата Arduino поддерживает i2c аппаратно. Вы можете использовать контакты A4 и A5 для подключения устройств, использующих этот протокол.
В работе I2C есть несколько преимуществ:
- Для работы необходимы только 2 линии: SDA (линия данных) и SCL (линия синхронизации).
- Подключение большого количества ведущих устройств.
- Сокращенное время разработки.
- для управления всем набором устройств нужен всего один микроконтроллер.
- Возможное количество подключаемых к шине микросхем ограничено только максимальной емкостью.
- Высокая степень защиты данных благодаря встроенному в схемы специальному фильтру для подавления скачков напряжения.
- Простая процедура диагностики возникающих неисправностей, быстрое устранение неисправностей.
- Шина уже интегрирована в саму Arduino, поэтому нет необходимости разрабатывать дополнительный интерфейс шины.
- Емкостное ограничение линии составляет 400 пФ.
- Сложное программирование контроллера I2C, если на шине несколько разных устройств.
- При большом количестве устройств становится трудно обнаружить ошибку, если одно из них по ошибке устанавливает низкоуровневое состояние.
Домашнее задание
- Освойте библиотеку LiquidCrystal_I2C, попробуйте все функции из документации
- Создайте несколько символов и испустите их
- Оптимизируйте последний пример: не очищайте отображение и не показывайте метку при нажатии, просто измените значение
Шаг 3. Подключаем ЖК-дисплей
Перед тем, как подключить дисплей и передавать на него информацию, стоит проверить его работоспособность. Сначала подайте напряжение на контроллер VSS и VDD, включите подсветку (A, K), затем отрегулируйте контрастность.
Для таких настроек подойдет потенциометр на 10 кОм, его форма не важна. На внешние ножки подается питание + 5V и GND, а ножка в центре подключена к выводу VO.
При подаче питания на схему необходимо добиться требуемой контрастности, при неправильной настройке изображение на экране также не будет видно. Чтобы настроить контраст, вам придется поиграть с потенциометром. Когда узор собран правильно и контраст настроен правильно, верхний ряд экрана должен быть заполнен прямоугольниками.
Для работы дисплея используется специальная библиотека LiquidCrystal.h, встроенная в Arduino IDE, о которой я расскажу ниже. Может работать в 8- и 4-битном режиме. В первой версии используются только младшие и самые старшие биты (BB0-DB7), во второй только младшие биты (BB4-DB7).
Но использование 8-битного режима на этом дисплее — плохое решение, почти нет преимущества в скорости, так как его частота обновления всегда меньше 10 раз в секунду. Для просмотра текста необходимо подключить выводы DB7, DB6, DB5, DB4, E и RS к выводам контроллера. Разрешено подключать их к любому выводу Ардуино, главное выставить правильную последовательность в коде.
Если необходимого символа еще нет в памяти контроллера, его можно определить вручную (всего до семи символов). Ячейка на рассматриваемых дисплеях имеет расширение пять на восемь точек. Задача создания символа — написать битовую маску и разместить одну там, где точки должны светиться, а нули там, где нет. Схема подключения, описанная выше, не всегда хороша, поскольку на Arduino задействовано как минимум шесть цифровых выходов.
Библиотека для работы с модулем LCD 1602
Для подключения Arduino к LCD 1602 по протоколу I2C вам понадобятся две библиотеки:
- Библиотеки Wire.h — стандартная библиотека для работы с устройствами Arduino по протоколу I2C, уже есть в Arduino IDE;
- Библиотека LiquidCrystal.h также доступна в Arduino IDE и используется при подключении Arduino напрямую к LCD 1602 (без модуля I2C) ;
- Библиотека LiquidCrystal_I2C.h, которая предоставляет все необходимые функции для работы с LCD 1602. Вы можете скачать ее в конце статьи.
Схема подключения LCD модуля 1602 к Arduino при помощи модуля I2C

В этой схеме используется модуль I2C, который позволяет значительно сократить количество проводов. Для подключения нужно всего 4 провода, которые подключаются к модулю.
Скетч для вывода текста на LCD экран по шине I2C
Давайте откроем пример: LiquidCrystal_I2C CustomChars Samples File и немного его перепишем. Показываем сообщение, в конце которого появится мигающий символ. Все нюансы скетча прокомментированы в комментариях к коду.
Кстати, символы, написанные командой lcd.createChar (); остаются в памяти дисплея, даже после выключения они записываются в ПЗУ дисплея 1602.
Подключение ЖК экрана к Ардуино по I2C
Для подключения понадобится такая же плата Arduino, дисплей, макет, соединительные кабели и потенциометр.
Если вы используете отдельный специальный адаптер i2c, вы должны сначала припаять его к модулю дисплея. Ошибиться там сложно, можно руководствоваться такой схемой.

ЖК-монитор, совместимый с i2c, подключается к плате четырьмя проводами: два для данных, два для питания.
- Контакт GND подключается к GND на плате.
- Вывод VCC составляет 5 В.
- SCL подключен к выводу A5.
- SDA подключается к выводу A.

Вот и все! Никакой паутины ниток, за которую очень легко попасться. При этом мы можем просто доверить библиотекам всю сложность реализации протокола i2C.
Важная информация по дисплеям
Эта информация применима ко всем дисплеям.
- Просмотр данных на дисплее требует времени, поэтому вам нужно просмотреть их по таймеру или после изменения данных.
- Не всегда целесообразно полностью удалять отображение, иногда достаточно вывести новые значения над старыми или частично удалить их с «пробелами”.
Уроки с таймером:
- Функции времени
- Как написать набросок
- Видеоурок
Давайте посмотрим на два примера.
Отображаем значение с потенциометра
Генерация пользовательских символов для LCD
-
Если вы находите шрифты на дисплее неподходящими и неинтересными, вы можете создать свои собственные шрифты (глифы) для своего ЖК-дисплея. Пользовательские символы чрезвычайно полезны, когда вы хотите отобразить символ, который не является частью стандартного набора символов ASCII.Как обсуждалось ранее в этом руководстве, символ на дисплее отображается в матрице 5×8 пикселей, поэтому вам необходимо определить свой собственный шрифт в этой матрице. Чтобы определить символ, вам нужно использовать функцию createChar () библиотеки LiquidCrystal. Чтобы использовать createChar (), вы должны сначала назначить 8-байтовый массив. Каждый байт (они насчитывают только 5 бит) в массиве определяет строку символов в массиве 5×8. А нули и единицы в байте указывают, какие пиксели в строке должны быть активными, а какие — выключенными.
Пример вывода
Распиновка 16х02 символов
- GND — должен быть подключен к земле Arduino.
- VCC — это вывод питания ЖК-дисплея, к которому мы подключаем вывод 5V Arduino.
- Vo (контрастность ЖК-дисплея) — выходной сигнал регулирует контрастность и яркость ЖК-дисплея. Используя простой делитель напряжения с потенциометром, мы можем точно настроить контраст.
- RS (выбор регистра) — этот вывод позволяет Arduino сообщать ЖК-дисплею, отправляются ли команды или данные. Этот вывод в основном используется для отличия команд от данных. Например, когда вывод RS установлен на LOW, мы отправляем команды на ЖК-дисплей (например, помещаем курсор в определенное положение, очищаем дисплей, перемещаем дисплей вправо и т.д.). Когда вывод RS установлен на HIGH, мы отправляем данные / символы на ЖК-дисплей.
- R / W (чтение / запись) — вывод предназначен для управления тем, что необходимо сделать — прочитать данные или передать их на ЖК-дисплей. Поскольку мы используем этот ЖК-дисплей только в качестве устройства вывода, достаточно применить ВЫСОКИЙ уровень к этому выводу, после чего мы войдем в режим записи.
- EN (Enable) — выход используется для включения дисплея. Это означает, что когда этот вывод установлен в LOW, ЖК-дисплей не будет реагировать на то, что происходит с линиями R / W, RS и шины данных. Когда этот вывод ВЫСОКИЙ, ЖК-дисплей обрабатывает входящие данные.
- D0-D7 (шина данных) — это контакты, передающие 8-битные данные на дисплей. Например, если мы хотим отобразить символ «A» в верхнем регистре, мы отправляем 0100 0001 на ЖК-дисплей (согласно таблице ASCII) .
- АК (анод и катод) используются для управления подсветкой ЖК-дисплея.
Свои символы
Библиотека поддерживает создание дополнительных «кастомных» символов 5х7 точек, вы можете воспользоваться онлайн-генератором кода символа — ссылка. Для компактности рекомендую перейти на HEX. Вот как будет выглядеть «символ» креста: byte myX = ;
Дисплей имеет 8 ячеек для сторонних символов, они добавляются с помощью createChar (число, массив), где число от 0 до 7, а массив — это имя массива данных, который мы создали для символа. Символы печатаются с использованием сценария (числа).
Важный момент: после вызова createChar позиция вывода текста сбрасывается, нужно вызвать setCursor!
Создание собственных символов для ЖК дисплея
Рассмотрим подробнее проблему создания собственных символов для ЖК-экранов. Каждый символ на экране состоит из 35 точек: 5 в ширину и 7 в высоту (+1 зарезервированное подчеркивание). В строке 6 скетча выше мы устанавливаем массив из 7 чисел: . Преобразуйте шестнадцатеричные числа в двоичные: . Эти числа представляют собой не что иное, как битовые маски для каждой из 7 строк символа, где «0» означает светлое пятно, а «1» — темное. Например, символ сердца, заданный как битовая маска, появится на экране, как показано.

Создание собственного символа ЖК-экрана
Схема подключения ЖК дисплея к Arduinoпо протоколу I2C
Модуль подключается к Arduino стандартно для шины I2C: вывод SDA модуля подключается к аналоговому порту A4, вывод SCL подключается к аналоговому порту A5 Arduino. Модуль питается от + 5В от Arduino. Сам модуль соединяется контактами 1… 16 с соответствующими контактами 1… 16 на ЖК-дисплее.

Схема подключения ЖК-дисплея к Arduino по протоколу I2C
Прозрачная макетная плата на 830 точек (breadboard)

Программирование
Для просмотра текста из Arduino воспользуемся библиотекой Liquid Crystal, о которой мы говорили выше.Чтобы датчик работал на Arduino, необходимо загрузить и установить библиотеку DHT11 . Вы можете скачать библиотеку здесь . После скачивания необходимой библиотеки нам необходимо правильно ее установить, скачанные файлы нужно переместить по следующему пути : После того, как все будет сделано, перейдем к самому важному этапу — программированию. 
Это то, что у вас должно получиться, это самый простой набросок, он содержит всего 4 основные линии, но вы можете понять его и по этому принципу создать то, что вам нужно!
Практика
- Контакты 1 и 2 для питания одного и того же ЖК-дисплея 1602
- Контакты 15 и 16 для подсветки ЖК-дисплея 1602
Подключите контакты 1 и 16 ЖК-дисплея к минусу источника питания, а контакты 2 и 15 — к + 5В.
Далее нужно подключить контакт 3, отвечающий за контрастность и яркость дисплея. Для точной настройки контрастности подключите крайние клеммы потенциометра с сопротивлением 10 кОм при 5 В и GND, а центральный контакт (ползунок) потенциометра к контакту 3 ЖК-дисплея.
Регулировка контрастности ЖК-дисплея с помощью потенциометра
Теперь включите Arduino, и вы увидите подсветку. Когда вы поворачиваете ручку потенциометра, вы должны заметить первую линию прямоугольников. Если это произойдет, поздравляем! Ваш ЖК-дисплей работает правильно.
Шаг 4. Схема обхода
Давайте рассмотрим вариант, как обойти это, и обойдемся всего двумя. Нам нужен дополнительный модуль преобразователя ЖК-дисплея в IIC / I2C. Как он припаян к дисплею и подключен к Arduino, можно увидеть на изображениях ниже.
Но этот вариант подключения работает только со специальной библиотекой LiquidCrystal_I2C1602V1, которую, однако, несложно найти в сети и установить, после чего можно без проблем пользоваться.
Объяснение кода:
Управление ЖК экраном по шине I2C

Загрузите скетч в Arduino. На экране появится указанный нами текст с мигающим курсором в конце.
Управление ЖК-экраном с помощью Arduino по шине I2C
Как подключить LCD дисплей с I2C модулем к Arduino

В статье будем подключать к Ардуино жидкокристаллический дисплей 1602 с I2C модулем FC-113, благодаря чему подключение будет осуществляться всего по 2 проводам данных + 2 проводам питания.
Инструкция по подключению ЖК дисплея к Arduino по интерфейсу I 2 C
Нам понадобится:
- Arduino UNO или иная совместимая плата;
- ЖК экран 1602 (16 символов, 2 строки);
- I2C адаптер FC-113 или аналогичный;
- соединительные провода (рекомендую вот такой набор);
- макетная плата (breadboard);
- персональный компьютер со средой разработки Arduino IDE.
1 Описание FC-113 преобразователя последовательного интерфейса в параллельный

- Модуль FC-113 сделан на базе микросхемы PCF8574T, которая представляет собой 8-битный сдвиговый регистр – «расширитель» входов-выходов для последовательной шины I2C. На рисунке микросхема обозначена DD1.
- R1 – подстроечный резистор для регулировки контрастности ЖК дисплея.
- Джампер J1 используется для включения подсветки дисплея.
- Выводы 1…16 служат для подключения модуля к выводам LCD дисплея.
- Контактные площадки А1…А3 нужны для изменения адреса I2C устройства. Запаивая соответствующие перемычки, можно менять адрес устройства. В таблице приведено соответствие адресов и перемычек: «0» соответствует разрыву цепи, «1» – установленной перемычке. По умолчанию все 3 перемычки разомкнуты и адрес устройства 0x27.
2 Схема подключения ЖК дисплея к Arduinoпо протоколу I2C
Подключение модуля к Arduino осуществляется стандартно для шины I2C: вывод SDA модуля подключается к аналоговому порту A4, вывод SCL – к аналоговому порту A5 Ардуино. Питание модуля осуществляется напряжением +5 В от Arduino. Сам модуль соединяется выводами 1…16 с соответствующими выводами 1…16 на ЖК дисплее.

3 Библиотека для работы по протоколу I2C

Теперь нужна библиотека для работы с LCD по интерфейсу I2C. Можно воспользоваться, например, вот этой (ссылка в строке «Download Sample code and library»).
Скачанный архив LiquidCrystal_I2Cv1-1.rar разархивируем в папку \libraries\, которая находится в директории Arduino IDE.
Библиотека поддерживает набор стандартных функций для LCD экранов:
| Функция | Назначение |
|---|---|
| LiquidCrystal() | создаёт переменную типа LiquidCrystal и принимает параметры подключения дисплея (номера выводов); |
| begin() | инициализация LCD дисплея, задание параметров (кол-во строк и символов); |
| clear() | очистка экрана и возврат курсора в начальную позицию; |
| home() | возврат курсора в начальную позицию; |
| setCursor() | установка курсора на заданную позицию; |
| write() | выводит символ на ЖК экран; |
| print() | выводит текст на ЖК экран; |
| cursor() | показывает курсор, т.е. подчёркивание под местом следующего символа; |
| noCursor() | прячет курсор; |
| blink() | мигание курсора; |
| noBlink() | отмена мигания; |
| noDisplay() | выключение дисплея с сохранением всей отображаемой информации; |
| display() | включение дисплея с сохранением всей отображаемой информации; |
| scrollDisplayLeft() | прокрутка содержимого дисплея на 1 позицию влево; |
| scrollDisplayRight() | прокрутка содержимого дисплея на 1 позицию вправо; |
| autoscroll() | включение автопрокрутки; |
| noAutoscroll() | выключение автопрокрутки; |
| leftToRight() | задаёт направление текста слева направо; |
| rightToLeft() | направление текста справа налево; |
| createChar() | создаёт пользовательский символ для LCD-экрана. |
4 Скетч для вывода текста на LCD экран по шине I2C
Откроем образец: Файл Образцы LiquidCrystal_I2C CustomChars и немного его переделаем. Выведем сообщение, в конце которого будет находиться мигающий символ. В комментариях к коду прокомментированы все нюансы скетча.
#include // подключаем библиотеку Wire #include // подключаем библиотеку ЖКИ #define printByte(args) write(args); // uint8_t heart[8] = ; // битовая маска символа «сердце» LiquidCrystal_I2C lcd(0x27, 16, 2); // Задаём адрес 0x27 для LCD дисплея 16x2 void setup() lcd.init(); // инициализация ЖК дисплея lcd.backlight(); // включение подсветки дисплея lcd.createChar(3, heart); // создаём символ «сердце» в 3 ячейке памяти lcd.home(); // ставим курсор в левый верхний угол, в позицию (0,0) lcd.print("Hello SolTau.ru!"); // печатаем строку текста lcd.setCursor(0, 1); // перевод курсора на строку 2, символ 1 lcd.print(" i "); // печатаем сообщение на строке 2 lcd.printByte(3); // печатаем символ «сердце», находящийся в 3-ей ячейке lcd.print(" Arduino "); > void loop() // мигание последнего символа lcd.setCursor(13, 1); // перевод курсора на строку 2, символ 1 lcd.print("\t"); delay(500); lcd.setCursor(13, 1); // перевод курсора на строку 2, символ 1 lcd.print(" "); delay(500); >
Кстати, символы, записанные командой lcd.createChar();, остаются в памяти дисплея даже после выключения питания, т.к. записываются в ПЗУ дисплея 1602.
5 Создание собственных символов для ЖК дисплея
Немного подробнее рассмотрим вопрос создания собственных символов для ЖК экранов. Каждый символ на экране состоит из 35-ти точек: 5 в ширину и 7 в высоту (+1 резервная строка для подчёркивания). В строке 6 приведённого скетча мы задаём массив из 7-ми чисел: . Преобразуем 16-ричные числа в бинарные: . Эти числа – не что иное, как битовые маски для каждой из 7-ми строк символа, где «0» обозначают светлую точку, а «1» – тёмную. Например, символ сердца, заданный в виде битовой маски, будет выглядеть на экране так, как показано на рисунке.

6 Управление ЖК экраном по шине I2C
Загрузим скетч в Arduino. На экране появится заданная нами надпись с мигающим курсором в конце.

7 Что находится «за» шиной I2C
В качестве бонуса рассмотрим временную диаграмму вывода латинских символов «A», «B» и «С» на ЖК дисплей. Эти символы имеются в ПЗУ дисплея и выводятся на экран просто передачей дисплею их адреса. Диаграмма снята с выводов RS, RW, E, D4, D5, D6 и D7 дисплея, т.е. уже после преобразователя FC-113 «I2C параллельная шина». Можно сказать, что мы погружаемся немного «глубже» в «железо».

На диаграмме видно, что символы, которые имеются в ПЗУ дисплея (см. стр.11 даташита, ссылка ниже), передаются двумя полубайтами, первый из которых определяет номер столбца таблицы, а второй – номер строки. При этом данные «защёлкиваются» по фронту сигнала на линии E (Enable), а линия RS (Register select, выбор регистра) находится в состоянии логической единицы, что означает передачу данных. Низкое состояние линии RS означает передачу инструкций, что мы и видим перед передачей каждого символа. В данном случае передаётся код инструкции возврата каретки на позицию (0, 0) ЖК дисплея, о чём также можно узнать, изучив техническое описание дисплея.
И ещё один пример. На этой временной диаграмме показан вывод символа «Сердце» на ЖК дисплей.

Опять, первые два импульса Enable соответствуют инструкции Home() (0000 00102) – возврат каретки на позицию (0; 0), а вторые два – вывод на ЖК дисплей хранящийся в ячейке памяти 310 (0000 00112) символ «Сердце» (инструкция lcd.createChar(3, heart); скетча).
Скачать LCD 1602 datasheet
- Скачать техническое описание на LCD дисплей 1602.
Скачать вложения:
- Скачать техническое описание на LCD дисплей 1602 (696 Скачиваний)
