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

Публикация 13.01.2022

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

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

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

 

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

Есть два основых варианта использования библиотеки:

  1. Вывод текста в режиме бегущей строки
  2. Для часов или таймера в виде ЧЧ:ММ

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

Библиотека принимает данные типа byteintlong и массив 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.

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

* комментарии публикуются после модерации
Нет комментариев