Текстовый экран 20×4 пригодится для вывода показаний датчиков, отображения простых меню, подсказок и приветствий.
В качестве примера подключим дисплей к управляющей плате Arduino Uno.
Для коммуникации понадобится Breadboard Half и соединительные провода «папа-папа».
Вывод | Обозначение | Пин 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 |
15 | Vcc | 5V |
16 | GND | GND |
Для вывода первой программы приветствия, воспользуйтесь кодом вроде этого:
// подключаем стандартную библиотеку LiquidCrystal #include <LiquidCrystal.h> // инициализируем объект-экран, передаём использованные // для подключения контакты на Arduino в порядке: // RS, E, DB4, DB5, DB6, DB7 LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { // устанавливаем размер (количество столбцов и строк) экрана lcd.begin(20, 4); // печатаем первую строку lcd.print("Hello Amperka"); // устанавливаем курсор в колонку 0, строку 1 // на самом деле это вторая строка, т.к. нумерация начинается с нуля lcd.setCursor(0, 1); // печатаем вторую строку lcd.print("Do It Yourself"); // устанавливаем курсор в колонку 0, строку 2 lcd.setCursor(0, 2); // печатаем третью строку lcd.print("LCD Screen 20x4"); // устанавливаем курсор в колонку 0, строку 3 lcd.setCursor(0, 3); // печатаем четвёртую строку lcd.print("www.Amperka.ru"); } void loop() { }
Существует два способа вывода кирилицы на текстовые дисплеи:
Рассмотрим оба способа более подробно.
Дисплейный модуль хранит в памяти две страницы знакогенератора, которые состоят из различных символов и букв.
Для вывода символа на дисплей необходимо передать его номер в шестнадцатеричной системе из таблицы знакогенератора.
Так букве Я
соответствует код B1
в шестнадцатеричной системе. Чтобы передать на экран строку «Яndex», необходимо в явном виде с помощью последовательности \x##
встроить в строку код символа:
lcd.print("\xB1ndex");
Вы можете смешивать в одной строке обычные символы и явные коды как угодно. Единственный нюанс в том, что после того, как компилятор в строке видит последовательность \x
, он считывает за ним все символы, которые могут являться разрядами шестнадцатеричной системы даже если их больше двух. Из-за этого нельзя использовать символы из диапазона 0-9
и A-F
следом за двузначным кодом символа, иначе на дисплее отобразится неправильная информация. Чтобы обойти этот момент, можно использовать тот факт, что две строки записанные рядом склеиваются.
Сравните две строки кода для вывода надписи «Яeee»:
lcd.print("\xB1eee"); // ошибка lcd.print("\xB1""eee"); // правильно
Используя полученную информацию выведем на дисплей сообщение «Привет, Амперка!»:
// подключаем стандартную библиотеку LiquidCrystal #include <LiquidCrystal.h> // инициализируем объект-экран, передаём использованные // для подключения контакты на Arduino в порядке: // RS, E, DB4, DB5, DB6, DB7 LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { // устанавливаем размер (количество столбцов и строк) экрана lcd.begin(20, 4); // устанавливаем курсор в колонку 7, строку 0 // на самом деле это первая строка, т.к. нумерация начинается с нуля lcd.setCursor(7, 0); // печатаем первую строку lcd.print("\xA8""p""\xB8\xB3""e\xBF"); // устанавливаем курсор в колонку 9, строку 1 // на самом деле это вторая строка, т.к. нумерация начинается с нуля lcd.setCursor(9, 1); // печатаем вторую строку lcd.print("o\xBF"); // устанавливаем курсор в колонку 7, строку 2 // на самом деле это третья строка, т.к. нумерация начинается с нуля lcd.setCursor(7, 2); lcd.print("A\xBC\xBE""ep\xBA\xB8"); } void loop() { }
Дисплейный модуль хранит в памяти две страницы знакогенератора. По умолчанию установлена нулевая страница. Для переключения между страницами используйте методы:
// переключение с нулевой страницы на первую command(0x101010); // переключение с первой страницы на нулевую command(0x101000);
Дисплей не может одновременно отображать символы разных страниц.
Рассмотрим пример, в котором одна и та же строка будет отображаться по-разному — в зависимости от выбранной страницы.
// Подключаем стандартную библиотеку LiquidCrystal #include <LiquidCrystal.h> // Инициализируем объект-экран, передаём использованные // для подключения контакты на Arduino в порядке: // RS, E, DB4, DB5, DB6, DB7 LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { // устанавливаем размер (количество столбцов и строк) экрана lcd.begin(20, 4); // устанавливаем курсор в колонку 7, строку 0 // на самом деле это первая строка, т.к. нумерация начинается с нуля lcd.setCursor(7, 0); // печатаем строку lcd.print("\x9b\x9c\x9d\x9e\x9f"); } void loop() { // устанавливаем 0 станицу знакогенератора (стоит по умолчанию) lcd.command(0b101000); // ждём 1 секунду delay(1000); // устанавливаем 1 станицу знакогенератора lcd.command(0b101010); // ждём 1 секунду delay(1000); }
Полную таблицу символов с кодами можно найти в Полную таблицу символов с кодами можно найти в документации к экрану.
Совсем не обязательно мучатся со знакогенератором, чтобы вывести русский символ. Для решения проблемы скачайте и установите библиотеку LiquidCrystalRus.
Это копия оригинальной библиотеки LiquidCrystal
с добавлением русского языка. Добавленный в библиотеку код трансформирует русские символы UTF8
в правильные коды для текстового экрана.
В качестве примера выведем фразу «Привет, Амперка» на дисплей.
// подключаем библиотеку LiquidCrystalRus #include <LiquidCrystalRus.h> // инициализируем объект-экран, передаём использованные // для подключения контакты на Arduino в порядке: // RS, E, DB4, DB5, DB6, DB7 LiquidCrystalRus lcd(12, 11, 5, 4, 3, 2); void setup() { // устанавливаем размер (количество столбцов и строк) экрана lcd.begin(20, 4); // устанавливаем курсор в колонку 7, строку 0 // на самом деле это первая строка, т.к. нумерация начинается с нуля lcd.setCursor(7, 0); // печатаем первую строку lcd.print("Привет"); // устанавливаем курсор в колонку 9, строку 1 // на самом деле это вторая строка, т.к. нумерация начинается с нуля lcd.setCursor(9, 1); // печатаем вторую строку lcd.print("от"); // устанавливаем курсор в колонку 7, строку 2 // на самом деле это третья строка, т.к. нумерация начинается с нуля lcd.setCursor(7, 2); lcd.print("Амперки"); } void loop() { }
В качестве примера подключим дисплей к управляющей плате Iskra JS.
Для коммуникации понадобится Breadboard Half и соединительные провода «папа-папа».
Вывод | Обозначение | Пин 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 |
15 | Vcc | 5V |
16 | GND | GND |
Для работы с LCD-дисплеем из среды Espruino существует библиотека HD44780.
Для вывода программы приветствия, воспользуйтесь скриптом:
// создаём переменную для работы с дисплеем // HD44780 — контроллер монохромных жидкокристаллических знакосинтезирующих дисплеев var lcd = require("HD44780").connect(P12,P11,P5,P4,P3,P2); // печатаем первую строку lcd.print("Hello Amperka"); // устанавливаем курсор в колонку 0, строку 1 // на самом деле это вторая строка, т.к. нумерация начинается с нуля lcd.setCursor(0, 1); // печатаем вторую строку lcd.print("Do It Yourself"); // устанавливаем курсор в колонку 0, строку 2 lcd.setCursor(0, 2); // печатаем третью строку lcd.print("LCD Screen 20x4"); // устанавливаем курсор в колонку 0, строку 3 lcd.setCursor(0, 3); // печатаем четвёртую строку lcd.print("www.Amperka.ru");
Вывод кирилицы на дисплей с помощью платформы 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); // устанавливаем курсор в колонку 7, строку 0 // на самом деле это первая строка, т.к. нумерация начинается с нуля lcd.setCursor(7, 0); // печатаем первую строку lcd.print("\xA8"+"p"+"\xB8\xB3"+"e\xBF"); // устанавливаем курсор в колонку 9, строку 1 // на самом деле это вторая строка, т.к. нумерация начинается с нуля lcd.setCursor(9, 1); // печатаем вторую строку lcd.print("o\xBF"); // устанавливаем курсор в колонку 7, строку 2 // на самом деле это третья строка, т.к. нумерация начинается с нуля lcd.setCursor(7, 2); // печатаем третью строку lcd.print("A\xBC\xBE"+"ep\xBA\xB8");
Дисплейный модуль хранит в памяти две страницы знакогенератора. По умолчанию установлена нулевая страница. Для переключения между страницами используйте методы:
// переключение с нулевой страницы на первую command(0x101010); // переключение с первой страницы на нулевую command(0x101000);
Дисплей не может одновременно отображать символы разных страниц.
Рассмотрим пример, в котором одна и та же строка будет отображаться по-разному — в зависимости от выбранной страницы.
// создаём переменную для работы с дисплеем // HD44780 — контроллер монохромных жидкокристаллических знакосинтезирующих дисплеев var lcd = require("HD44780").connect(P12, P11, P5, P4, P3, P2); // создаём переменную состояния var state = false; // устанавливаем курсор в колонку 7, строку 0 // на самом деле это первая строка, т.к. нумерация начинается с нуля lcd.setCursor(7, 0); // печатаем строку 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); } }
Полную таблицу символов с кодами можно найти в документации к экрану.
Для пользователей Espruino есть возможность выводить супер большие числа «Big Number Module» на текстовой дисплей 20×4.
Размер цифры в данном шрифте: 3 символа по столбцам и 4 по строкам.
// создаём переменную для работы с дисплеем // HD44780 — контроллер монохромных жидкокристаллических знакосинтезирующих дисплеев var lcd = require("HD44780").connect(P12,P11,P5,P4,P3,P2); // создаём переменную для работы с большим шрифтом цифр var disp = require("big_number").use(lcd); // выводим число «31337» disp.showDigit(1,3); disp.showDigit(4,1); disp.showDigit(8,3); disp.showDigit(12,3); disp.showDigit(16,7);
Дисплей удобен для отображения показаний модулей и сенсоров. Сделаем задатки «Умного Дома», а именно «комнатный термометр».
A0
. В итоге должна получится схема.// подключаем стандартную библиотеку LiquidCrystal #include <LiquidCrystal.h> // инициализируем объект-экран, передаём использованные // для подключения контакты на Arduino в порядке: // RS, E, DB4, DB5, DB6, DB7 LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // пин датчика температуры #define TEMPERATURE_PIN A0 void setup() { // устанавливаем размер (количество столбцов и строк) экрана lcd.begin(20, 4); } void loop() { // очищаем дисплей lcd.clear(); // устанавливаем курсор в колонку 4, строку 1 // на самом деле это вторая строка, т.к. нумерация начинается с нуля lcd.setCursor(4, 1); // считываем показания с датчика температуры int sensorADC = analogRead(A0); // переводим значения с АЦП в вольты float sensorVoltage = sensorADC * (5.0 / 1023.0); // переводим вольты в градусы цельсия int temperature = (sensorVoltage - 0.5) * 100; // выводим результат на дисплей lcd.print("Temperature"); // устанавливаем курсор в колонку 8, строку 2 // на самом деле это третья строка, т.к. нумерация начинается с нуля lcd.setCursor(8, 2); lcd.print(temperature); lcd.print("\x99""C"); delay(500); }
// создаём переменную для работы с дисплеем // HD44780 — контроллер монохромных жидкокристаллических знакосинтезирующих дисплеев var lcd = require("HD44780").connect(P12,P11,P5,P4,P3,P2); // создаём переменную для работы с датчиком температуры var thermometer = require('@amperka/thermometer') .connect(A0); // устанавливаем курсор в колонку 4, строку 1 // на самом деле это вторая строка, т.к. нумерация начинается с нуля lcd.setCursor(4, 1); // выводим на дисплей строку «Temperature» lcd.print("Temperature"); // каждую секунду считываем данные с датчика температуры и выводим на дисплей setInterval(function() { var celsius = thermometer.read('C'); lcd.setCursor(8, 2); lcd.print(celsius.toFixed(0) + "\x99"+"C"); }, 1000);
MT-20S4A умеет отображать все строчные и прописные буквы латиницы и кириллицы, а также типографские символы. Для любителей экзотики есть возможность создавать собственные иконки.
Экран выполнен на жидкокристаллической матрице, которая отображает 4 строки по 20 символов. Каждый символ состоит из отдельного знакоместа 5×8 пикселей.
Матрица индикатора подключена к встроенному чипу КБ1013ВГ6 с двумя расширителями портов, которые выполняют роль посредника между экраном и микроконтроллером.
Контроллер КБ1013ВГ6 аналогичен популярным чипам зарубежных производителей HD44780 и KS0066, что означает совместимость со всеми программными библиотеками.
На плате дисплея выведено 16 контактов для подведения питания и взаимодействия с управляющей электроникой.
Вывод | Обозначение | Описание |
---|---|---|
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-х битные режимы) |
15 | LED+ | + питания подсветки |
16 | LED– | – питания подсветки |
Экран совместим со всеми контроллерами с логическим напряжением от 3,3 до 5 вольт. Но для питания самого индикатора (пин VCC) необходимо строго 5 вольт. Если в вашем проекте нет линии 5 вольт, обратите внимание на дисплей текстовый экран 20×4 / I²C / 3,3 В.
Дисплей может работать в двух режимах:
DB0
-DB7
)DB4
-DB7
)Использовать восьмибитный режим не целесообразно. Для его работы требуется на четыре дополнительные ноги, а выигрыша по скорости практически нет.