Lcd1602 | русский шрифт на китайском экране | lcd keypad shield

Тема в разделе "Arduino & Shields", создана пользователем Technomagic, 10 фев 2022.

  1. Technomagic

    Technomagic Нерд

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

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


    Качаем библиотеку BigRus1602 и добавляем ее в Arduino IDE.

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

    Основное отличие от других библиотек и экрана со вшитыми кириилическими символами - очень крупный шрифт.

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

    Есть 2 встроенных шрифта: Strong и Smooth.

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

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

    Если нужно сэкономить память контроллера, оставьте раскомментированым только строку BC_ONLY_NUMBER
    Код (C++):
    //#define BC_STRONG_FONT    //угловатые буквы и цифры
    #defineBC_SMOOTH_FONT        //скругленные буквы и цифры
    //#define BC_ONLY_NUMBER    //только цифры (для экономии памяти)
    Больше примеров есть в папке Example.

    Библиотека написана программистом - любителем для экономии вашего времени.

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