Как работать с дисплеем на ардуино
Перейти к содержимому

Как работать с дисплеем на ардуино

  • автор:

Дисплей 1602 с русскими буквами

Жидкокристаллический дисплей 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 lcd(4, 5, 6, 7, 8, 9, CP_UTF8); byte idx = 0; void setup() < lcd.begin( 16, 2 ); >void loop()

Единственной отличие от обычной библиотеки LiquidCrystal наблюдается в строке инициализации:

RobotClass_LiquidCrystal lcd(4, 5, 6, 7, 8, 9, CP_UTF8);

Последний аргумент CP_UTF8 означает, что мы передаём в функцию print текст в кодировке UTF-8. Это стандартная кодировка для Arduino IDE. Однако, если пользователь изменил кодировку среды на cp1251, то следует заменить этот аргумент на CP_CP1251. Такие дела.

Остался ещё один момент, который может препятствовать нашей радости от работающего дисплея. После загрузки программы на Arduino необходимо настроить контрастность. Для этого покрутим ручку потенциометра до тех пор, пока изображение на дисплее не станет чётким.

Дисплей 1602 с русским языком

К размышлению

На практике, часто бывает удобно пользоваться дисплеем 1602 в паре с I2C преобразователем. Это позволяет подключать модуль к шине I2C и экономить четыре GPIO контакта на контроллере. Для работы с таким дисплеем потребуется другая библиотека, как правило это LiquidCrystal_I2C.

Соответственно, для модуля 1602 с поддержкой кириллицы необходима модификация этой библиотеки. И мы в RobotClass тоже её сделали (русифицированный дисплей 1602 с I2C).

Ардуино: вывод текста на ЖК дисплей 1602

Все давно привыкли, что у каждого электронного устройства есть экран, с помощью которого оно дает человеку всякую полезную информацию. MP3-плеер показывает название играемого трека, пульт квадрокоптера отображает полетную телеметрию, даже стиральная машина выводит на дисплей время до конца стирки, а на смартфоне вообще размещается целый рабочий стол персонального компьютера!

Скорее всего, вашему очередному устройству тоже не помешает какой-нибудь небольшой дисплейчик �� Попробуем сделать простые электронные часы! А в качестве табло используем распространенный и дешевый символьный жидкокристаллический дисплей 1602. Вот прямо такой, как на картинке:

ЖК дисплей и DHT11 на Ардуино

Кроме 16х2, достаточно популярным считается символьный дисплей 20х4 (четыре строки по 20 символов), а также графический дисплей с разрешением 128х64 точек. Вот они на картинках:

AMC2004A-B-Y6WFDY_arduino_10

CFAG12864BYYH

Список необходимых компонентов

Для выполнения простого примера с дисплеем 1602, кроме самого модуля дисплея, потребуется Ардуино-совместимый контроллер, макетная плата, переменный резистор и немного проводов вилка-вилка. Необходимые компоненты можно добавить в корзину прямо здесь, и затем оформить заказ в нашем интернет-магазине.

Подключение символьного ЖК дисплея 1602

У дисплея 1602 есть 16 выводов. Обычно они нумеруются слева-направо, если смотреть на него так как на картинке. Иногда выводы подписываются, типа: DB0, DB1, EN и т.п. А иногда просто указывают номер вывода. В любом случае, список выводов всегда одинаковый:

1 — «GND», земля (минус питания);
2 — «Vcc»,­ питание +5В;
3 — «VEE», контраст;
4 — «RS», выбор регистра;
5 — «R/W», направление передачи данных (запись/чтение);
6 — «EN», синхронизация;
7-14 — «DB0­», «DB1», . «DB7″­- шина данных;
15 — анод подсветки (+5В);
16 — катод подсветки (земля).

Линии VEE, RS и четыре линии данных DB4, DB5, DB6, DB7 подключаем к цифровым выводам контроллера. Линию «R/W» подключим к «земле» контроллера (так как нам потребуется только функция записи в память дисплея). Подсветку пока подключать не будем, с этим, я полагаю, вы сами легко разберетесь ��

Принципиальная схема подключения дисплея к Ардуино Уно

lcdx1&potx1_схема

Внешний вид макета

lcdx1_bb

На всякий случай еще и в виде таблички:

ЖК дисплей 1602 1 2 4 6 11 12 13 14 15 16
Ардуино Уно GND +5V 4 5 6 7 8 9 +5V GND

