Рассмотрим методы и функции, которые предоставляет нам библиотека 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()
. Он из себя представляет символ нижнего подчеркивания _
, который отображается на позиции, на которой будет отображен следующий символ.
lcd.cursor();
Отключение показа курсора
Отключить показ курсора, который был включен методом cursor()
, можно методом noCursor()
.
lcd.noCursor();
Мигание курсора
Включение мигания курсора
Метод blink()
включает мигание курсора в положении следующего символа.
lcd.blink();
Отключение мигания курсора
Отменить мигания курсора, вызванное методом 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.leftToRight();
Установка направления справа налево
Задает направление текста справа налево. При выводе данных сдвигает курсор влево, после символа.
lcd.rightToLeft();
Автоматическая прокрутка
Включение автоматической прокрутки
Включение автопрокрутки.
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.