Русский шрифт на LCD1602 | Учим китайский дисплей русскому языку

Русский шрифт на LCD1602 | Учим китайский дисплей русскому языку
Приветствую всех ардуинофобов и ардуинофилов ‍
LCD1602 - один из самых популярных дисплеев из-за его дешевизны и простоты использования. Неприятность заключается в том, что нельзя выводить абы какие символы на дисплей, можно только те что уже вшиты в него на заводе. Обычно встречаются дисплеи с вшитыми китайскими и английскими буквами и цифрами. Существуют дисплеи с вшитой кириллицей (обозначаются маркировкой CT или CP), но их сложнее найти, а стоят они дороже. Этим постом предлагаем решение проблемы.

Создатели дисплея любезно позаботились о нас и оставили 8 пустых ячеек в дисплее куда можно записать свои символы. Вот в эти 8 ячеек мы и засунули 33 буквы русского алфавита, а за одно и переписали цифры и знаки препинания, чтобы всё было в едином стиле.

Демонстрация шрифта. В ролике заметно мерцание текста, в реальности этого не заметно.

Качаем библиотеку BigRus1602 и добавляем ее в Arduino IDE. Основное отличие от других библиотек и экрана со вшитыми кириилическими символами - очень крупный шрифт. Точнее 2 встроенных шрифта: Strong и Smooth.

Есть два основых варианта использования библиотеки:
  1. Вывод текста в режиме бегущей строки
  2. Для часов или таймера в виде ЧЧ:ММ
Прежде чем начинать кодировать расскажу об ограничениях и возможностях библиотеки.
Тестирование проходило на LCD Keypad Shield. С экранами работающими по I2c скорее всего не заработает. Просто не было I2c дисплея под рукой чтобы допилить код под него.

Библиотека принимает данные типа byte, int, long и массив char[].
Доступные для вывода на экран символы:
АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ 1234567890 !?-.,:;

Библиотека BigRus1602 работает с опорой на стандартную библиотеку liquid crystal. По умолчанию она уже встроена в Arduino IDE, делать ничего не нужно.

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

Рассмотрим несколько примеров
Минимальный код:
// В этом примере текст прокручивается по экрану слева направо
#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);  // true включаетскроллингтекста. false выключает
  lcdRus.print(text);      // выводим текст на экран единожды
}

void loop()
{
}
Скроллинг текста:
//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);
}
Чтение данных последовательного порта и вывод на ЖК-экран:
//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);
  }
}
В библиотеке доступно два шрифта: Strong и Smooth. Чтобы выбрать один из них откройте файл BigRus1602Font.h. Путь к этому файлу выглядит примерно так C:\Users\Admin\Documents\Arduino\libraries\BigRus1602\ В указанном файле нужно раскомментированую одну из строк. Остальные строки должны быть закомментированы.

Если нужно сэкономить память контроллера, оставьте раскомментированым только строку BC_ONLY_NUMBER

Выбор шрифта:
//#define BC_STRONG_FONT    //угловатые буквы и цифры
#define BC_SMOOTH_FONT        //скругленные буквы и цифры
//#define BC_ONLY_NUMBER    //только цифры (для экономии памяти)
Библиотека написана программистом - любителем для экономии вашего времени. Больше примеров есть в папке Example.

Посмотрите ролик о том, как происходило создание библиотеки.
 

Вложения

Изменено:

Комментарии

Nikanor

★★✩✩✩✩✩
1 Окт 2020
180
52
интересно, а какую информацию такими большими буквами можно уместить на дисплейчике....
 

TechnoMagic

★✩✩✩✩✩✩
13 Янв 2022
6
10
www.technomagix.space
@Nikanor, Основное назначение – вывод часов или таймера в виде ЧЧ:ММ. Сейчас записываем видео со станком где это будет применено. Второе назначение – режим бегущей строки. В бегущую строку конечно мало символов умещается, но для небольшого текста полезно.

Интересно, как будет выводиться текст на экранчике 2004?
Текст будет выводиться на первые две строки. Но не исключено что могут быть глюки если текст длинный. Под рукой просто не было такого экрана чтобы адаптировать библиотеку под него.