LCD1602 и русский шрифт. Библиотека для Arduino IDE
Обновлено: 20 мая 2022 г.

Как опознать дисплей со встроенными кириллическими буквами? Русифицируем дисплей Код: Минимальный код Скроллинг текста Объединение нескольких слов для вывода на экран Чтение данных последовательного порта и вывод на ЖК-экран Выводим все символы доступные в BigRus1602 Выбор шрифта Генератор символов для дисплеев LCD1602 и LCD1604 Процесс создания библиотеки. Видео

Учим китайский дисплей русскому языку
Дисплей LCD1602 популярен у разработчиков из-за дешевизны и простоты использования. Единовременно на экране отображается 2 строки по 16 символов в каждой. Выводить на дисплей можно только ограниченный набор букв, цифр и символов, представленных в таблице ниже. Рассмотрев таблицу становится ясно что русские буквы здесь отсутствуют, но эта проблема решаема.

Как опознать дисплей со встроенными кириллическими буквами?

Существуют дисплеи с встроенной кириллицей. Опознать дисплей с кириллицей можно по буквам CT или CP в конце заголовка, например, WH1602B-YYH-CT. На таком дисплее русские буквы выводятся без привлечения излишних библиотек "из коробки". Вот только цена в разы выше чем на обычный англо-китайский экран. Эти дисплеи не перепрошиваются, но всё же есть способ заставить эти дешёвые дисплеи печатать кириллические буквы.
Расшифровку маркировки дисплеев 1602 смотри в таблице.
Русифицируем дисплей
В качестве решения проблемы предлагаю использовать библиотеку BigRus1602. Это не русификация дисплея в полном смысле, но путем ухищрений открывает возможность использования всех русских букв.
Есть два основых варианта использования библиотеки:
Вывод текста в режиме бегущей строки
Для вывода часов или таймера в виде ЧЧ:ММ
Особенности библиотеки BigRus1602 :
Каждая буква имеет высоту в две строки, что делает её заметной с дальнего расстояния.
2 встроенных шрифта: «строгий» и «мягкий».
Имеет гибкую настройку, чтобы оставить память контроллеру на решение других задач.
Переключение режимов: бегущая строка | статичный текст.
Подходит для работы с модулем LCD KeypadShield для Arduino Uno. Для начала необходимо добавить библиотеку в среду Arduino IDE.
Подключите библиотеку к Ардуино IDE. Если вы не делали этого раньше, просто следуйте инструкции, это не сложно:
Запускаем программу Arduino IDE.
В меню сверху находим Скетч->Подключить библиотеку->Добавить .ZIP библиотеку...
В открывшемся окне указываем путь к архиву с библиотекой на вашем компьютере.
На этом подготовка закончена. Архив с библиотекой распакуется в папку C:\Users\Admin\Documents\Arduino\libraries и появится в Arduino IDE.

Минимальный код для вывода кириллических букв.
Библиотека принимает данные типа byte, int, long и массив char[].
// В этом примере текст прокручивается по экрану слева направо:
#include "BigRus1602.h"
char text[] = " АЛХИМИЯ"; // обязательно заглавные буквы
//Пины для подключения LCD Keypad Shield
const int rs = 8, en = 9, d4 = 4, d5 = 5, d6 = 6, d7 = 7;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
BigRus1602 lcdRus(&lcd);
void setup()
{
lcdRus.begin();
lcdRus.scrollText(true); // включаем скроллинг текста
lcdRus.print(text); // выводим текст на экран единожды
}
void loop()
{
}
Разберем по частям.
Первая строка подключает библиотеку к проекту. Для корректной работы требуется библиотека LiquidCrystal, которая уже есть в среде Ардуино по умолчанию:
#include "BigRus1602.h"
Здесь хранится массив символов, который будет выводиться на экран. ❕Пробел перед первым словом помогает смотрящему читателю успеть считать слово целиком. Если не добавлять пробел, то текст слишком быстро сместится за край экрана:
char text[] = " АЛХИМИЯ"; // обязательно заглавные буквы
В примере прописаны пины для подключения Arduino Uno к модулю LCD KeypadShield:
const int rs = 8, en = 9, d4 = 4, d5 = 5, d6 = 6, d7 = 7;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
Создаем экземпляр объекта. При этом подключается стандартная библиотека Arduino LiquidCrystal и появляется возможность использовать все её функции:
BigRus1602 lcdRus(&lcd);
Подключаем дисплей:
lcdRus.begin();
Включаем скроллинг текста (true). Для отключения пишем (false):
lcdRus.scrollText(true);
Наконец выводим сам текст, который хотим видеть на экране:
lcdRus.print(text);
Скроллинг текста
//Scroll speed
#include "BigRus1602.h"
char textSlow[] = " МЕДЛЕННО";
char textFast[] = " БЫСТРО";
//Пины для подключения LCD Keypad Shield
const int rs = 8, en = 9, d4 = 4, d5 = 5, d6 = 6, d7 = 7;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
BigRus1602 lcdRus(&lcd);
void setup()
{
lcdRus.begin();
}
void loop()
{
//второй аргумент - временной интервал между сдвигами, вводить его не обязательно(по умолчанию 1000 мс)
lcdRus.scrollText(true, 500);
lcdRus.print(textFast);
lcdRus.scrollText(true, 1000);
lcdRus.print(textSlow);
}
Основное отличие примера от предыдущего — изменение скорости скроллинга текста по экрану:
lcdRus.scrollText(true, 500);
Здесь 500 = число миллисекунд, на которое замирает текст прежде чем произойдет очередное смещение строки влево.
Объединение нескольких слов для вывода на экран
В этом примере показано как объединить несколько слов вместе и вывести их на экран при помощи функции .getCarret().
//Sequence of words
#include "BigRus1602.h"
const int rs = 8, en = 9, d4 = 4, d5 = 5, d6 = 6, d7 = 7;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
BigRus1602 lcdRus(&lcd);
void setup()
{
lcdRus.begin();
for (uint8_t i = 0; i <= 100; i++) //имитируем загрузку
{
lcdRus.print(i);
lcd.setCursor(lcdRus.getCarret(), 1);
lcd.print("% ");
delay(50);
}
delay(3000);
}
void loop()
{
lcd.clear();
for (uint8_t min = 0; min < 30; min++)
{
for (uint8_t sec = 0; sec < 60; sec++)
{
lcdRus.print(min);
lcdRus.print(":", lcdRus.getCarret() -1);
lcdRus.print(sec, lcdRus.getCarret() -1);
//заполним "хвост" строки пробелами чтобы избежать появления артефактов от старого текста. Можно заменить на lcd.clear()
lcdRus.print(" ", lcdRus.getCarret() -1);
delay(1000);
}
}
}
Обратите внимание что от положения каретки отнимается единица:
lcdRus.print("Текст", положение каретки -1);
Чтобы буквы визуально не слипались, между ними необходим пробел. В некоторых случаях пробел съедает часть полезного пространства экрана и тогда нужно смещать положение каретки на одну единицу влево.
*Таймер в этом примере имеет набегающую погрешность. Я намеренно упростил пример чтобы не отвлекать внимание.
Чтение данных последовательного порта и вывод на ЖК-экран
//SerialRead
#include "BigRus1602.h"
const int rs = 8, en = 9, d4 = 4, d5 = 5, d6 = 6, d7 = 7;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
BigRus1602 lcdRus(&lcd);
void setup()
{
lcd.begin(16, 2);
lcdRus.begin();
Serial.begin(9600);
lcdRus.scrollText(true);
}
void loop()
{
char serialText[30];
if (Serial.available())
{
//чем больше символов в строке, тем больше нужно времени чтобы принять ее
delay(100);
int availableText = Serial.available();
for (int i = 0; i < availableText; i++)
{
serialText[i] = Serial.read();
serialText[i + 1] = '\0';
}
lcdRus.print(serialText);
}
}
Символы доступные в BigRus1602
Чтобы увидеть все доступные в библиотеке символы, просто загрузите демонстрационный код:
//Simple print
//Демонстрация всех символов
#include "BigRus1602.h"
//библиотека позволяет выводить данные типа byte, int, long и char[]
char text[] = " АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ 1234567890 !?-.,:;";
//Пины для подключения LCD Keypad Shield
const int rs = 8, en = 9, d4 = 4, d5 = 5, d6 = 6, d7 = 7;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
BigRus1602 lcdRus(&lcd); //указатель &lcd обязателен
void setup()
{
lcdRus.begin();
lcdRus.print("ЛСД");
delay(3000);
lcdRus.scrollText(true);
}
void loop()
{
lcdRus.print(text);
delay(3000);
}
Выбор шрифта
В библиотеке доступно два шрифта: Strong и Smooth. Чтобы выбрать один из них откройте файл BigRus1602Font.h. Путь к этому файлу выглядит примерно так C:\Users\Admin\Documents\Arduino\libraries\BigRus1602\ В указанном файле нужно раскомментированую одну из строк. Остальные строки должны быть закомментированы.
Если нужно сэкономить память контроллера, оставьте раскомментированым только строку BC_ONLY_NUMBER
//#define BC_STRONG_FONT //угловатые буквы и цифры
#defineBC_SMOOTH_FONT //скругленные буквы и цифры
//#define BC_ONLY_NUMBER //только цифры (для экономии памяти)
Генератор символов для ЖК-дисплеев LCD1602 и LCD1604
Онлайн версия программы для перевода кликабельных пикселей в код понятный ардуино есть на нашем сайте здесь.
Оффлайн версия для тех у кого сложности с доступом к интернету.

Скачать программу генератор произольных символов для ЖК-дисплеев на ПК.
Внимание! Если код не копируется в буфер обмена, значит антивирус запустил программу в режиме песочницы.