Текстовый экран 8×2

Текстовый дисплей 8×2 пригодится для вывода показаний датчиков, отображения простых меню, подсказок и приветствий.

Видеообзор

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

В качестве примера подключим дисплей к управляющей плате 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. В ней вы найдёте примеры кода с подробными комментариями.

Вывод текста

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

hello-amperka.ino
// подключаем стандартную библиотеку LiquidCrystal
#include <LiquidCrystal.h>
 
// инициализируем объект-экран, передаём использованные 
// для подключения контакты на 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"); // правильно

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

hello-amperka-rus.ino
// подключаем стандартную библиотеку LiquidCrystal
#include <LiquidCrystal.h>
 
// инициализируем объект-экран, передаём использованные 
// для подключения контакты на 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);

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

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

change-page.ino
// Подключаем стандартную библиотеку LiquidCrystal
#include <LiquidCrystal.h>
 
// Инициализируем объект-экран, передаём использованные 
// для подключения контакты на 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 в правильные коды для текстового экрана.

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

hello-amperka-rus-custom-library.ino
// подключаем библиотеку LiquidCrystalRus
#include <LiquidCrystalRus.h>
 
// инициализируем объект-экран, передаём использованные 
// для подключения контакты на 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.

Вывод текста

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

hello-amperka.js
// создаём переменную для работы с дисплеем
// 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"); // правильно

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

hello-amperka-rus.js
// создаём переменную для работы с дисплеем
// 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);

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

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

change-page.js
// создаём переменную для работы с дисплеем
// 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);
  }
}

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

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

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

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

Как собрать

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

Скетч для Arduino

thermometer-room.ino
// подключаем стандартную библиотеку 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(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

thermometer-room.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)

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

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

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

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

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

Габаритный чертёж

Характеристики

  • Тип дисплея: текстовый
  • Цвет: монохромный
  • Технология: LCD (Liquid Crystal Display)
  • Индикация: 2 строки по 8 символов
  • Драйвера матрицы: КБ1013ВГ6
  • Интерфейс: параллельный 4/8 бит
  • Тип подсветки: LED
  • Цвет подсветки: янтарный
  • Цвет символов: чёрный
  • Напряжение питания: 5 В
  • Максимальный ток потребления: 0,8 мА
  • Потребляемый ток подсветки: 60 мА
  • Напряжение логических уровней: 3,3–5 В
  • Габариты: 58×32×12,9 мм

Ресурсы