Программируем «Hello, world!»

Для работы с ЖК дисплеями различных размеров и типов, в редакторе Arduino IDE имеется специальная библиотека LiquidCrystal. Чтобы подключить библиотеку, запишем первой строчкой нашей программы следующее выражение:

#include

Далее, нам потребуется указать какие выводы Ардуино мы использовали для подключения дисплея. Эту информацию мы укажем при инициализации модуля:

LiquidCrystal lcd(4, 5, 6, 7, 8, 9);

Здесь первые два аргумента — это выводы RS и EN, а оставшиеся четыре — линии шины данных DB4-DB7.

Далее, укажем размер дисплея с помощью команды «begin»:

lcd.begin(16, 2);

Напоминаю, в нашем дисплее имеется две строки, по 16 символов в каждой.

Наконец, для вывода текста нам понадобится простая функция «print». Вывод с помощью этой функции всем известной фразы будет выглядеть следующим образом:

lcd.print( "Hello, world!" );

Полностью программа будет выглядеть так:

#include LiquidCrystal lcd(4, 5, 6, 7, 8, 9); void setup() < lcd.begin(16, 2); lcd.print( "Hello, world!" ); >void loop()

Загружаем её на Ардуино Уно, и смотрим что творится на дисплее. Может быть три основных ситуации ��

1) На дисплее отобразится надпись «Hello, world!». Значит вы все правильно подключили, и контраст каким-то чудесным образом оказался изначально правильно настроен. Радуемся, и переходим к следующей главе.

2) На дисплее отобразится целый ряд черных прямоугольников — требуется настройка контраста! Именно для этого мы добавили в цепь потенциометр с ручкой. Крутим его от одного края, до другого, до момента пока на дисплее не появится четкая надпись.

3) Два ряда черных прямоугольников. Скорее всего, вы что-то напутали при подключении. Проверьте трижды все провода. Если не найдете ошибку — попросите кота проверить!

Программируем часы

Теперь когда дисплей точно работает, попробуем превратить наше нехитрое устройство в настоящие электронные часы.

Внимание! Для вывода времени нам потребуется библиотека «Time». Если она еще не установлена, то можно скачать архив по ссылке. Подключим ее:

#include

Затем установим текущие дату и время с помощью функции «setTime»:

setTime( 23, 59, 59, 12, 31, 2015 );

Здесь все понятно: часы, минуты, секунды, месяц, число, год.

Для вывода даты используем кучу функции:

  • year() — вернет нам год;
  • month()­ — месяц;
  • day() ­- день;
  • hour() ­- час;
  • minute() — вернет минуту;
  • second() -­ секунду.

Теперь обратим внимание вот на какой факт. Если посчитать количество символов в типовой записи даты: «31.12.2015 23:59:59», получим 19. А у нас всего 16! Не влазит, однако, в одну строчку.

Решить проблему можно еще одной полезной функцией — «setCursor». Эта функция устанавливает курсор в нужную позицию. Например:

lcd.setCursor(0,1);

Установит курсор в начало второй строчки. Курсор — это место символа, с которого начнется вывод текста следующей командой «print». Воспользуемся этой функцией для вывода даты в первой строчке, а времени во второй.

С выводом даты и времени теперь все ясно. Остались рутинные вещи. Например, после каждого заполнения дисплея, мы будем его чистить функцией «clear()»:

lcd.clear();

А еще нам нет смысла выводить данные на дисплей чаще чем раз в секунду, поэтому между двумя итерациями сделаем паузу в 1000 миллисекунд.

Итак, сложив все вместе, получим такую программу:

#include #include LiquidCrystal lcd(4, 5, 6, 7, 8, 9); void setup() < lcd.begin(16, 2); setTime(7,0,0,1,10,2015); // 7 утра, десятого января 2015 года >void loop()

Загружаем скетч на Ардуино Уно, и наблюдаем за ходом часиков! �� Для того чтобы закрепить полученные знания, рекомендую прокачать наши часы до полноценного будильника. Всего-то на всего потребуется добавить пару кнопок и зуммер ��

Изменено: 31 Дек, 2014 02:21

Ардуино: вывод текста на ЖК дисплей 1602 : Один комментарий

Максим говорит 08.06.2015 в 20:30 :

Но ведь, код часов не верный. Пишет ошибку в строке:
setTime(7,0,0,1,10,2015); sketch_jun08a:4: error: stray ‘\’ in programs

