Главная chevron_right Уроки chevron_right Электроника chevron_right Жидкокристаллические дисплеи (LCD) с Arduino

Жидкокристаллические дисплеи (LCD) с Arduino

Как подключить LCD-дисплей к Arduino и работать с библиотекой LiquidCrystal — схемы, примеры кода и типичные ошибки.

Материал обновлён 18.11.2021 автором Karl Söderby.

Библиотека LiquidCrystal library позволяет управлять LCD-дисплеями, совместимыми с контроллером Hitachi HD44780. Такие дисплеи встречаются повсюду — их легко узнать по 16-контактному разъёму.

Output of the sketch on a 16x2 LCD

Как устроен интерфейс LCD

LCDs используют параллельный интерфейс: микроконтроллер одновременно управляет несколькими линиями, чтобы передать команду или данные. Вот что входит в этот интерфейс:

  • Вывод выбора регистра (RS) — определяет, куда идут данные: в регистр данных (то, что отображается на экране) или в регистр команд (инструкции для контроллера дисплея).
  • Вывод чтения/записи (R/W) — переключает режим: чтение или запись.
  • Вывод Enable (E) — разрешает запись в регистры.
  • 8 линий данных (D0–D7) — по ним передаются биты при записи или считываются при чтении.

Помимо этого, дисплей имеет:

  • Вывод контрастности (Vo) — регулирует чёткость изображения.
  • Питание (+5V и GND) — напряжение для работы дисплея.
  • Подсветка (Bklt+ и BKlt-) — управление светодиодной подсветкой.

Процесс управления дисплеем сводится к тому, что данные для изображения записываются в регистр данных, а команды — в регистр инструкций. Библиотека LiquidCrystal Library берёт всю низкоуровневую работу на себя, так что вам не нужно разбираться в протоколе вручную.

Дисплеи на базе Hitachi LCDs поддерживают два режима работы: 4-битный и 8-битный. В 4-битном режиме достаточно 7 выводов Arduino, в 8-битном — 11. Для вывода текста 4-битного режима вполне хватает, поэтому все примеры ниже работают именно в нём и рассчитаны на дисплей 16×2.

Необходимые компоненты

  • Плата Arduino
  • LCD-дисплей (совместимый с драйвером Hitachi HD44780)
  • Штыревые разъёмы для пайки к дисплею
  • Потенциометр 10 кОм
  • Резистор 220 Ом
  • Соединительные провода
  • Макетная плата

Схема подключения

Важно: схема рассчитана на Arduino UNO. Поскольку Arduino общается с дисплеем через SPI, номера пинов зависят от платы. Например, на MKR WiFi 1010 шина SPI находится на пинах 8 и 11.

Перед подключением рекомендуется припаять штыревой разъём к 14- (или 16-) контактному коннектору дисплея — так провода будут держаться надёжно.

Подключите выводы дисплея к Arduino следующим образом:

Вывод LCDПодключение
RSЦифровой пин 12
EnableЦифровой пин 11
D4Цифровой пин 5
D5Цифровой пин 4
D6Цифровой пин 3
D7Цифровой пин 2
R/WGND
VSSGND
VCC5V
LED+5V через резистор 220 Ом
LED-GND

Дополнительно подключите потенциометр 10 кОм: крайние выводы — к +5V и GND, средний вывод (ползунок) — к пину Vo дисплея (pin3). Потенциометр регулирует контрастность: если после включения на экране ничего не видно, скорее всего, контраст выставлен неправильно — это самая частая ошибка новичков.

The circuit (made using Fritzing).

Схема подключения (создана в Fritzing)

Принципиальная схема

The schematic (made using Fritzing).

Принципиальная схема (создана в Fritzing)

---

Примеры скетчей

Hello World

Классический первый пример: выводим Hello World! на дисплей и показываем время в секундах с момента последней перезагрузки Arduino.

