Жидкокристаллический дисплей 1602 — один из самых распространённых символьных дисплеев в среде DIY электроники. Собственно, для большинства самоделок возможностей данного дисплея сполна хватает.
Число 1602 в его маркировке модуля означает, что на экране могут быть отображены две строки по 16 символов в каждой. И именно символов, поэтому данный дисплей и называется символьным. У 1602 имеется чуть менее популярный старший брат 2004, который может отобразить четыре строки по 20 символов. А вообще, промышленность выпускает подобные модули с любым количеством строк и символов.
Большинство продаваемых в Китае дисплеев 1602 и 2004 не подходят для работы с русским текстом. То есть написать на нём «Привет!» не выйдет. Конечно, есть способы как частично обойти отсутствие русских букв во внутренней памяти дисплея, но полного алфавита они не дают.
На этом уроке мы разберёмся с русифицированной версией дисплея 1602A! Подключим его к Arduino и напишем программу для вывода всех букв русского алфавита с использованием специальной библиотеки.
Список необходимых компонентов
Для выполнения простого примера с модулем 1602A, кроме самого дисплея, потребуется Ардуино-совместимый контроллер, макетная плата, потенциометр и немного проводов. Если вам не хватает чего-то из этого, можно добавить необходимые компоненты в корзину прямо здесь и затем оформить заказ в нашем интернет-магазине.
Подключение
У дисплея 1602 есть 16 контактов. Обычно, они нумеруются слева-направо, если смотреть на него так, как на картинке. Иногда, контакты подписываются так: DB0, DB1, EN и т.п. Но в большинстве случаев отмечается первый контакт и 16-й.
Порядок контактов и их назначение может меняться в зависимости от модели дисплея. Для варианта, который мы изучаем в этом уроке, порядок будет такой:
1 — VSS, земля (минус питания);
2 — VDD, питание +5В;
3 — VO, контраст;
4 — RS, выбор регистра;
5 — RW, направление передачи данных (запись/чтение);
6 — E, синхронизация;
7-14 — DB0, DB1, .., DB7— шина данных;
15 — A, анод светодиода подсветки;
16 — K, катод светодиода подсветки.
Контакты RS, E и четыре контакта шины данных DB4, DB5, DB6, DB7 подключаем к цифровым выводам контроллера. Контакт RW подключим к «земле» контроллера (так как нам потребуется только функция записи в память дисплея).
Контакту VO уделим особое внимание. Уровень напряжения на этом контакте задаёт контрастность дисплея. Если контрастность будет слишком низкая — весь экран будет белым и мы не увидим ни одного символа. При максимальной контрастности экран будет, напротив, целиком закрашен черными пикселями, и опять мы не сможем на нём ничего разглядеть.
Подключим к VO обычный потенциометр, и уже после написания программы для контроллера и после подачи питания на собранный стенд, выставим требуемую контрастность.
Принципиальная схема подключения к Arduino
Таблица подключения к Arduino
ЖК дисплей 1602 | 1 | 2 | 4 | 6 | 11 | 12 | 13 | 14 | 15 | 16 |
Ардуино Уно | GND | +5V | D4 | D5 | D6 | D7 | D8 | D9 | +5V | GND |
Программа
В каждом подобном дисплее имеется немного встроенной постоянной памяти, в которой хранятся образы всех доступных символов. Именно из-за этой таблицы символов и возникает проблема с выводом кириллицы на большинстве нелокализованных дисплеев (купленных на Aliexpress или ещё где-то). То есть, символов кириллицы там просто нет.
Но мы будем работать с модулем 1602, в котором есть полноценная локализованная таблица. Только вот она совсем не стандартная. Не получится просто написать текст в кодировке cp1251 и отправить его на дисплей. Потребуется определённым образом перетасовать символы. К тому же, некоторые русские буквы можно взять из латинской части таблицы ASCII, чем пользуются производители дисплеев для экономии памяти.
Для работы с русифицированными дисплеями, которые продаются в нашем интернет-магазине, мы разработали вспомогательную библиотеку RobotClass_LiquidCrystal. Она сама делает все необходимые манипуляции с таблицей символов. Пользоваться ей так же просто, как и стандартной LiquidCrystal.
Напишем программу, которая будет сначала выводить заглавными и прописными буквами первую половину алфавита, а спустя секунду, вторую половину.
#include <RobotClass_LiquidCrystal.h>
RobotClass_LiquidCrystal lcd(4, 5, 6, 7, 8, 9, CP_UTF8);
byte idx = 0;
void setup() {
lcd.begin( 16, 2 );
}
void loop() {
lcd.setCursor(0,0);
lcd.print( "АБВГДЕЁЖЗИКЛМНОП" );
lcd.setCursor(0,1);
lcd.print( "абвгдеёжзиклмноп" );
delay(1000);
lcd.setCursor(0,0);
lcd.print( "РСТУФХЦЧШЩЪЫЬЭЮЯ" );
lcd.setCursor(0,1);
lcd.print( "рстуфхцчшщъыьэюя" );
delay(1000);
}
Единственной отличие от обычной библиотеки LiquidCrystal наблюдается в строке инициализации:
RobotClass_LiquidCrystal lcd(4, 5, 6, 7, 8, 9, CP_UTF8);
Последний аргумент CP_UTF8 означает, что мы передаём в функцию print текст в кодировке UTF-8. Это стандартная кодировка для Arduino IDE. Однако, если пользователь изменил кодировку среды на cp1251, то следует заменить этот аргумент на CP_CP1251. Такие дела.
Остался ещё один момент, который может препятствовать нашей радости от работающего дисплея. После загрузки программы на Arduino необходимо настроить контрастность. Для этого покрутим ручку потенциометра до тех пор, пока изображение на дисплее не станет чётким.
К размышлению
На практике, часто бывает удобно пользоваться дисплеем 1602 в паре с I2C преобразователем. Это позволяет подключать модуль к шине I2C и экономить четыре GPIO контакта на контроллере. Для работы с таким дисплеем потребуется другая библиотека, как правило это LiquidCrystal_I2C.
Соответственно, для модуля 1602 с поддержкой кириллицы необходима модификация этой библиотеки. И мы в RobotClass тоже её сделали (русифицированный дисплей 1602 с I2C).
экран светится но не выдает буквы цифры и тд
Попробуйте покрутить потенциометр контрастности.