Текстовый экран 16×2: инструкция, примеры использования и документация

В качестве примера подключим дисплей к управляющей плате Arduino Uno.

Подключение к Arduino

Для упрощения работы с LCD-дисплеем используйте встроенную библиотеку Liquid Crystal. В ней вы найдёте примеры кода с подробными комментариями.

Вывод текста

Для вывода первой программы приветствия, воспользуйтесь кодом вроде этого:

// Библиотека для работы с текстовым дисплеем #include // Задаём имя пинов дисплея constexpr uint8_t PIN_RS = 6; constexpr uint8_t PIN_EN = 7; constexpr uint8_t PIN_DB4 = 8; constexpr uint8_t PIN_DB5 = 9; constexpr uint8_t PIN_DB6 = 10; constexpr uint8_t PIN_DB7 = 11; /* * Создаём объект для работы с текстовым дисплеем * LiquidCrystal lcd(RS, EN, DB4, DB5, DB6, DB7); * Подробности подключения: * http://wiki.amperka.ru/products:display-lcd-text-16x2 */ LiquidCrystal lcd(PIN_RS, PIN_EN, PIN_DB4, PIN_DB5, PIN_DB6, PIN_DB7); void setup() { // Устанавливаем размер экрана // Количество столбцов и строк lcd.begin(16, 2); // Устанавливаем курсор в колонку 0 и строку 0 lcd.setCursor(0, 0); // Печатаем первую строку lcd.print("Hello, world!"); // Устанавливаем курсор в колонку 0 и строку 1 lcd.setCursor(0, 1); // Печатаем вторую строку lcd.print("Do It Yourself"); } void loop() { }

Вывод текста: кириллица

Существует два способа вывода кириллицы на текстовые дисплеи:

Рассмотрим оба способа более подробно.

Таблица знакогенератора

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

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

Так букве Я соответствует код B1 в шестнадцатеричной системе. Чтобы передать на экран строку «Яndex», необходимо в явном виде с помощью последовательности \x## встроить в строку код символа:

lcd.print("\xB1ndex");

Вы можете смешивать в одной строке обычные символы и явные коды как угодно. Единственный нюанс в том, что после того, как компилятор в строке видит последовательность \x , он считывает за ним все символы, которые могут являться разрядами шестнадцатеричной системы даже если их больше двух. Из-за этого нельзя использовать символы из диапазона 0-9 и A-F следом за двузначным кодом символа, иначе на дисплее отобразится неправильная информация. Чтобы обойти этот момент, можно использовать тот факт, что две записанные рядом строки склеиваются.

Сравните две строки кода для вывода надписи «Яeee»:

lcd.print("\xB1eee"); // ошибка lcd.print("\xB1""eee"); // правильно

Используя полученную информацию выведем на дисплей сообщение «Привет, Амперка!»:

// Библиотека для работы с текстовым дисплеем #include // Задаём имя пинов дисплея constexpr uint8_t PIN_RS = 6; constexpr uint8_t PIN_EN = 7; constexpr uint8_t PIN_DB4 = 8; constexpr uint8_t PIN_DB5 = 9; constexpr uint8_t PIN_DB6 = 10; constexpr uint8_t PIN_DB7 = 11; /* * Создаём объект для работы с текстовым дисплеем * LiquidCrystal lcd(RS, EN, DB4, DB5, DB6, DB7); * Подробности подключения: * http://wiki.amperka.ru/products:display-lcd-text-16x2 */ LiquidCrystal lcd(PIN_RS, PIN_EN, PIN_DB4, PIN_DB5, PIN_DB6, PIN_DB7); void setup() { // Устанавливаем размер экрана // Количество столбцов и строк lcd.begin(16, 2); // Устанавливаем курсор в колонку 5 и строку 0 lcd.setCursor(5, 0); // Печатаем первую строку lcd.print("\xA8""p""\xB8\xB3""e\xBF"); // Устанавливаем курсор в колонку 3 и строку 1 lcd.setCursor(3, 1); // Печатаем вторую строку lcd.print("o\xBF A\xBC\xBE""ep\xBA\xB8"); } void loop() { }

Переключение страниц знакогенератора

Дисплейный модуль хранит в памяти две страницы знакогенератора. По умолчанию установлена нулевая страница. Для переключения между страницами используйте методы:

// переключение с нулевой страницы на первую command(0x101010); // переключение с первой страницы на нулевую command(0x101000);

