top of page
  • Фото автораAlchemist

LCD1602 и русский шрифт. Библиотека для Arduino IDE

Обновлено: 20 мая 2022 г.


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

Символы из библиотеки BigRus1602
Символы из библиотеки BigRus1602

Учим китайский дисплей русскому языку


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

Таблица символов дисплея 1602
Таблица символов LCD

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

Маркировка ЖК дисплеев 1602
Маркировка ЖК дисплеев

Существуют дисплеи с встроенной кириллицей. Опознать дисплей с кириллицей можно по буквам CT или CP в конце заголовка, например, WH1602B-YYH-CT. На таком дисплее русские буквы выводятся без привлечения излишних библиотек "из коробки". Вот только цена в разы выше чем на обычный англо-китайский экран. Эти дисплеи не перепрошиваются, но всё же есть способ заставить эти дешёвые дисплеи печатать кириллические буквы.

Расшифровку маркировки дисплеев 1602 смотри в таблице.






Русифицируем дисплей

В качестве решения проблемы предлагаю использовать библиотеку BigRus1602. Это не русификация дисплея в полном смысле, но путем ухищрений открывает возможность использования всех русских букв.

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

  1. Вывод текста в режиме бегущей строки

  2. Для вывода часов или таймера в виде ЧЧ:ММ


Особенности библиотеки BigRus1602 :

  • Каждая буква имеет высоту в две строки, что делает её заметной с дальнего расстояния.

  • 2 встроенных шрифта: «строгий» и «мягкий».

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

  • Переключение режимов: бегущая строка | статичный текст.

  • Подходит для работы с модулем LCD KeypadShield для Arduino Uno. Для начала необходимо добавить библиотеку в среду Arduino IDE.

Подключите библиотеку к Ардуино IDE. Если вы не делали этого раньше, просто следуйте инструкции, это не сложно:

  1. Запускаем программу Arduino IDE.

  2. В меню сверху находим Скетч->Подключить библиотеку->Добавить .ZIP библиотеку...

  3. В открывшемся окне указываем путь к архиву с библиотекой на вашем компьютере.

На этом подготовка закончена. Архив с библиотекой распакуется в папку 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


  • Онлайн версия программы для перевода кликабельных пикселей в код понятный ардуино есть на нашем сайте здесь.

  • Оффлайн версия для тех у кого сложности с доступом к интернету.

Скачать программу генератор произольных символов для ЖК-дисплеев на ПК.

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

LCD_symbol_generator
.7z
Download 7Z • 54.21MB

Процесс создания библиотеки. Видео


777 просмотров2 комментария

Недавние посты

Смотреть все
bottom of page