/*
  LiquidCrystal Library - Hello World

 Демонстрирует использование 16x2 LCD дисплея. Библиотека LiquidCrystal
 работает со всеми LCD дисплеями, совместимыми с драйвером Hitachi HD44780.
 Таких дисплеев существует множество, и их обычно можно узнать
 по 16-контактному интерфейсу.

 Этот скетч выводит "Hello World!" на LCD
 и показывает время.

  Схема подключения:
 * LCD RS pin к digital pin 12
 * LCD Enable pin к digital pin 11
 * LCD D4 pin к digital pin 5
 * LCD D5 pin к digital pin 4
 * LCD D6 pin к digital pin 3
 * LCD D7 pin к digital pin 2
 * LCD R/W pin к GND
 * LCD VSS pin к GND
 * LCD VCC pin к 5V
 * Резистор 10K:
 * концы к +5V и GND
 * движок к LCD VO pin (pin 3)

 Библиотека первоначально добавлена 18 апр 2008
 Дэвидом А. Меллисом
 библиотека изменена 5 июл 2009
 Лимор Фрид (http://www.ladyada.net)
 пример добавлен 9 июл 2009
 Томом Иго
 изменено 22 ноя 2010
 Томом Иго
 изменено 7 ноя 2016
 Артуро Гвадалупи

 Код примера находится в открытом доступе.

 https://docs.arduino.cc/learn/electronics/lcd-displays

*/

// подключаем библиотеку:
#include <LiquidCrystal.h>

// инициализируем библиотеку, связывая необходимые пины LCD интерфейса
// с номерами пинов Arduino, к которым они подключены
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup() {
  // задаём количество столбцов и строк LCD:
  lcd.begin(16, 2);
  // выводим сообщение на LCD.
  lcd.print("hello, world!");
}

void loop() {
  // устанавливаем курсор в столбец 0, строку 1
  // (строка 1 — вторая строка, так как счёт начинается с 0):
  lcd.setCursor(0, 1);
  // выводим количество секунд с момента сброса:
  lcd.print(millis() / 1000);
}

Как это работает

Скетч инициализирует дисплей, устанавливает курсор в начало первой строки и выводит строку. Во второй строке каждую секунду обновляется счётчик времени. Это хорошая отправная точка, чтобы убедиться, что всё подключено правильно.

---

Autoscroll — автопрокрутка

Этот пример демонстрирует методы autoscroll() и noAutoscroll(): они сдвигают весь текст на дисплее влево или вправо.

  • autoscroll() — при добавлении каждого нового символа весь текст сдвигается на одну позицию влево.
  • noAutoscroll() — отключает автопрокрутку.

Скетч сначала выводит символы 09 без прокрутки, затем перемещает курсор в правый нижний угол, включает автопрокрутку и выводит их снова.

/*

  LiquidCrystal Library - Autoscroll

 Демонстрирует использование 16x2 LCD дисплея. Библиотека LiquidCrystal

 работает со всеми LCD дисплеями, совместимыми с драйвером Hitachi HD44780.

 Таких дисплеев существует множество, и их обычно можно узнать

 по 16-контактному интерфейсу.

 Этот скетч демонстрирует использование функций autoscroll()

 и noAutoscroll() для включения и отключения прокрутки нового текста.

 Схема подключения:

 * LCD RS pin к digital pin 12

 * LCD Enable pin к digital pin 11

 * LCD D4 pin к digital pin 5

 * LCD D5 pin к digital pin 4

 * LCD D6 pin к digital pin 3

 * LCD D7 pin к digital pin 2

 * LCD R/W pin к GND

 * Резистор 10K:

 * концы к +5V и GND

 * движок к LCD VO pin (pin 3)

 Библиотека первоначально добавлена 18 апр 2008

 Дэвидом А. Меллисом

 библиотека изменена 5 июл 2009

 Лимор Фрид (http://www.ladyada.net)

 пример добавлен 9 июл 2009

 Томом Иго

 изменено 22 ноя 2010

 Томом Иго

 изменено 7 ноя 2016

 Артуро Гвадалупи

 Код примера находится в открытом доступе.

 http://www.arduino.cc/en/Tutorial/LiquidCrystalAutoscroll

*/

// подключаем библиотеку:
#include <LiquidCrystal.h>

// инициализируем библиотеку, связывая необходимые пины LCD интерфейса
// с номерами пинов Arduino, к которым они подключены

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;

LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup() {

  // задаём количество столбцов и строк LCD:

  lcd.begin(16, 2);
}

void loop() {

  // устанавливаем курсор в (0,0):

  lcd.setCursor(0, 0);

  // выводим числа от 0 до 9:

  for (int thisChar = 0; thisChar < 10; thisChar++) {

    lcd.print(thisChar);

    delay(500);

  }

  // устанавливаем курсор в (16,1):

  lcd.setCursor(16, 1);

  // включаем автоматическую прокрутку дисплея:

  lcd.autoscroll();

  // выводим числа от 0 до 9:

  for (int thisChar = 0; thisChar < 10; thisChar++) {

    lcd.print(thisChar);

    delay(500);

  }

  // отключаем автоматическую прокрутку

  lcd.noAutoscroll();

  // очищаем экран для следующего цикла:

  lcd.clear();
}

---

Blink — мигающий курсор

Пример показывает, как включать и выключать курсор в виде мигающего прямоугольника с помощью методов blink() и noBlink().

/*

  LiquidCrystal Library - Blink

 Демонстрирует использование 16x2 LCD дисплея. Библиотека LiquidCrystal

 работает со всеми LCD дисплеями, совместимыми с драйвером Hitachi HD44780.

 Таких дисплеев существует множество, и их обычно можно узнать

 по 16-контактному интерфейсу.

 Этот скетч выводит "Hello World!" на LCD и заставляет

 курсор мигать блоком.

 Схема подключения:

 * LCD RS pin к digital pin 12

 * LCD Enable pin к digital pin 11

 * LCD D4 pin к digital pin 5

 * LCD D5 pin к digital pin 4

 * LCD D6 pin к digital pin 3

 * LCD D7 pin к digital pin 2

 * LCD R/W pin к GND

 * Резистор 10K:

   * концы к +5V и GND

   * движок к LCD VO pin (pin 3)

 Библиотека первоначально добавлена 18 апр 2008

 Дэвидом А. Меллисом

 библиотека изменена 5 июл 2009

 Лимор Фрид (http://www.ladyada.net)

 пример добавлен 9 июл 2009

 Томом Иго

 изменено 22 ноя 2010

 Томом Иго

 изменено 7 ноя 2016

 Артуро Гвадалупи

 Код примера находится в открытом доступе.

 http://www.arduino.cc/en/Tutorial/LiquidCrystalBlink

*/

// подключаем библиотеку:
#include <LiquidCrystal.h>

// инициализируем библиотеку, связывая необходимые пины LCD интерфейса
// с номерами пинов Arduino, к которым они подключены

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;

LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup() {

  // задаём количество столбцов и строк LCD:

  lcd.begin(16, 2);

  // выводим сообщение на LCD.

  lcd.print("hello, world!");
}

void loop() {

  // отключаем мигание курсора:

  lcd.noBlink();

  delay(3000);

  // включаем мигание курсора:

  lcd.blink();

  delay(3000);
}

---

Cursor — курсор-подчёркивание

Аналогично предыдущему, но используется курсор в виде подчёркивания. Методы cursor() и noCursor() управляют его видимостью.

/*

  LiquidCrystal Library - Cursor

 Демонстрирует использование 16x2 LCD дисплея. Библиотека LiquidCrystal

 работает со всеми LCD дисплеями, совместимыми с драйвером Hitachi HD44780.

 Таких дисплеев существует множество, и их обычно можно узнать

 по 16-контактному интерфейсу.

 Этот скетч выводит "Hello World!" на LCD и использует методы

 cursor() и noCursor() для включения и отключения курсора.

 Схема подключения:

 * LCD RS pin к digital pin 12

 * LCD Enable pin к digital pin 11

 * LCD D4 pin к digital pin 5

 * LCD D5 pin к digital pin 4

 * LCD D6 pin к digital pin 3

 * LCD D7 pin к digital pin 2

 * LCD R/W pin к GND

 * Резистор 10K:

 * концы к +5V и GND

 * движок к LCD VO pin (pin 3)

 Библиотека первоначально добавлена 18 апр 2008

 Дэвидом А. Меллисом

 библиотека изменена 5 июл 2009

 Лимор Фрид (http://www.ladyada.net)

 пример добавлен 9 июл 2009

 Томом Иго

 изменено 22 ноя 2010

 Томом Иго

 изменено 7 ноя 2016

 Артуро Гвадалупи

 Код примера находится в открытом доступе.

 http://www.arduino.cc/en/Tutorial/LiquidCrystalCursor

*/

// подключаем библиотеку:
#include <LiquidCrystal.h>

// инициализируем библиотеку, связывая необходимые пины LCD интерфейса
// с номерами пинов Arduino, к которым они подключены

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;

LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup() {

  // задаём количество столбцов и строк LCD:

  lcd.begin(16, 2);

  // выводим сообщение на LCD.

  lcd.print("hello, world!");
}

void loop() {

  // отключаем курсор:

  lcd.noCursor();

  delay(500);

  // включаем курсор:

  lcd.cursor();

  delay(500);
}

---

Display — включение и выключение дисплея

Методы display() и noDisplay() позволяют быстро гасить и включать дисплей. При использовании noDisplay() текст в памяти дисплея не стирается — это удобный способ скрыть содержимое без полной перерисовки.

/*
  LiquidCrystal Library - display() и noDisplay()

 Демонстрирует использование 16x2 LCD дисплея. Библиотека LiquidCrystal
 работает со всеми LCD дисплеями, совместимыми с драйвером Hitachi HD44780.
 Таких дисплеев существует множество, и их обычно можно узнать
 по 16-контактному интерфейсу.

 Этот скетч выводит "Hello World!" на LCD и использует функции
 display() и noDisplay() для включения и отключения дисплея.

 Схема подключения:
 * LCD RS pin к digital pin 12
 * LCD Enable pin к digital pin 11
 * LCD D4 pin к digital pin 5
 * LCD D5 pin к digital pin 4
 * LCD D6 pin к digital pin 3
 * LCD D7 pin к digital pin 2
 * LCD R/W pin к GND
 * Резистор 10K:
 * концы к +5V и GND
 * движок к LCD VO pin (pin 3)

 Библиотека первоначально добавлена 18 апр 2008
 Дэвидом А. Меллисом
 библиотека изменена 5 июл 2009
 Лимор Фрид (http://www.ladyada.net)
 пример добавлен 9 июл 2009
 Томом Иго
 изменено 22 ноя 2010
 Томом Иго
 изменено 7 ноя 2016
 Артуро Гвадалупи

 Код примера находится в открытом доступе.

 http://www.arduino.cc/en/Tutorial/LiquidCrystalDisplay

*/

// подключаем библиотеку:
#include <LiquidCrystal.h>

// инициализируем библиотеку, связывая необходимые пины LCD интерфейса
// с номерами пинов Arduino, к которым они подключены
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup() {
  // задаём количество столбцов и строк LCD:
  lcd.begin(16, 2);
  // выводим сообщение на LCD.
  lcd.print("hello, world!");
}

void loop() {
  // отключаем дисплей:
  lcd.noDisplay();
  delay(500);
  // включаем дисплей:
  lcd.display();
  delay(500);
}

Практическое замечание

Это полезно, например, для реализации мигания целой строки или временного скрытия чувствительной информации.

---

Scroll — прокрутка текста

Методы scrollDisplayLeft() и scrollDisplayRight() позволяют прокручивать содержимое дисплея влево и вправо. Скетч выводит Hello World!, уводит текст за левый край, затем за правый и возвращает обратно.

/*
  LiquidCrystal Library - scrollDisplayLeft() и scrollDisplayRight()

 Демонстрация работы с 16x2 LCD дисплеем. Библиотека LiquidCrystal
 совместима со всеми LCD дисплеями на базе драйвера Hitachi HD44780.
 Таких дисплеев существует множество, и обычно их можно узнать
 по 16-контактному интерфейсу.

 Этот скетч выводит "Hello World!" на LCD и использует методы
 scrollDisplayLeft() и scrollDisplayRight() для прокрутки текста.

  Схема подключения:
 * LCD RS pin — digital pin 12
 * LCD Enable pin — digital pin 11
 * LCD D4 pin — digital pin 5
 * LCD D5 pin — digital pin 4
 * LCD D6 pin — digital pin 3
 * LCD D7 pin — digital pin 2
 * LCD R/W pin — GND
 * Резистор 10K:
 * концы к +5V и GND
 * движок к LCD VO pin (pin 3)

 Библиотека первоначально добавлена 18 апр. 2008
 автором David A. Mellis
 библиотека изменена 5 июл. 2009
 автором Limor Fried (http://www.ladyada.net)
 пример добавлен 9 июл. 2009
 автором Tom Igoe
 изменено 22 ноя. 2010
 автором Tom Igoe
 изменено 7 ноя. 2016
 автором Arturo Guadalupi

 Код примера находится в открытом доступе.

 http://www.arduino.cc/en/Tutorial/LiquidCrystalScroll

*/

// подключение библиотеки:
#include <LiquidCrystal.h>

// инициализация библиотеки: привязка необходимых пинов LCD интерфейса
// к соответствующим пинам Arduino
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup() {
  // задаём количество столбцов и строк LCD:
  lcd.begin(16, 2);
  // вывод сообщения на LCD.
  lcd.print("hello, world!");
  delay(1000);
}

void loop() {
  // прокрутка на 13 позиций (длина строки) влево,
  // чтобы текст ушёл за левый край экрана:
  for (int positionCounter = 0; positionCounter < 13; positionCounter++) {
    // прокрутка на одну позицию влево:
    lcd.scrollDisplayLeft();
    // небольшая пауза:
    delay(150);
  }

  // прокрутка на 29 позиций (длина строки + длина дисплея) вправо,
  // чтобы текст ушёл за правый край экрана:
  for (int positionCounter = 0; positionCounter < 29; positionCounter++) {
    // прокрутка на одну позицию вправо:
    lcd.scrollDisplayRight();
    // небольшая пауза:
    delay(150);
  }

  // прокрутка на 16 позиций (длина дисплея + длина строки) влево,
  // чтобы вернуть текст в центр:
  for (int positionCounter = 0; positionCounter < 16; positionCounter++) {
    // прокрутка на одну позицию влево:
    lcd.scrollDisplayLeft();
    // небольшая пауза:
    delay(150);
  }

  // задержка в конце полного цикла:
  delay(1000);

}

---

Serial to Display — вывод данных из Serial

Этот скетч принимает текст от компьютера через Serial и отображает его на LCD. Загрузите скетч, откройте Serial Monitor, введите любой текст и нажмите «Send» — он появится на дисплее.

/*
  LiquidCrystal Library - Serial Input

 Демонстрация работы с 16x2 LCD дисплеем. Библиотека LiquidCrystal
 совместима со всеми LCD дисплеями на базе драйвера Hitachi HD44780.
 Таких дисплеев существует множество, и обычно их можно узнать
 по 16-контактному интерфейсу.

 Этот скетч отображает на LCD текст, полученный через последовательный порт
 (например, из Serial Monitor).

 Схема подключения:
 * LCD RS pin — digital pin 12
 * LCD Enable pin — digital pin 11
 * LCD D4 pin — digital pin 5
 * LCD D5 pin — digital pin 4
 * LCD D6 pin — digital pin 3
 * LCD D7 pin — digital pin 2
 * LCD R/W pin — GND
 * Резистор 10K:
 * концы к +5V и GND
 * движок к LCD VO pin (pin 3)

 Библиотека первоначально добавлена 18 апр. 2008
 автором David A. Mellis
 библиотека изменена 5 июл. 2009
 автором Limor Fried (http://www.ladyada.net)
 пример добавлен 9 июл. 2009
 автором Tom Igoe
 изменено 22 ноя. 2010
 автором Tom Igoe
 изменено 7 ноя. 2016
 автором Arturo Guadalupi

 Код примера находится в открытом доступе.

 http://www.arduino.cc/en/Tutorial/LiquidCrystalSerialDisplay

*/

// подключение библиотеки:
#include <LiquidCrystal.h>

// инициализация библиотеки: привязка необходимых пинов LCD интерфейса
// к соответствующим пинам Arduino
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup() {
  // задаём количество столбцов и строк LCD:
  lcd.begin(16, 2);
  // инициализация последовательного порта:
  Serial.begin(9600);
}

void loop() {
  // когда по последовательному порту приходят символы...
  if (Serial.available()) {
    // небольшая пауза, чтобы получить всё сообщение целиком
    delay(100);
    // очистка экрана
    lcd.clear();
    // читаем все доступные символы
    while (Serial.available() > 0) {
      // выводим каждый символ на LCD
      lcd.write(Serial.read());
    }
  }
}

Типичные ошибки

  • Убедитесь, что скорость Serial в мониторе порта совпадает с той, что задана в скетче.
  • Длинные строки будут обрезаны по ширине дисплея, если не предусмотрена прокрутка.

---

Set Cursor — позиционирование курсора

Метод setCursor() перемещает курсор в нужную позицию. Вызовите setCursor(), передав номер столбца и строки. Для дисплея 2×16 адресация выглядит так:

lcd.setCursor(0, 0); // верхний левый
lcd.setCursor(15, 0); // верхний правый
lcd.setCursor(0, 1); // нижний левый
lcd.setCursor(15, 1); // нижний правый

Полный пример скетча:

/*

  LiquidCrystal Library - setCursor

 Демонстрация работы с 16x2 LCD дисплеем. Библиотека LiquidCrystal

 совместима со всеми LCD дисплеями на базе драйвера Hitachi HD44780.

 Таких дисплеев существует множество, и обычно их можно узнать

 по 16-контактному интерфейсу.

 Этот скетч выводит текст во все позиции LCD с помощью метода

 setCursor():

  Схема подключения:

 * LCD RS pin — digital pin 12

 * LCD Enable pin — digital pin 11

 * LCD D4 pin — digital pin 5

 * LCD D5 pin — digital pin 4

 * LCD D6 pin — digital pin 3

 * LCD D7 pin — digital pin 2

 * LCD R/W pin — GND

 * Резистор 10K:

 * концы к +5V и GND

 * движок к LCD VO pin (pin 3)

 Библиотека первоначально добавлена 18 апр. 2008

 автором David A. Mellis

 библиотека изменена 5 июл. 2009

 автором Limor Fried (http://www.ladyada.net)

 пример добавлен 9 июл. 2009

 автором Tom Igoe

 изменено 22 ноя. 2010

 автором Tom Igoe

 изменено 7 ноя. 2016

 автором Arturo Guadalupi

 Код примера находится в открытом доступе.

 http://www.arduino.cc/en/Tutorial/LiquidCrystalSetCursor

*/

// подключение библиотеки:
#include <LiquidCrystal.h>

// инициализация библиотеки: привязка необходимых пинов LCD интерфейса
// к соответствующим пинам Arduino

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;

LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

// эти константы не изменяются. Однако с их помощью можно
// задать размер вашего LCD:

const int numRows = 2;

const int numCols = 16;

void setup() {

  // задаём количество столбцов и строк LCD:

  lcd.begin(numCols, numRows);
}

void loop() {

  // цикл от ASCII 'a' до ASCII 'z':

  for (int thisLetter = 'a'; thisLetter <= 'z'; thisLetter++) {

    // цикл по столбцам:

    for (int  thisRow = 0; thisRow < numRows; thisRow++) {

      // цикл по строкам:

      for (int thisCol = 0; thisCol < numCols; thisCol++) {

        // установка позиции курсора:

        lcd.setCursor(thisCol, thisRow);

        // печатаем букву:

        lcd.write(thisLetter);

        delay(200);

      }

    }

  }
}

---

Text Direction — направление текста

Методы leftToRight() и rightToLeft() управляют направлением вывода текста от курсора:

  • rightToLeft() — текст течёт влево от курсора (как при выравнивании по правому краю).
  • leftToRight() — текст течёт вправо от курсора (как при выравнивании по левому краю).

Скетч выводит символы al справа налево, затем mr слева направо, затем снова sz справа налево.

/*

 LiquidCrystal Library - TextDirection

Демонстрирует использование 16x2 LCD дисплея. Библиотека LiquidCrystal
работает со всеми LCD дисплеями, совместимыми с драйвером Hitachi HD44780.
Таких дисплеев существует множество, и их обычно можно узнать по 16-контактному интерфейсу.

Этот скетч демонстрирует использование leftToRight() и rightToLeft()
для перемещения курсора.

Схема подключения:
 * LCD RS pin — digital pin 12
 * LCD Enable pin — digital pin 11
 * LCD D4 pin — digital pin 5
 * LCD D5 pin — digital pin 4
 * LCD D6 pin — digital pin 3
 * LCD D7 pin — digital pin 2
 * LCD R/W pin — GND
 * Резистор 10K:
   * концы к +5V и GND
   * движок к LCD VO pin (pin 3)

Библиотека изначально добавлена 18 апр. 2008
автором David A. Mellis
библиотека изменена 5 июл. 2009
автором Limor Fried (http://www.ladyada.net)
пример добавлен 9 июл. 2009
автором Tom Igoe
изменено 22 ноя. 2010
автором Tom Igoe
изменено 7 ноя. 2016
автором Arturo Guadalupi

Код примера находится в открытом доступе.
http://www.arduino.cc/en/Tutorial/LiquidCrystalTextDirection

*/

// подключаем библиотеку:
#include <LiquidCrystal.h>

// инициализируем библиотеку, связывая необходимые пины LCD интерфейса
// с номерами пинов Arduino, к которым они подключены

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;

LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

int thisChar = 'a';

void setup() {

  // задаём количество столбцов и строк LCD:

  lcd.begin(16, 2);

  // включаем курсор:

  lcd.cursor();
}

void loop() {

  // меняем направление на букве 'm':

  if (thisChar == 'm') {

    // идём вправо для следующей буквы

    lcd.rightToLeft();

  }

  // снова меняем направление на букве 's':

  if (thisChar == 's') {

    // идём влево для следующей буквы

    lcd.leftToRight();

  }

  // сброс на букве 'z':

  if (thisChar > 'z') {

    // переходим в (0,0):

    lcd.home();

    // начинаем снова с 0

    thisChar = 'a';

  }

  // печатаем символ

  lcd.write(thisChar);

  // ждём секунду:

  delay(1000);

  // переходим к следующей букве:

  thisChar++;
}

---

Custom Character — пользовательские символы

Этот пример показывает, как создавать собственные символы и выводить их на LCD-дисплей.

Обратите внимание: для этого примера нужен дополнительный потенциометр:

- Крайние выводы подключены к 5V и GND.

- Средний вывод (ползунок) подключён к A0.

>

Этот потенциометр управляет переменной delayTime.