Дисплей не может одновременно отображать символы разных страниц.

Рассмотрим пример, в котором одна и та же строка будет отображаться по-разному — в зависимости от выбранной страницы.

// Библиотека для работы с текстовым дисплеем #include // Задаём имя пинов дисплея constexpr uint8_t PIN_RS = 6; constexpr uint8_t PIN_EN = 7; constexpr uint8_t PIN_DB4 = 8; constexpr uint8_t PIN_DB5 = 9; constexpr uint8_t PIN_DB6 = 10; constexpr uint8_t PIN_DB7 = 11; /* * Создаём объект для работы с текстовым дисплеем * LiquidCrystal lcd(RS, EN, DB4, DB5, DB6, DB7); * Подробности подключения: * http://wiki.amperka.ru/products:display-lcd-text-16x2 */ LiquidCrystal lcd(PIN_RS, PIN_EN, PIN_DB4, PIN_DB5, PIN_DB6, PIN_DB7); void setup() { // Устанавливаем размер экрана // Количество столбцов и строк lcd.begin(16, 2); // Устанавливаем курсор в колонку 5 и строку 0 lcd.setCursor(5, 0); // Печатаем строку lcd.print("\x9b\x9c\x9d\x9e\x9f"); } void loop() { // Устанавливаем нулевую станицу знакогенератора (стоит по умолчанию) lcd.command(0b101000); // Ждём 1 секунду delay(1000); // Устанавливаем первую станицу знакогенератора lcd.command(0b101010); // Ждём 1 секунду delay(1000); }

Полную таблицу символов с кодами можно найти в документации к экрану.

Использование библиотеки LiquidCrystalRus

Совсем не обязательно мучатся со знакогенератором, чтобы вывести русский символ. Для решения проблемы скачайте и установите библиотеку LiquidCrystalRus.

Это копия оригинальной библиотеки LiquidCrystal с добавлением русского языка. Добавленный в библиотеку код трансформирует русские символы UTF8 в правильные коды для текстового экрана.

В качестве примера выведем фразу «Привет от Амперки» на дисплей.

// Библиотека для работы с текстовым дисплеем #include // Задаём имя пинов дисплея constexpr uint8_t PIN_RS = 6; constexpr uint8_t PIN_EN = 7; constexpr uint8_t PIN_DB4 = 8; constexpr uint8_t PIN_DB5 = 9; constexpr uint8_t PIN_DB6 = 10; constexpr uint8_t PIN_DB7 = 11; /* * Создаём объект для работы с текстовым дисплеем * LiquidCrystalRus lcd(RS, EN, DB4, DB5, DB6, DB7); * Подробности подключения: * http://wiki.amperka.ru/products:display-lcd-text-16x2 */ LiquidCrystalRus lcd(PIN_RS, PIN_EN, PIN_DB4, PIN_DB5, PIN_DB6, PIN_DB7); void setup() { // Устанавливаем размер экрана // Количество столбцов и строк lcd.begin(16, 2); // Устанавливаем курсор в колонку 5 и строку 0 lcd.setCursor(5, 0); // Печатаем первую строку lcd.print("Привет"); // Устанавливаем курсор в колонку 3 и строку 1 lcd.setCursor(3, 1); // Печатаем вторую строку lcd.print("от Амперки"); } void loop() { }

Примеры работы для Espruino

В качестве примера подключим дисплей к управляющей плате Iskra JS.

Текстовый экран 8×2: инструкция по подключению и примеры использования

В качестве примера подключим дисплей к управляющей плате Arduino Uno.

Подключение к Arduino

Вывод Обозначение Пин Arduino Uno
1 GND GND
2 VCC 5V
3 VO GND
4 RS 12
5 R/W GND
6 E 11
7 DB0
8 DB1
9 DB2
10 DB3
11 DB4 5
12 DB5 4
13 DB6 3
14 DB7 2

Для упрощения работы с LCD-дисплеем используйте встроенную библиотеку Liquid Crystal. В ней вы найдёте примеры кода с подробными комментариями.

Вывод текста

Для вывода первой программы приветствия, воспользуйтесь кодом вроде этого:

// подключаем стандартную библиотеку LiquidCrystal #include // инициализируем объект-экран, передаём использованные // для подключения контакты на Arduino в порядке: // RS, E, DB4, DB5, DB6, DB7 LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { // устанавливаем размер (количество столбцов и строк) экрана lcd.begin(8, 2); // печатаем первую строку lcd.print("Hello,"); // устанавливаем курсор в колонку 0, строку 1 // на самом деле это вторая строка, т.к. нумерация начинается с нуля lcd.setCursor(0, 1); // печатаем вторую строку lcd.print("Amperka!"); } void loop() { }

Кирилица

Существует два способа вывода кирилицы на текстовые дисплеи:

Рассмотрим оба способа более подробно.

Таблица знакогенератора

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

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

Так букве Я соответствует код B1 в шестнадцатеричной системе. Чтобы передать на экран строку «Яndex», необходимо в явном виде с помощью последовательности \x## встроить в строку код символа:

lcd.print("\xB1ndex");

Вы можете смешивать в одной строке обычные символы и явные коды как угодно. Единственный нюанс в том, что после того, как компилятор в строке видит последовательность \x , он считывает за ним все символы, которые могут являться разрядами шестнадцатеричной системы даже если их больше двух. Из-за этого нельзя использовать символы из диапазона 0-9 и A-F следом за двузначным кодом символа, иначе на дисплее отобразится неправильная информация. Чтобы обойти этот момент, можно использовать тот факт, что две строки записанные рядом склеиваются.

Сравните две строки кода для вывода надписи «Яeee»:

lcd.print("\xB1eee"); // ошибка lcd.print("\xB1""eee"); // правильно

Используя полученную информацию выведем на дисплей сообщение «Привет, Амперка!»:

// подключаем стандартную библиотеку LiquidCrystal #include // инициализируем объект-экран, передаём использованные // для подключения контакты на Arduino в порядке: // RS, E, DB4, DB5, DB6, DB7 LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { // устанавливаем размер (количество столбцов и строк) экрана lcd.begin(8, 2); // печатаем первую строку lcd.print("\xA8""p""\xB8\xB3""e\xBF,"); // устанавливаем курсор в колонку 0, строку 1 // на самом деле это вторая строка, т.к. нумерация начинается с нуля lcd.setCursor(0, 1); // печатаем вторую строку lcd.print("A\xBC\xBE""ep\xBA""a!"); } void loop() { }

Переключение страниц знакогенератора

Дисплейный модуль хранит в памяти две страницы знакогенератора. По умолчанию установлена нулевая страница. Для переключения между страницами используйте методы:

// переключение с нулевой страницы на первую command(0x101010); // переключение с первой страницы на нулевую command(0x101000);

Дисплей не может одновременно отображать символы разных страниц.

Рассмотрим пример, в котором одна и та же строка будет отображаться по-разному — в зависимости от выбранной страницы.

// Подключаем стандартную библиотеку LiquidCrystal #include // Инициализируем объект-экран, передаём использованные // для подключения контакты на Arduino в порядке: // RS, E, DB4, DB5, DB6, DB7 LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { // устанавливаем размер (количество столбцов и строк) экрана lcd.begin(8, 2); // печатаем первую строку lcd.print("\x9b\x9c\x9d\x9e\x9f"); } void loop() { // устанавливаем 0 станицу знакогенератора (стоит по умолчанию) lcd.command(0b101000); // ждём 1 секунду delay(1000); // устанавливаем 1 станицу знакогенератора lcd.command(0b101010); // ждём 1 секунду delay(1000); }

Полную таблицу символов с кодами можно найти в документации к экрану.

Использование библиотеки LiquidCrystalRus

Совсем не обязательно мучатся со знакогенератором, чтобы вывести русский символ. Для решения проблемы скачайте и установите библиотеку LiquidCrystalRus.

Это копия оригинальной библиотеки LiquidCrystal с добавлением русского языка. Добавленный в библиотеку код трансформирует русские символы UTF8 в правильные коды для текстового экрана.

В качестве примера выведем фразу «Привет, Амперка» на дисплей.

// подключаем библиотеку LiquidCrystalRus #include // инициализируем объект-экран, передаём использованные // для подключения контакты на Arduino в порядке: // RS, E, DB4, DB5, DB6, DB7 LiquidCrystalRus lcd(12, 11, 5, 4, 3, 2); void setup() { // устанавливаем размер (количество столбцов и строк) экрана lcd.begin(8, 2); // печатаем первую строку lcd.print("Привет,"); // устанавливаем курсор в колонку 0, строку 1 // на самом деле это вторая строка, т.к. нумерация начинается с нуля lcd.setCursor(0, 1); // печатаем вторую строку lcd.print("Амперка!"); } void loop() { }

Примеры работы для Espruino

В качестве примера подключим дисплей к управляющей плате Iskra JS.

Подключение к Iskra JS

Вывод Обозначение Пин Iskra JS
1 GND GND
2 VCC 5V
3 VO GND
4 RS P12
5 R/W GND
6 E P11
7 DB0
8 DB1
9 DB2
10 DB3
11 DB4 P5
12 DB5 P4
13 DB6 P3
14 DB7 P2

Для работы с LCD-дисплеем из среды Espruino существует библиотека HD44780.

Вывод текста

Для вывода программы приветствия, воспользуйтесь скриптом:

// создаём переменную для работы с дисплеем // HD44780 — контроллер монохромных жидкокристаллических знакосинтезирующих дисплеев var lcd = require("HD44780").connect(P12,P11,P5,P4,P3,P2); // печатем первую строку lcd.print("Hello,"); // устанавливаем курсор в колонку 0, строку 1 // на самом деле это вторая строка, т.к. нумерация начинается с нуля lcd.setCursor(0, 1); // печатаем вторую строку lcd.print("Amperka!");

Кирилица

Вывод кирилицы на дисплей с помощью платформы Iskra JS доступен через встроенную в дисплей таблицу знакогенератора.

Таблица знакогенератора

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

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

Так букве Я соответствует код B1 в шестнадцатеричной системе. Чтобы передать на экран строку «Яndex», необходимо в явном виде с помощью последовательности \x## встроить в строку код символа:

lcd.print("\xB1ndex");

Вы можете смешивать в одной строке обычные символы и явные коды как угодно. Единственный нюанс в том, что после того, как компилятор в строке видит последовательность \x , он считывает за ним все символы, которые могут являться разрядами шестнадцатеричной системы даже если их больше двух. Из-за этого нельзя использовать символы из диапазона 0–9 и A–F следом за двузначным кодом символа, иначе на дисплее отобразится неправильная информация. Чтобы обойти этот момент, можно использовать тот факт, что две строки записанные рядом склеиваются.

Сравните две строки кода для вывода надписи «Яeee»:

lcd.print("\xB1eee"); // ошибка lcd.print("\xB1"+"eee"); // правильно

Используя полученную информацию выведем на дисплей сообщение «Привет, Амперка!»:

// создаём переменную для работы с дисплеем // HD44780 — контроллер монохромных жидкокристаллических знакосинтезирующих дисплеев var lcd = require("HD44780").connect(P12,P11,P5,P4,P3,P2); // печатем первую строку lcd.print("\xA8"+"p"+"\xB8\xB3"+"e\xBF,"); // устанавливаем курсор в колонку 0, строку 1 // на самом деле это вторая строка, т.к. нумерация начинается с нуля lcd.setCursor(0, 1); // печатаем вторую строку lcd.print("A\xBC\xBE"+"ep\xBA"+"a!");

Переключение страниц знакогенератора

Дисплейный модуль хранит в памяти две страницы знакогенератора. По умолчанию установлена нулевая страница. Для переключения между страницами используйте методы:

// переключение с нулевой страницы на первую command(0x101010); // переключение с первой страницы на нулевую command(0x101000);

Дисплей не может одновременно отображать символы разных страниц.

Рассмотрим пример, в котором одна и та же строка будет отображаться по-разному — в зависимости от выбранной страницы.

// создаём переменную для работы с дисплеем // HD44780 — контроллер монохромных жидкокристаллических знакосинтезирующих дисплеев var lcd = require("HD44780").connect(P12,P11,P5,P4,P3,P2); // создаём переменную состояния var state = false; // печатаем первую строку lcd.print("\x9b\x9c\x9d\x9e\x9f"); setInterval(function() { // каждую секунду меняем переменую состояния state = !state; // вызываем функцию смены адреса страницы lcdChangePage(); }, 1000); function lcdChangePage () { if (state) { // устанавливаем 0 станицу знакогенератора (стоит по умолчанию) lcd.write(0b101000, 1); } else { // устанавливаем 1 станицу знакогенератора lcd.write(0b101010, 1); } }

Полную таблицу символов с кодами можно найти в документации к экрану.

Комнатный термометр

Дисплей удобен для отображения показаний модулей и сенсоров. Сделаем задатки «Умного Дома», а именно «комнатный термометр».

