Библиотека LiquidCrystal_I2C для Arduino

LiquidCrystal_I2C LCD1602

Содержание

Рассмотрим методы и функции, которые предоставляет нам библиотека LiquidCrystal_I2C (версия 1.1.2). Библиотека служит для управления ЖК-дисплеем через интерфейс I2C.

Подключение дисплея к адаптеру I2C

На картинке можете видеть, как подключен модуль адаптера PCF8574 к дисплею 1602А, а также можете ознакомится вот с этой статьей.

Подключение модуля I2C к дисплею 1602A

Подключение библиотеки 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.

Нумерацию строк и столбцов можно увидеть на картинке.

Позиционирование курсора на LCD 1602
/* 
   Вывод начнется с начала второй строки,
   так как значение параметра столбаца 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. По ней можно узнать, какое значение присвоено каждому символу.

Таблица кодов 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();
Вызов методов display и noDisplay библиотеки LiquidCrystal_I2C

Отображение курсора

Включение показа курсора

Включить показ курсора можно методом 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 1602

Направление вывода символов

Установка направления слева направо

Задает направление текста слева направо. При выводе данных сдвигает курсор вправо, после символа.

lcd.leftToRight(); 
leftToRight liquidcrystal

Установка направления справа налево

Задает направление текста справа налево. При выводе данных сдвигает курсор влево, после символа.

lcd.rightToLeft();
rightToLeft LiquidCrystal

Автоматическая прокрутка

Включение автоматической прокрутки

Включение автопрокрутки.

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 — массив, карту символа.

Для создания своего символа проще воспользоваться генератором. Выбираете пиксели символа и получаете готовый код.

Генератор пользовательских символов для ЖК дисплея
Custom character LCD
#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() { }

Загрузки

Где купить

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
2 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Jemma Kimber Mina Russell
2 месяцев назад

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!

ginseng
Администратор
Ответить на  Jemma Kimber Mina Russell
2 месяцев назад

Thank you for such a flattering review. We try to work at the highest level, for a good mood of users.