Categories
ESP8266 NodeMCU

Знае ли LCD1602 кирилица

Съществуват няколко варианта на HD44780.

  • HD44780UA00 – стандартна (японска) версия, в която има интегрирани символи от катакана и някои гръцки букви и математически символи.
  • HD44780UA02 – е европейска версия, в която има гръцки, кирилица и западноевропейски символи (с диакритици).

За съжаление най-евтини и най-разпространени по нашите ширини са чистокръвните китайчета, които за кирилица не са чували.

От друга страна HD44780 ни позволява да създадем до 8 растерни изображения (bitmap). На https://omerk.github.io/lcdchargen/ ще намерите опростен генератор, с който може да добиете представа как да създавате вашите персонализирани изображения.

Ако типично българските символи, които трябва да изобразяваме едновременно са 8 или по-малко, то може да се справим и с микс между латински букви и растерни изображения.

#include "LiquidCrystal_I2C.h"

int lcdColumns = 16;
int lcdRows = 2;

// Д
byte customCharD[8] = {
  0b00011,
  0b00101,
  0b01001,
  0b01001,
  0b01001,
  0b11111,
  0b10001,
  0b00000
};
// Ж
byte customCharZ[8] = {
  0b10101,
  0b10101,
  0b10101,
  0b01110,
  0b10101,
  0b10101,
  0b10101,
  0b00000
};
// Й
byte customCharJ[8] = {
  0b10101,
  0b10001,
  0b10011,
  0b10101,
  0b11001,
  0b11001,
  0b10001,
  0b00000
};
// И
byte customCharI[8] = {
  0b10001,
  0b10011,
  0b10011,
  0b10101,
  0b11001,
  0b11001,
  0b10001,
  0b00000
};

LiquidCrystal_I2C lcd(0x27, lcdColumns, lcdRows);  

void setup(){
  // инициализираме LCD
  lcd.init();
  // включваме подсветката                     
  lcd.backlight();
  // Записваме до 8 персонализирани символа
  // Д
  lcd.createChar(0, customCharD);
  // Ж
  lcd.createChar(1, customCharZ);
  // Й
  lcd.createChar(2, customCharJ);
  // И
  lcd.createChar(3, customCharI);

  // Изчистваме екрана
  lcd.clear();
  // задаваме позиция на курсора - първи ред, първи символ
  lcd.setCursor(0, 0);
  // извеждаме текст
  lcd.print("TechPot.w-lab.win");
  // задаваме позиция на курсора - втори ред, първи символ
  lcd.setCursor(0, 1);
  // извеждаме текст на латиница
  lcd.print("CA");
  // извеждаме персонализиран символ - Й
  lcd.write(2);
  // извеждаме текст на латиница
  lcd.print("T 3A ");
  // извеждаме персонализиран символ - Д
  lcd.write(0);
  // извеждаме персонализиран символ - Ж
  lcd.write(1);
  // извеждаме текст на латиница
  lcd.print("A");
  // извеждаме персонализиран символ - Д
  lcd.write(0);
  // извеждаме персонализиран символ - Ж
  lcd.write(1);
  // извеждаме персонализиран символ - И
  lcd.write(3);
}

void loop(){
  // Не правим нищо
}

Резултат:

Разбира се, ако имаме нужда от повече символи (но не едновременно) можем да извикаме lcd.createChar(0, ...); с ново растерно изображение и след това да го принтираме с lcd.write(0);

Вашият коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *