Жидкокристаллические дисплеи (LCD) с Arduino
Как подключить LCD-дисплей к Arduino и работать с библиотекой LiquidCrystal — схемы, примеры кода и типичные ошибки.
Материал обновлён 18.11.2021 автором Karl Söderby.
Библиотека LiquidCrystal library позволяет управлять LCD-дисплеями, совместимыми с контроллером Hitachi HD44780. Такие дисплеи встречаются повсюду — их легко узнать по 16-контактному разъёму.

Как устроен интерфейс 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/W | GND |
| VSS | GND |
| VCC | 5V |
| LED+ | 5V через резистор 220 Ом |
| LED- | GND |
Дополнительно подключите потенциометр 10 кОм: крайние выводы — к +5V и GND, средний вывод (ползунок) — к пину Vo дисплея (pin3). Потенциометр регулирует контрастность: если после включения на экране ничего не видно, скорее всего, контраст выставлен неправильно — это самая частая ошибка новичков.

Схема подключения (создана в 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()— отключает автопрокрутку.
Скетч сначала выводит символы 0–9 без прокрутки, затем перемещает курсор в правый нижний угол, включает автопрокрутку и выводит их снова.
/*
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()— текст течёт вправо от курсора (как при выравнивании по левому краю).
Скетч выводит символы a–l справа налево, затем m–r слева направо, затем снова s–z справа налево.
/*
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- |
| Мусор на экране | Помехи на линиях данных — проверьте провода и питание |