Что понадобится

Управляющая платформа Arduino Uno или Iskra JS

Как собрать

Возьмите Troyka Shield и установите сверху на управляющую плату — Arduino или Iskra JS.
Подключите текстовый экран к управляющей платформе, используя схему подключения дисплея

Подключите аналоговый термометр к управляющей плате через трёхроводной шлейф к аналоговому пину A0 .

Прошейте управляющую платформу кодом, приведённым ниже.

Скетч для Arduino

// подключаем стандартную библиотеку LiquidCrystal #include // инициализируем объект-экран, передаём использованные // для подключения контакты на Arduino в порядке: // RS, E, DB4, DB5, DB6, DB7 LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // пин датчика температуры #define TEMPERATURE_PIN A0 void setup() { // устанавливаем размер (количество столбцов и строк) экрана lcd.begin(8, 2); } void loop() { // очищаем дисплей lcd.clear(); // устанавливаем курсор в колонку 1, строку 0 // на самом деле это вторая строка, т.к. нумерация начинается с нуля lcd.setCursor(1, 0); // считываем показания с датчика температуры int sensorADC = analogRead(A0); // переводим значения с АЦП в вольты float sensorVoltage = sensorADC * (5.0 / 1023.0); // переводим вольты в градусы цельсия int temperature = (sensorVoltage - 0.5) * 100; // выводим результат на дисплей lcd.print("t="); lcd.print(temperature); lcd.print("\x99""C"); delay(500); }

Скрипт для Iskra JS

// создаём переменную для работы с дисплеем // HD44780 — контроллер монохромных жидкокристаллических знакосинтезирующих дисплеев var lcd = require("HD44780").connect(P12,P11,P5,P4,P3,P2); // создаём переменную для работы с датчиком температуры var thermometer = require('@amperka/thermometer') .connect(A0); // каждую секунду считываем данные с датчика температуры и выводим на дисплей setInterval(function() { var celsius = thermometer.read('C'); lcd.setCursor(1, 0); lcd.print("t="+ celsius.toFixed(0) + "\x99"+"C"); }, 1000);

Элементы платы

Дисплей

Дисплей MT-08S2A умеет отображать все строчные и прописные буквы латиницы и кириллицы, а также типографские символы. Для любителей экзотики есть возможность создавать собственные иконки.

Экран выполнен на жидкокристаллической матрице, которая отображает 2 строки по 8 символов. Каждый символ состоит из отдельного знакоместа 5×8 пикселей.

Контроллер дисплея

Матрица индикатора подключена к встроенному чипу КБ1013ВГ6, который выполняет роль посредника между экраном и микроконтроллером.

Контроллер КБ1013ВГ6 аналогичен популярным чипам зарубежных производителей HD44780 и KS0066, что означает совместимость со всеми программными библиотеками.

Контакты подключения

На плате дисплея выведено 14 контактов для подведения питания и взаимодействия с управляющей электроникой.

Вывод Обозначение Описание
1 GND Общий вывод (земля)
2 VCC Напряжение питания (5 В)
3 VO Управление контрастностью
4 RS Выбор регистра
5 R/W Выбор режима записи или чтения
6 E Разрешение обращений к индикатору (а также строб данных)
7 DB0 Шина данных (8-ми битный режим)(младший бит в 8-ми битном режиме)
8 DB1 Шина данных (8-ми битный режим)
9 DB2 Шина данных (8-ми битный режим)
10 DB3 Шина данных (8-ми битный режим)
11 DB4 Шина данных (8-ми и 4-х битные режимы)(младший бит в 4-х битном режиме)
12 DB5 Шина данных (8-ми и 4-х битные режимы)
13 DB6 Шина данных (8-ми и 4-х битные режимы)
14 DB7 Шина данных (8-ми и 4-х битные режимы)

Дисплей может работать в двух режимах:

8-битный режим — в нём используются и младшие и старшие биты ( DB0 — DB7 )
4-битный режим — в нём используются только младшие биты ( DB4 — DB7 )

Использовать восьмибитный режим не целесообразно. Для его работы требуется на четыре дополнительные ноги, а выигрыша по скорости практически нет.

Включение подсветки

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

Установить перемычку на элемент J2 на плате, что обеспечит подачу питания на анод подсветки через резистор.

Установить перемычку на элемент J3 на плате, что обеспечит подачу земли на катод подсветки.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *