какая библиотека используется для работы с lcd дисплеем
Библиотека LiquidCrystal
Выводить информацию удобно на экран. Очень популярным решением является текстовый жидкокристаллический экран, знакомый нам по древним звонилкам. Для опытов я использовал простой текстовый экран 16×2 от компании МЭЛТ.
Я думал, что работать с такими экранами очень сложно, оказалось, что ничего страшного.
Краткое описание дисплея: LCD-дисплей MT-16S2H компании Мэлт служит для вывода текста с подсветкой. По изображению похож на дисплеи старых мобильных телефонов вроде Nokia 3310 или Siemens C35. Экран имеет 16 контактов для подведения питания и взаимодействия с управляющей электроникой. Для управления выводом дисплея возможно использовать только 6 из них. Дисплей выполнен на чипе, совместимом с HD44780, который является де-факто стандартом для LCD-экранов.
14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 16 | 15 |
Контакт | Обозначение | Назначение |
---|---|---|
1 | Vss | Заземление |
2 | Vdd | Питание 5В |
3 | Vo | Регулировка контрастности (потенциометр) |
4 | Rs | Выбор режим (командный или отображения данных) |
5 | RW | Чтение/Запись |
6 | En | Готовность данных |
7 | D0 | Линия передачи данных 0 (не используется) |
8 | D1 | Линия передачи данных 1 (не используется) |
9 | D2 | Линия передачи данных 2 (не используется) |
10 | D3 | Линия передачи данных 3 (не используется) |
11 | D4 | Линия передачи данных 4 |
12 | D5 | Линия передачи данных 5 |
13 | D6 | Линия передачи данных 6 |
14 | D7 | Линия передачи данных 7 |
15 | A | Анод подсветки |
16 | K | Катод подсветки |
Вкратце, чтобы самому не забыть. Втыкаем дисплей своими 16 ножками в макетную плату. Подводим к рельсам питания макетки питание +5 В и землю с Arduino.
Фоновая подсветка дисплея — это отдельный контур, не связанный с остальным. Включить её можно подав +5 В на 15-й контакт дисплея и подключив 16-й контакт к земле. Соединив эти два контакта с соответствующими рельсами, можно включить Arduino и увидеть, что дисплей засветился.
Далее необходимо подключить цепь, отвечающую за отображение символов. Для этого предназначены контакты 1, 2 и 3 на дисплее. Перед подключением отключите Arduino от питания.
Первый — это земля. Соедините его с рельсой земли.
Второй — питание. Соедините его с рельсой +5 В.
Третий — контрастность. Для получение максимально контрастного изображения соедините его с рельсой земли. Вы можете подать на этот контакт произвольное напряжение от 0 до 5 В, чем оно выше, тем тусклее будет изображение, но вместе с этим снизится энергопотребление. Для возможности плавной регулировки контрастности можете подать на этот контакт выходной сигнал потенциометра.
После подключения, если включить Arduino, вы можете увидеть прямоугольные знакоместа. В зависимости от комбинации цветов текста и подсветки они могут быть как яркими и хорошо заметными, так и едва заметными. Это нормально: в любом случае, текст будет смотреться отлично.
Подключение шины данных
Для коммуникации между Arduino и экраном необходимо использовать несколько линий взаимодействия:
2 или 3 для командования дисплеем
4 или 8 для передачи данных (кодов символов и команд)
Таким образом занятыми окажутся от 6-ти до 11-ти контактов от обоих устройств. Если вам не требуется считывать с дисплея, что подходит под большинство сценариев использования, для команд понадобится 2 линии.
Если скорость обновления данных так же не является проблемой, для передачи данных достаточно 4-х линий.
Итак, для подключения дисплея достаточно использовать 6 линий, 6 контактов на Arduino. Рассмотрим именно этот сценарий. Как упоминалось, нам не за чем считывать с дисплея, мы будем в него только писать. Поэтому соединим 5-й контакт дисплея, который отвечает за выбор чтение/запись с рельсой земли. Это означает «всегда писать».
Затем, соединяем Arduino и экран нашими 6-ю линиями коммуникации. Какие именно контакты будут выбраны на Arduino не имеет значения: мы зададим их в программе, но для примера была выбрана такая конфигурация:
4-й контакт дисплея — 4-й контакт Arduino. Это линия адресного сигнала. Известная как A0 или RS. В зависимости от того, 0 она или 1, дисплей понимает имеем ли мы на линии данных команду вроде «передвинуть курсор» или код символа для отображения.
6-й контакт дисплея — 5-й контакт Arduino. Это линия разрешения доступа к данным. Известная, как E или Enable. Когда эта линия становится единицей, дисплей исполняет команду или выводит символ с линии данных.
11-й, 12-й, 13-й, 14-й контакт дисплея — 10-й, 11-й, 12-й, 13-й контакт Arduino соответственно. Это линии данных. Известные как D4, D5, D6, D7.
Программирование
Существует стандартная библиотека LiquidCrystal для работы с текстовыми жидкокристаллическими экранами.
В Arduino IDE выбираем меню Sketch | Import Library | LiquidCrystal. В начало скетча будет вставлена строка.
Это удобно, если вы позабыли правильное написание библиотеки и убережёт от опечаток.
Также в состав Arduino IDE входят несколько примеров работы с библиотекой: File | Examples | LiquidCrystal.
А ещё лучше использовать константы.
Простейшая программа для вывода «Hello World»
В данном случае функция loop() нам не требуется, поэтому оставляем её пустой.
Нужно помнить, что фуккция print() не проверяет длину строк, поэтому самостоятельно следите за своими данными.
Рассмотрим поставляемые примеры.
Autoscroll
Бегущая строка. Выводится первая строка, затем вторая.
Blink
Выводим строку hello, world! и мигающий курсор в виде знакоместа.
Cursor
Выводим строку hello, world! и мигающий символ в виде значка подчёркивания.
CustomCharacter
Выводим собственные символы: сердечко, смайлик. Небольшая анимация человечка.
Display
Выводим мигающий текст.
HelloWorld
Выводим на первой строке сообщение, а на второй время в секундах с момента запуска.
Scroll
Выводим бегущую строку, которая движется вправо и влево.
SerialDisplay
Вводим текст в Serial Monitor, чтобы увидеть его на дисплее.
SetCursor
Выводим символы алфавита во все доступные позиции экрана.
TextDirection
Выводим символы в разных направлениях, используя функции leftToRight() и rightToLeft().
Индикатор прогресса яркости светодиода
Создадим проект, в котором будем получать данные с потенциометра и выводить получаемые данные на экран в виде индикатора прогресса. Также будем менять яркость светодиода в соответствии с показаниями. Так как показания варьируются от 0 до 1024, необходимо преобразовать значения в пределах от 0 до 256 для светодиода и от 0 до 17 для экрана. Сам индикатор состоит из полностью закрашенного прямоугольника. Если выводить подобные прямоугольники с начала строки, то будет похоже на индикатор прогресса.
Потенциометр подключаем к выводу A0, светодиод к выводу 6. Подключение ЖК-дисплея стандартное, как описано в начале статьи.
Кириллица
Не все дисплеи имеют кириллицу. Дисплей от Мэлт поддерживает русский язык. Но просто напечатать текст на русском не получится. Так например, букве «Я» соответствует код B1 в шестнадцатиричной системе. Чтобы передать на экран строку «Яndex», необходимо в явном виде с помощью последовательности \x## встроить в строку код символа:
Можете смешивать в одной строке обычные символы и явные коды как угодно. Единственный нюанс в том, что после того, как компилятор в строке видит последовательность \x, он считывает за ним все символы, которые могут являться разрядами шестнадцатиричной системы даже если их больше двух. Из-за этого вы не можете просто использовать символы из диапазона 0-9, a-f следом за двузначным кодом символа: это вызовет ошибку компиляции. Чтобы обойти этот момент, можно использовать тот факт, что две строки записанные рядом склеиваются. Так, если вы хотите написать «Яeee»:
Полную таблицу символов с кодами можно найти в документации к экрану.
Я на скорую руку написал скрипт на JavaScript, который конвертирует слова в нижнем регистре в нужные последовательности. Если в слове встречаются повторяющие буквы, то нажмите на кнопку несколько раз.
Библиотека LiquidCrystalRus с поддержкой кириллицы
Совсем не обязательно мучиться с байтами, чтобы вывести русский символ. Существует библиотека LiquidCrystalRus, которая поддерживает кириллицу. Исходники лежат на Гитхабе. Скачайте файл LiquidCrystalRus-1.6.0.zip и распакуйте его в папку libraries. У вас получится что-то типа D:\Arduino\libraries\LiquidCrystalRus. В папке находятся файлы библиотеки и папка examples, содержащая три скетча. После этого примеры будут доступны из Arduino IDE. Запустите пример File | Examples | LiquidCrystalRus | HelloWorldRus и убедитесь, что экран способен выводить русские символы.
Функции библиотеки LiquidCrystal
autoscroll()
Функция autoscroll() включает автоматическую прокрутку экрана жидкокристаллического индикатора и заставляет каждый вывод символа на экран индикатора перемещать предыдущие символы на одно знакоместо. Если текущее направление вывода символов слева направо (значение по умолчанию) — экран индикатора прокручивается влево; если текущее направление вывода символов справа налево — экран индикатора прокручивается вправо. Это производит эффект вывода каждого нового символа в одно и то же знакоместо на экране жидкокристаллического индикатора.
begin()
Функция begin() определяет размерность (количество символов в ширину и высоту) индикатора.
blink()
Функция blink() выводит на экран жидкокристаллического индикатора мигающий курсор. Если она используется в комбинации с функцией cursor(), результат будет зависеть от конкретного индикатора.
clear()
Функция clear() очищает экран жидкокристаллического индикатора и располагает курсор в верхнем левом углу.
createChar()
Функция createChar() создаёт пользовательский символ (глиф) для использования на жидкокристаллическом дисплее. Поддерживаются до восьми символов 5×8 пикселов (нумерация с 0 до 7). Создание каждого пользовательского символа определяется массивом из восьми байтов — один байт для каждой строки. Пять младших значащих битов каждого байта определяют пикселы в этой строке. Чтобы вывести пользовательский символ на экран, используйте функцию write() с номером символа в качестве параметра.
cursor()
Функция cursor() выводит на экран жидкокристаллического индикатора курсор — подчёркивание знакоместа в позиции, в которую будет записан следующий символ.
display()
Функция display() включает жидкокристаллический индикатор после того, как он был выключен функцией noDisplay(). Эта функция восстанавливает текст (и курсор), который был на дисплее.
Функция home() располагает курсор в верхнем левом углу жидкокристаллического индикатора. Используется для определения начального положения при выводе последовательного текста на экран индикатора. Чтобы ещё и очистить экран индикатора, используйте вместо этой функции функцию clear().
leftToRight()
Функция leftToRight() устанавливает направление вывода символов на экран жидкокристаллического индикатора слева направо (значение по умолчанию). Это означает, что последующие символы, выводимые на экран индикатора, пойдут слева направо, но не повлияют на выведенный ранее текст.
LiquidCrystal()
Конструктор LiquidCrystal() создаёт переменную типа LiquidCrystal. Индикатором можно управлять, используя 4 или 8 линий данных. Для подключения по 4-м линиям пропустите контакты от D0 до D3 и оставьте эти линии неподключёнными. Контакт RW может быть соединён с «землёй» вместо соединения с контактом платы Arduino. Если в вашей схеме так — пропустите этот параметр функции.
noAutoscroll()
Функция noAutoscroll() выключает автоматическую прокрутку экрана жидкокристаллического индикатора.
noBlink()
Функция noBlink() выключает мигающий курсор на экране жидкокристаллического индикатора.
noCursor()
Функция noCursor() скрывает курсор с экрана жидкокристаллического индикатора.
noDisplay()
Функция noDisplay() выключает жидкокристаллический индикатор без потери отображаемой на нем информации.
print()
Функция print() печатает текст на жидкокристаллическом индикаторе.
rightToLeft()
Функция rightToLeft() устанавливает направление вывода символов на экран жидкокристаллического индикатора справа налево (значение по умолчанию — слева направо). Это означает, что последующие символы, выводимые на экран индикатора, пойдут справа налево, но не повлияют на выведенный ранее текст.
scrollDisplayLeft()
Функция scrollDisplayLeft() прокручивает информацию на экране индикатора (текст и курсор) на одно знакоместо влево.
scrollDisplayRight()
Функция scrollDisplayRight() прокручивает информацию на экране индикатора (текст и курсор) на одно знакоместо вправо.
setCursor()
Функция setCursor() позиционирует курсор жидкокристаллического индикатора, т.е. устанавливает положение, в котором на его экран будет выведен последующий текст.
write()
Функция write() записывает символ в жидкокристаллический индикатор.
Собственные символы
Собственные символы рисуются с помощью функции createChar(). Пример, предлагаемый на сайте Arduino:
Вы можете нарисовать несколько собственных символов и вывести их на экран.
Визуальный редактор
Редактор для создания собственных символов для дисплеев HD44780
Знакоместо
Результат
Код для скетча Arduino
Экран с I2C
Стандартный экран неудобно подключать, слишком много контактов задействовано в сборке. Существует альтернативный вариант, когда к экрану прилагается дополнительный модуль. В этом случае используется только четыре контакта (питание, земля и два аналоговых порта).
На других микроконтроллерах сигнальные выводы отличаются (Leonardo: SDA-D2, SCL-D3; MEGA, ADK, DUE: SDA-D20, SCL-D21).
Стандартная библиотека не подойдёт. Нужно использовать библиотеку с поддержкой I2C LiquidCrystal I2C by Frank de Brabander (GitHub).
После установки библиотеки будут доступны несколько примеров: CustomChars, HelloWorld, SerialDisplay.
Если при запуске примера не видны символы на экране, то попробуйте покрутить винт на модуле для изменения контрастности. У меня был именно такой случай.
Библиотека i2cdetect
Если у вас попался нестандартный дисплей, то можно узнать используемый адрес устройства при помощи библиотеки i2cdetect, доступный через менеджер библиотек.
После установки библиотеки запустите прилагаемый к нему пример и через последовательный монитор увидите нужный адрес.
ОБОРУДОВАНИЕ
ТЕХНОЛОГИИ
РАЗРАБОТКИ
Блог технической поддержки моих разработок
Урок 23. Подключение ЖК (LCD) индикаторов к Ардуино. Библиотека LiquidCrystal.
В уроке поговорим о знакосинтезирующих жидкокристаллических индикаторах, о подключении их к плате Ардуино и управлении индикаторами с помощью библиотек LiquidCrystal и LiquidCrystalRus.
Светодиодные семисегментные индикаторы хотя и являются самым дешевым вариантом индикации для электронных устройств, но их применение ограничено двумя существенными недостатками.
Для вывода текстовой информации или чисел размером более 4 разряда гораздо практичнее использовать жидкокристаллические знакосинтезирующие индикаторы (дисплеи). К их достоинствам следует отнести:
На рынке существует большое число разнообразных жидкокристаллических (LCD) индикаторов разных производителей. Практически все они аналогичны по параметрам, сигналам интерфейсов, командам управления. В данный момент наиболее распространенными ЖК индикаторами на российском рынке являются устройства производства компании Winstar, Тайвань. Я буду ссылаться на индикаторы этой фирмы. Но информация вполне применима и для символьных LCD дисплеев других производителей.
Общие сведения.
Знакосинтезирующие или символьные индикаторы отображают информацию в виде знакомест определенной разрядности. Одно знакоместо отображает один символ. Количество знакомест определяет разрядность индикатора. Информация на индикаторах может выводиться на нескольких строках, поэтому для индикаторов такого типа всегда указывается число символов в строке и число строк.
Отображение информации происходит на жидкокристаллической матрице со светодиодной подсветкой. Подсветка бывает самых разных цветов, что значительно оживляет монохромную текстовую информацию.
Для управления жидкокристаллической матрицей и организации интерфейса индикатора используется встроенный контроллер HD44780 или его полные аналоги. Этот контроллер определяет сигналы интерфейса индикатора и команды управления.
Символьные LCD индикаторы фирмы Winstar.
Мне известны следующие варианты ЖК индикаторов этой фирмы.
Тип индикатора | Формат отображения, символов x строк | Габариты, мм | Размеры видимой области, мм | Ссылка на документацию, формат PDF |
WH0802A1 | 8 x 2 | 58 x 32 | 38 x 16 | |
WH1202A | 12 x 2 | 55,7 x 32 | 46 x 14,5 | |
WH1601A | 16 x 1 | 80 x 36 | 66 x 16 | |
WH1601B | 16 x 1 | 85 x 28 | 66 x 16 | |
WH1601L | 16 x 1 | 122 x 33 | 99 x 13 | |
WH1602A | 16 x 2 | 84 x 44 | 66 x 16 | |
WH1602B | 16 x 2 | 80 x 36 | 66 x 16 | |
WH1602C | 16 x 2 | 80 x 36 | 66 x 16 | |
WH1602D | 16 x 2 | 85 x 30 | 66 x 16 | |
WH1602J | 16 x 2 | 80 x 36 | 66 x 16 | |
WH1602L1 | 16 x 2 | 122 x 44 | 99 x 24 | |
WH1602M | 16 x 2 | 85 x 32,6 | 66 x 16 | |
WH1602O | 16 x 2 | 85 x 25,2 | 66 x 16 | |
WH1602P | 16 x 2 | 85 x 25,2 | 66 x 16 | |
WH1602S | 16 x 2 | 59 x 29,3 | 52 x 15 | |
WH1602T | 16 x 2 | 65,4 x 28,2 | 54,8 x 19 | |
WH1602W | 16 x 2 | 80 x 36 | 66 x 16 | |
WH1602V2 | 16 x 2 | 66,7 x 23,3 | 61 x 15,9 | |
WH1604A | 16 x 4 | 87 x 60 | 62 x 26 | |
WH1604B | 16 x 4 | 70,6 x 60 | 60 x 32,6 | |
WH2002A | 20 x 2 | 116 x 37 | 85 x 18,6 | |
WH2002D | 20 x 2 | 89 x 21,5 | 75 x 15 | |
WH2002L | 20 x 2 | 180 x 40 | 149 x 23 | |
WH2002M | 20 x 2 | 146 x 43 | 123 x 23 | |
WH2004A | 20 x 4 | 98 x 60 | 77 x 25,2 | |
WH2004B | 20 x 4 | 98 x 60 | 77 x 25,2 | |
WH2004D | 20 x 4 | 77 x 47 | 60 x 22 | |
WH2004G | 20 x 4 | 87 x 58 | 74,4 x 24,8 | |
WH2004H | 20 x 4 | 87 x 58 | 74,4 x 24,8 | |
WH2004L | 20 x 4 | 146 x 62,5 | 123,5 x 43 | |
WH2402A | 24 x 2 | 118 x 36 | 94,5 x 16 | |
WH4002A | 40 x 2 | 182 x 33,5 | 154,4 x 16,5 | |
WH4004A | 40 x 4 | 190 x 54 | 147 x 29,5 |
Подключение LCD индикатора к микроконтроллеру.
Схемы подключения, временные диаграммы, параметры сигналов, команды управления, коды символов подробно расписаны в документации на контроллер HD44780. Я приведу только самые необходимые данные о подключении индикаторов к микроконтроллерам.
Как правило, LCD индикаторы имеют 16 выводов.
Во многих приложениях функция чтения не используется, поэтому сигнал часто подключается к земле.6EIСтроб операции шины (по отрицательному фронту).7DB0I/OМладшие биты восьми битного режима. При четырех битном интерфейсе не используются.8DB1I/O9DB2I/O10DB3I/O11DB4I/OСтаршие биты восьми битного режима или биты данных четырех битного интерфейса.12DB5I/O13DB6I/O14DB7I/O15A—Анод питания подсветки (+).16K—Катод питания подсветки (-). Ток должен быть ограничен.
Номер вывода (первый столбец) приведен для наиболее распространенного варианта. Лучше проверьте, загрузив документацию на Ваш тип индикатора из таблицы предыдущего раздела.
Символьные ЖК дисплеи поддерживают два варианта подключения к микроконтроллеру:
Первый вариант обеспечивает передачу данных на дисплей с большей скоростью. Второй – требует для подключения индикатора на 4 вывода меньше. Несомненно, важнее сократить число выводов для подключения, чем увеличить скорость обмена. Тем более, что LCD индикаторы довольно медленные устройства со временем цикла регенерации 10-20 мс.
Подключение символьного ЖК (LCD) дисплея к плате Ардуино.
Я буду подключать индикатор WH2004A (4 строки по 20 символов) в четырех битном режиме обмена к плате Arduino UNO R3. Документацию на LCD дисплей WH2004 можете посмотреть по этой ссылке WH2004.pdf.
Схема выглядит так.
Резисторы R2 и R3 определяют контрастность индикатора. Можете подключить подстроечный резистор и установить необходимую четкость изображения. Я часто использую индикаторы WH2004, и в своих схемах выбираю такие номиналы резисторов.
Светодиоды подсветки индикатора я подключил к источнику питания 5 В через резистор R1 (30 Ом). Этим я задал ток порядка 25 мА. Тускло, но светится. В темноте видно хорошо. Хотя индикаторы WH2004 допускают ток подсветки до 580 мА.
Библиотека для управления LCD индикаторами в системе Ардуино LiquidCrystal.
Существует стандартная библиотека для управления ЖК индикаторами на базе контроллера HD44780. Подробно опишу ее методы.
LiquidCristal(…)
Конструктор класса. Может иметь разное число аргументов.
LiquidCrystal disp(6, 7, 2, 3, 4, 5);
void begin(cols, rows)
Инициализирует интерфейс индикатора. Задает размерность индикатора. Метод должен быть вызван первым, до использования других функций класса.
disp.begin(20, 4); // используем дисплей – 4 строки по 20 символов
void clear()
Очистка экрана, установка курсора в верхний левый угол.
disp.clear(); // сброс дисплея
void home()
Установка курсора в верхний левый угол.
disp.home(); // в начало экрана
void setCursor(col, row)
Устанавливает курсор в заданную позицию.
setCursor(0,1); // курсор в начало второй строки
byte write(data)
Выводит символ на экран. Возвращает количество переданных байтов.
Следующий скетч выводит на экран данные с последовательного порта. Данные можно передать монитором порта Arduino IDE.
У меня индикатор большой – 4 строки по 20 символов. В нем установлены два контроллера HD44780. Поэтому последовательно передаваемые символы заполняют сначала первую строку, затем третью, дальше вторую и четвертую. Т.е. через строку. Надо учитывать это свойство для определенных типов индикаторов. В документации на каждый LCD индикатор указывается последовательность адресации символов.
byte print(data)
Выводит на экран текст. Возвращает количество переданных байтов.
Функция имеет различные формы вызова для разных форматов и типов данных.
print(char d) | Если аргумент типа char выводит код символа char d= 83; |
print(int d) | Если аргумент – целый тип, то выводит строку с десятичным представлением числа int d= 83; |
print(float) | Вещественные типы выводятся символами ASCII, два знака после запятой float d= 7.65432; |
print(* str) | Если аргумент указатель на строку, то выводится текстовая строка. int d= 83; |
print(int d, HEX) | Выводит строку ASCII – шестнадцатиричное представление числа int d= 83; |
print(int d, OCT) | Выводит строку ASCII – восьмеричное представление числа int d= 83; |
print(int d, BIN) | Выводит строку ASCII – двоичное представление числа int d= 83; |
print(float d, N) | Для вещественных чисел параметр N задает количество цифр после запятой. disp.print(7.65432, 0); // выводит строку “7” |
Пример программы, печатающей на дисплее текстовую строку.
// вывод текстовой строки на LCD индикатор
#include
LiquidCrystal disp(6, 7, 2, 3, 4, 5); // создаем объект
void setup()
<
disp.begin(20, 4); // инициализируем дисплей 4 строки по 20 символов
disp.print(«Test string»);
>
void loop()
void cursor()
Включает режим отображения курсора. Позиция, куда будет выведен следующий символ, подчеркивается.
disp.cursor(); // разрешаем отображение курсора
void noCursor()
Запрещает отображение курсора.
disp.noCursor(); // запрещаем отображение курсора
void blink()
Включает режим мигающего курсора. Используется совместно с функцией cursor(). Результат зависит от конкретной модели индикатора.
disp.blink(); // разрешаем мигающий курсор
void noBlink()
Отключает режим мигающего курсора.
disp.noBlink(); // запрещаем мигающий курсор
void display()
Включает экран после того, как он был выключен функцией noDisplay(). На экране отобразится информация, которая была до выключения.
disp.display(); // включаем дисплей
void noDisplay()
Выключает экран. Информация сохраняется в памяти и появляется при включении дисплея.
disp.noDisplay(); // выключаем дисплей
void scrollDisplayLeft()
Прокручивает содержимое дисплея на один символ влево.
disp. scrollDisplayLeft(); // сдвигаем все влево
void scrollDisplayRight()
Прокручивает содержимое дисплея на один символ вправо.
disp. scrollDisplayRight(); // сдвигаем все вправо
void autoscroll()
Включение режима автоматической прокрутки текста. При выводе каждого символа, весь текст на экране будет сдвигаться на один символ. В какую сторону сдвигается информация определяют функции leftToRight() и rightToLeft().
disp. autoscroll()(); // включаем автопрокрутку
void noAutoscroll()
Выключение автоматической прокрутки текста.
disp. noAutoscroll()(); // запрещаем автопрокрутку
void leftToRight()
Задает режим вывода теста слева-направо. Новые символы будут появляться справа от предыдущих.
leftToRight(); // режим слева-направо
void rightToLeft()
Задает режим вывода теста справа-налево. Новые символы будут появляться слева от предыдущих.
rightToLeft(); // режим справа-налево
void createChar(num, data)
Метод для создания пользовательского символа. Контроллер допускает создание до 8 символов (0…7) размером 5×8 пикселей. Изображение символа задается массивом размерностью 8 байт. 5 младших битов каждого байта определяют состояние пикселей строки.
Для вывода пользовательского символа можно использовать функцию write() с номером символа.
// создание пользовательского символа
#include
LiquidCrystal disp(6, 7, 2, 3, 4, 5); // создаем объект
byte smile[8] = <
B00000000,
B00010001,
B00000000,
B00000000,
B00010001,
B00001110,
B00000000,
B00000000
>;
void setup()
<
disp.createChar(0, smile); // создаем символ
disp.begin(20, 4); // инициализируем дисплей 4 строки по 20 символов
disp.print(«Smile «);
disp.write(byte(0)); // выводим символ
>
void loop()
На форуме сайта есть программа для создания кодов символов.
Отображение кириллицы.
Большинство LCD дисплеев на российском рынке поддерживают кириллические символы, но коды этих символов не соответствуют ASCII стандарту. Поэтому выводится полная белиберда.
Первый выход – задавать символы их правильными кодами в явном виде. Коды можно посмотреть в документации на контроллер HD44780.
Например коды символов:
Вот программа, которая выводит кириллические символы “АБВГ” таким способом.
// вывод кириллицы кодами символов
#include
LiquidCrystal disp(6, 7, 2, 3, 4, 5); // создаем объект
void setup()
<
disp.begin(20, 4); // инициализируем дисплей 4 строки по 20 символов
disp.print(«\x41\xa0\x42\xa1»);
>
void loop()
Не очень удобно, но если символов немного, то вполне приемлемо. Есть программы, которые переводят кириллический текст в коды.
Библиотека с поддержкой кириллицы LiquidCrystalRus.
Практичный вариант для вывода текста на русском языке – использовать библиотеку LiquidCrystalRus. Загрузить ее можно по этой ссылке LiquidCrystalRus-1.6.0.zip.
Вот пример программы, выводящей на экран русский алфавит.
// вывод русского алфавита
#include
LiquidCrystalRus disp(6, 7, 2, 3, 4, 5); // создаем объект
void setup()
<
disp.begin(20, 4); // инициализируем дисплей 4 строки по 20 символов
disp.print(«абвгдеёжзийклмнопрст»);
disp.print(«АБВГДЕЁЖЗИЙКЛМНОПРСТ»);
disp.print(«уфхцчшщьыьэюя «);
disp.print(«УФХЦЧШЩЫЬЭЮЯ «);
>
void loop()
В моем индикаторе два контроллера HD44780. Поэтому отображение через строку и мне пришлось в программе нарушить последовательность вывода строк.
Как видите, работать с символьными LCD дисплеями намного проще, чем кажется.