/*
  LiquidCrystal Library - Custom Characters

Демонстрирует добавление пользовательских символов на LCD дисплей.
Библиотека LiquidCrystal работает со всеми LCD дисплеями, совместимыми
с драйвером Hitachi HD44780. Таких дисплеев существует множество,
и их обычно можно узнать по 16-контактному интерфейсу.

Этот скетч выводит на LCD «I <heart> Arduino!» и маленького танцующего человечка.

Схема подключения:
 * LCD RS pin — digital pin 12
 * LCD Enable pin — digital pin 11
 * LCD D4 pin — digital pin 5
 * LCD D5 pin — digital pin 4
 * LCD D6 pin — digital pin 3
 * LCD D7 pin — digital pin 2
 * LCD R/W pin — GND
 * Потенциометр 10K:
   * концы к +5V и GND
   * движок к LCD VO pin (pin 3)
 * Потенциометр 10K на пине A0

Создан 21 мар. 2011
автором Tom Igoe
изменено 11 ноя. 2013
автором Scott Fitzgerald
изменено 7 ноя. 2016
автором Arturo Guadalupi

Основан на примере Adafruit®:
https://github.com/adafruit/SPI_VFD/blob/master/examples/createChar/createChar.pde

Код примера находится в открытом доступе.
https://docs.arduino.cc/learn/electronics/lcd-displays#custom-character

Также полезно:
http://icontexto.com/charactercreator/

*/

// подключаем библиотеку:
#include <LiquidCrystal.h>

// инициализируем библиотеку, связывая необходимые пины LCD интерфейса
// с номерами пинов Arduino, к которым они подключены
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

// создаём несколько пользовательских символов:
byte heart[8] = {
  0b00000,
  0b01010,
  0b11111,
  0b11111,
  0b11111,
  0b01110,
  0b00100,
  0b00000
};

byte smiley[8] = {
  0b00000,
  0b00000,
  0b01010,
  0b00000,
  0b00000,
  0b10001,
  0b01110,
  0b00000
};

byte frownie[8] = {
  0b00000,
  0b00000,
  0b01010,
  0b00000,
  0b00000,
  0b00000,
  0b01110,
  0b10001
};

byte armsDown[8] = {
  0b00100,
  0b01010,
  0b00100,
  0b00100,
  0b01110,
  0b10101,
  0b00100,
  0b01010
};

byte armsUp[8] = {
  0b00100,
  0b01010,
  0b00100,
  0b10101,
  0b01110,
  0b00100,
  0b00100,
  0b01010
};

void setup() {
  // инициализируем LCD и задаём количество столбцов и строк:
  lcd.begin(16, 2);

  // создаём новый символ
  lcd.createChar(0, heart);
  // создаём новый символ
  lcd.createChar(1, smiley);
  // создаём новый символ
  lcd.createChar(2, frownie);
  // создаём новый символ
  lcd.createChar(3, armsDown);
  // создаём новый символ
  lcd.createChar(4, armsUp);

  // устанавливаем курсор в верхний левый угол
  lcd.setCursor(0, 0);

  // выводим сообщение на LCD.
  lcd.print("I ");
  lcd.write(byte(0)); // при вызове lcd.write() '0' необходимо привести к типу byte
  lcd.print(" Arduino! ");
  lcd.write((byte)1);

}

void loop() {
  // считываем потенциометр на A0:
  int sensorReading = analogRead(A0);
  // преобразуем результат в диапазон 200–1000:
  int delayTime = map(sensorReading, 0, 1023, 200, 1000);
  // устанавливаем курсор на нижнюю строку, 5-я позиция:
  lcd.setCursor(4, 1);
  // рисуем человечка с опущенными руками:
  lcd.write(3);
  delay(delayTime);
  lcd.setCursor(4, 1);
  // рисуем его с поднятыми руками:
  lcd.write(4);
  delay(delayTime);
}

Как это работает

Контроллер HD44780 позволяет хранить до 8 пользовательских символов в ОЗУ. Каждый символ задаётся массивом из 8 байт, где каждый байт описывает одну строку пикселей 5×8. Это открывает возможность рисовать иконки, стрелки, индикаторы уровня и другие графические элементы прямо на текстовом дисплее.

---

Частые проблемы и их решение

СимптомВероятная причина
Экран светится, но пустойНеправильно выставлен контраст — покрутите потенциометр
Отображаются только прямоугольникиДисплей не инициализирован или неверно указаны пины в конструкторе LiquidCrystal
Текст обрезаетсяСтрока длиннее 16 символов, нужна прокрутка
Подсветка не горитПроверьте резистор 220 Ом и подключение LED+ / LED-
Мусор на экранеПомехи на линиях данных — проверьте провода и питание