Рассмотрим методы и функции, которые предоставляет нам библиотека LiquidCrystal_I2C (версия 1.1.2). Библиотека служит для управления ЖК-дисплеем через интерфейс I2C.
Подключение дисплея к адаптеру I2C
На картинке можете видеть, как подключен модуль адаптера PCF8574 к дисплею 1602А, а также можете ознакомится вот с этой статьей.
Подключение библиотеки LiquidCrystal_I2C
Для работы необходимо подключить библиотеку <LiquidCrystal_I2C.h> и дополнительно библиотеку <Wire.h> для работы с I2C. Для подключения библиотек используйте следующий код:
#include <Wire.h> #include <LiquidCrystal_I2C.h>
Скачать библиотеку LiquidCrystal_I2C v.1.1.2
Создание объекта
Создание объекта с именем lcd для работы с дисплеем. В данном случае, указывается, что работать придется с дисплеем, имеющий 2 строки по 16 символов (16 столбцов) в каждой и с адресом I2C – 0x27:
LiquidCrystal_I2C lcd(0x27,16,2);
Инициализация
Метод init() вызывается в функции setup(){} для обязательной инициализации дисплея, иначе данные отображаться не будут:
void setup()
{
lcd.init();
// Какой-нибудь код
}
Позиционирование
Установка позиции курсора
Установка курсора на заданную позицию, с которой начнется следующий вывод данных, задается с помощью метода setCursor(uint8_t col, uint8_t row). В качестве параметров передается номер столбца – col и номер строки row.
Нумерацию строк и столбцов можно увидеть на картинке.
/* Вывод начнется с начала второй строки, так как значение параметра столбаца col равно 0, значение параметра строки row равно 1 */ lcd.setCursor(0, 1);
Установка начального положения курсора
Чтобы вернуться в начальное положение [0,0] (самый первый символ верхней строки), можно использовать метод home(). Аналогично вызову метода lcd.setCursor(0,0);.
lcd.home(); /* То же самое, что и */ lcd.setCursor(0,0);
Вывод данных на дисплей
Вывод текста
Метод print() выводит текст на экран дисплея.
lcd.print("Hello, RxTx");
Вывод символа
Чтобы вывести один символ на ЖК дисплей, воспользуйтесь методом write(uint8_t value):
/*
В качестве параметра передается десятичное число 44
*/
lcd.write(44); // Выведет символ запятой ,
/*
Можно передать и в шестнадцатеричном виде
*/
lcd.write(0x40); // Выведет символ @
/*
Или передать символ в одинарных кавычках
*/
lcd.write('R'); // Выведет символ R
Скетч для отображения всех символов дисплея
Чтобы посмотреть все символы, которые может отображать дисплей, загрузите этот скетч. Он будет перебирать символы от 0 до 255 и выводить их на экран с задержкой 0.5 секунд. Сверху DEC – это значение символа в десятичном представлении, HEX – в шестнадцатеричном:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); // Создание объекта с адресом 0х27, 16 символов и 2 строки
void setup()
{
/* Инициализация дисплея */
lcd.init();
/* Включение подсветки */
lcd.backlight();
}
void loop()
{
lcd.clear();
for(int i = 0; i < 256; i++) {
lcd.home();
lcd.print("DEC:");
lcd.print(i);
lcd.print(" HEX:0x");
lcd.print(i, HEX);
lcd.setCursor(0,1);
lcd.write(i);
delay(500);
}
}
На картинке ниже таблица кодирования символов ASCII. По ней можно узнать, какое значение присвоено каждому символу.

Скетч для отображение символов, вводимых через монитор порта
В библиотеке есть пример под названием SerialDisplay, который принимает символы, отправленные в монитор порта, и выводит их на дисплей. Его можно найти: Файл -> Примеры -> LiquidCrystal_I2C -> SerialDisplay.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4);
void setup()
{
lcd.init();
lcd.backlight();
Serial.begin(9600);
}
void loop()
{
if (Serial.available()) {
delay(100);
lcd.clear();
while (Serial.available() > 0) {
lcd.write(Serial.read());
}
}
}
Очистка дисплея
Метод clear() очищает дисплей и возвращает курсор в начальную позицию [0,0]:
lcd.clear();
Включение / отключение отображения на дисплее
Отключение
C помощью метода noDisplay() можно спрятать данные, которые сейчас отображаются на дисплее. Данные при этом сохраняются и могут снова быть отображены с помощью метода display().
lcd.noDisplay();
Включение
Включение отображения информации на дисплее, если они были спрятаны методом noDisplay().
lcd.display();
Отображение курсора
Отключение показа курсора
Отключить показ курсора, который был включен методом cursor(), можно методом noCursor().
lcd.noCursor();
Мигание курсора
Отключение мигания курсора
Отменить мигания курсора, вызванное методом blink(), можно с помощью метода noBlink().
lcd.noBlink();
Сдвиг содержимого
Сдвиг содержимого влево
Метод scrollDisplayLeft() сдвигает отображаемые данные на один столбец влево.
lcd.scrollDisplayLeft();
Сдвиг содержимого вправо
А вот метод scrollDisplayLeft() сдвигает отображаемые данные на один столбец вправо.
lcd.scrollDisplayRight();
Можно сделать эффект на подобие “бегущей строки”:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); // Создание объекта с адресом 0х27, 16 символов и 2 строки
void setup()
{
/* Инициализация последовательного порта */
Serial.begin(9600);
/* Инициализация дисплея */
lcd.init();
/* Включение подсветки */
lcd.backlight();
}
void loop()
{
/* Очищаем дисплей*/
lcd.clear();
/* Вывод на дисплей */
lcd.print("Hello, RxTx");
lcd.setCursor(0,1);
lcd.print("LCD 1602");
/* Ждем секунду */
delay(1000);
/* Смещаем текст 16 раз, пока он не исчезнет за областью экрана */
for(int i = 0; i < 16; i++) {
lcd.scrollDisplayRight();
delay(500);
}
}
Направление вывода символов
Автоматическая прокрутка
Включение автоматической прокрутки
Включение автопрокрутки.
lcd.autoscroll();
Отключение автоматической прокрутки
Выключение автопрокрутки.
lcd.noAutoscroll();
Подсветка
Включение подсветки
Активация подсветки дисплей. На плате адаптера I2C должна быть установлена перемычка, а контакты 15 и 16 модуля должны быть подключены к контактам А и К дисплея соответственно.
lcd.backlight();
Отключение подсветки
Деактивация подсветки:
lcd.noBacklight();
Создание пользовательского символа
Метод createChar(uint8_t location, uint8_t charmap[]) помогает создать пользовательский символ для дисплея. Можно определить до 8 своих символов от 0 до 7. Параметр location принимает число от 0 до 7, параметр charmap – массив, карту символа.
Для создания своего символа проще воспользоваться генератором. Выбираете пиксели символа и получаете готовый код.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
byte customChar[] = {
0x04,
0x0E,
0x0E,
0x0E,
0x0E,
0x1F,
0x00,
0x04
};
void setup() {
lcd.init();
lcd.backlight();
lcd.createChar(0, customChar);
lcd.home();
lcd.write(0);
}
void loop() { }















you are in reality a good webmaster. The website loading velocity is amazing. It sort of feels that you’re doing any distinctive trick. Also, The contents are masterwork. you have done a fantastic job in this topic!
Thank you for such a flattering review. We try to work at the highest level, for a good mood of users.