LCD UC1609 Русский текст
- Войдите на сайт для отправки комментариев
Купил я значит дисплей. Все вроде бы хорошо, но нет русского шрифта. Готовой русификации под библиотеку ERM19264_UC1609 тоже не нашел, решил сам дописать шрифт.

Проверено на библиотеке версии 1.3
Что нужно для вывода? Идем в Документы -> Arduino -> libraries -> ERM19264_UC1609 -> src
Нам нужно отредактировать файл ERM19264_graphics_font.h
Ищем там //Default Standard extended ASCII 5x8 font. и меняем массив на новый
static const unsigned char UC_Font_One[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00,
0x3E, 0x5B, 0x4F, 0x5B, 0x3E, // :)
0x3E, 0x6B, 0x4F, 0x6B, 0x3E,
0x1C, 0x3E, 0x7C, 0x3E, 0x1C,
0x18, 0x3C, 0x7E, 0x3C, 0x18,
0x1C, 0x57, 0x7D, 0x57, 0x1C,
0x1C, 0x5E, 0x7F, 0x5E, 0x1C,
0x00, 0x18, 0x3C, 0x18, 0x00,
0xFF, 0xE7, 0xC3, 0xE7, 0xFF,
0x00, 0x18, 0x24, 0x18, 0x00,
0xFF, 0xE7, 0xDB, 0xE7, 0xFF,
0x30, 0x48, 0x3A, 0x06, 0x0E,
0x26, 0x29, 0x79, 0x29, 0x26,
0x40, 0x7F, 0x05, 0x05, 0x07,
0x40, 0x7F, 0x05, 0x25, 0x3F,
0x5A, 0x3C, 0xE7, 0x3C, 0x5A,
0x7F, 0x3E, 0x1C, 0x1C, 0x08,
0x08, 0x1C, 0x1C, 0x3E, 0x7F,
0x14, 0x22, 0x7F, 0x22, 0x14,
0x5F, 0x5F, 0x00, 0x5F, 0x5F,
0x06, 0x09, 0x7F, 0x01, 0x7F,
0x00, 0x66, 0x89, 0x95, 0x6A,
0x60, 0x60, 0x60, 0x60, 0x60,
0x94, 0xA2, 0xFF, 0xA2, 0x94,
0x08, 0x04, 0x7E, 0x04, 0x08,
0x10, 0x20, 0x7E, 0x20, 0x10,
0x08, 0x08, 0x2A, 0x1C, 0x08,
0x08, 0x1C, 0x2A, 0x08, 0x08,
0x1E, 0x10, 0x10, 0x10, 0x10,
0x0C, 0x1E, 0x0C, 0x1E, 0x0C,
0x30, 0x38, 0x3E, 0x38, 0x30,
0x06, 0x0E, 0x3E, 0x0E, 0x06,
0x00, 0x00, 0x00, 0x00, 0x00, // Space
0x00, 0x00, 0x5F, 0x00, 0x00, // !
0x00, 0x07, 0x00, 0x07, 0x00,
0x14, 0x7F, 0x14, 0x7F, 0x14,
0x24, 0x2A, 0x7F, 0x2A, 0x12,
0x23, 0x13, 0x08, 0x64, 0x62,
0x36, 0x49, 0x56, 0x20, 0x50,
0x00, 0x08, 0x07, 0x03, 0x00,
0x00, 0x1C, 0x22, 0x41, 0x00,
0x00, 0x41, 0x22, 0x1C, 0x00,
0x2A, 0x1C, 0x7F, 0x1C, 0x2A,
0x08, 0x08, 0x3E, 0x08, 0x08,
0x00, 0x80, 0x70, 0x30, 0x00,
0x08, 0x08, 0x08, 0x08, 0x08,
0x00, 0x00, 0x60, 0x60, 0x00,
0x20, 0x10, 0x08, 0x04, 0x02,
0x3E, 0x51, 0x49, 0x45, 0x3E,
0x00, 0x42, 0x7F, 0x40, 0x00,
0x72, 0x49, 0x49, 0x49, 0x46,
0x21, 0x41, 0x49, 0x4D, 0x33,
0x18, 0x14, 0x12, 0x7F, 0x10,
0x27, 0x45, 0x45, 0x45, 0x39,
0x3C, 0x4A, 0x49, 0x49, 0x31,
0x41, 0x21, 0x11, 0x09, 0x07,
0x36, 0x49, 0x49, 0x49, 0x36,
0x46, 0x49, 0x49, 0x29, 0x1E,
0x00, 0x00, 0x14, 0x00, 0x00,
0x00, 0x40, 0x34, 0x00, 0x00,
0x00, 0x08, 0x14, 0x22, 0x41,
0x14, 0x14, 0x14, 0x14, 0x14,
0x00, 0x41, 0x22, 0x14, 0x08,
0x02, 0x01, 0x59, 0x09, 0x06,
0x3E, 0x41, 0x5D, 0x59, 0x4E,
0x7C, 0x12, 0x11, 0x12, 0x7C,
0x7F, 0x49, 0x49, 0x49, 0x36,
0x3E, 0x41, 0x41, 0x41, 0x22,
0x7F, 0x41, 0x41, 0x41, 0x3E,
0x7F, 0x49, 0x49, 0x49, 0x41,
0x7F, 0x09, 0x09, 0x09, 0x01,
0x3E, 0x41, 0x41, 0x51, 0x73,
0x7F, 0x08, 0x08, 0x08, 0x7F,
0x00, 0x41, 0x7F, 0x41, 0x00,
0x20, 0x40, 0x41, 0x3F, 0x01,
0x7F, 0x08, 0x14, 0x22, 0x41,
0x7F, 0x40, 0x40, 0x40, 0x40,
0x7F, 0x02, 0x1C, 0x02, 0x7F,
0x7F, 0x04, 0x08, 0x10, 0x7F,
0x3E, 0x41, 0x41, 0x41, 0x3E,
0x7F, 0x09, 0x09, 0x09, 0x06,
0x3E, 0x41, 0x51, 0x21, 0x5E,
0x7F, 0x09, 0x19, 0x29, 0x46,
0x26, 0x49, 0x49, 0x49, 0x32,
0x03, 0x01, 0x7F, 0x01, 0x03,
0x3F, 0x40, 0x40, 0x40, 0x3F,
0x1F, 0x20, 0x40, 0x20, 0x1F,
0x3F, 0x40, 0x38, 0x40, 0x3F,
0x63, 0x14, 0x08, 0x14, 0x63,
0x03, 0x04, 0x78, 0x04, 0x03,
0x61, 0x59, 0x49, 0x4D, 0x43,
0x00, 0x7F, 0x41, 0x41, 0x41,
0x02, 0x04, 0x08, 0x10, 0x20,
0x00, 0x41, 0x41, 0x41, 0x7F,
0x04, 0x02, 0x01, 0x02, 0x04,
0x40, 0x40, 0x40, 0x40, 0x40,
0x00, 0x03, 0x07, 0x08, 0x00,
0x20, 0x54, 0x54, 0x78, 0x40,
0x7F, 0x28, 0x44, 0x44, 0x38,
0x38, 0x44, 0x44, 0x44, 0x28,
0x38, 0x44, 0x44, 0x28, 0x7F,
0x38, 0x54, 0x54, 0x54, 0x18,
0x00, 0x08, 0x7E, 0x09, 0x02,
0x18, 0xA4, 0xA4, 0x9C, 0x78,
0x7F, 0x08, 0x04, 0x04, 0x78,
0x00, 0x44, 0x7D, 0x40, 0x00,
0x20, 0x40, 0x40, 0x3D, 0x00,
0x7F, 0x10, 0x28, 0x44, 0x00,
0x00, 0x41, 0x7F, 0x40, 0x00,
0x7C, 0x04, 0x78, 0x04, 0x78,
0x7C, 0x08, 0x04, 0x04, 0x78,
0x38, 0x44, 0x44, 0x44, 0x38,
0xFC, 0x18, 0x24, 0x24, 0x18,
0x18, 0x24, 0x24, 0x18, 0xFC,
0x7C, 0x08, 0x04, 0x04, 0x08,
0x48, 0x54, 0x54, 0x54, 0x24,
0x04, 0x04, 0x3F, 0x44, 0x24,
0x3C, 0x40, 0x40, 0x20, 0x7C,
0x1C, 0x20, 0x40, 0x20, 0x1C,
0x3C, 0x40, 0x30, 0x40, 0x3C,
0x44, 0x28, 0x10, 0x28, 0x44,
0x4C, 0x90, 0x90, 0x90, 0x7C,
0x44, 0x64, 0x54, 0x4C, 0x44, // z
0x00, 0x08, 0x36, 0x41, 0x00, // {
0x00, 0x00, 0x77, 0x00, 0x00, // |
0x00, 0x41, 0x36, 0x08, 0x00 // }
#ifdef UC_FONT_MOD_TWO
,0x02, 0x01, 0x02, 0x04, 0x02, // capital letter c with cedilla
0x3C, 0x26, 0x23, 0x26, 0x3C,
0x1E, 0xA1, 0xA1, 0x61, 0x12,
0x3A, 0x40, 0x40, 0x20, 0x7A,
0x38, 0x54, 0x54, 0x55, 0x59,
0x21, 0x55, 0x55, 0x79, 0x41,
0x22, 0x54, 0x54, 0x78, 0x42, // a-umlaut
0x21, 0x55, 0x54, 0x78, 0x40,
0x20, 0x54, 0x55, 0x79, 0x40,
0x0C, 0x1E, 0x52, 0x72, 0x12,
0x39, 0x55, 0x55, 0x55, 0x59,
0x39, 0x54, 0x54, 0x54, 0x59,
0x39, 0x55, 0x54, 0x54, 0x58,
0x00, 0x00, 0x45, 0x7C, 0x41,
0x00, 0x02, 0x45, 0x7D, 0x42,
0x00, 0x01, 0x45, 0x7C, 0x40,
0x7D, 0x12, 0x11, 0x12, 0x7D, // A-umlaut
0xF0, 0x28, 0x25, 0x28, 0xF0,
0x7C, 0x54, 0x55, 0x45, 0x00,
0x20, 0x54, 0x54, 0x7C, 0x54,
0x7C, 0x0A, 0x09, 0x7F, 0x49,
0x32, 0x49, 0x49, 0x49, 0x32,
0x3A, 0x44, 0x44, 0x44, 0x3A, // o-umlaut
0x32, 0x4A, 0x48, 0x48, 0x30,
0x3A, 0x41, 0x41, 0x21, 0x7A,
0x3A, 0x42, 0x40, 0x20, 0x78,
0x00, 0x9D, 0xA0, 0xA0, 0x7D,
0x3D, 0x42, 0x42, 0x42, 0x3D, // O-umlaut
0x3D, 0x40, 0x40, 0x40, 0x3D,
0x3C, 0x24, 0xFF, 0x24, 0x24,
0x48, 0x7E, 0x49, 0x43, 0x66,
0x2B, 0x2F, 0xFC, 0x2F, 0x2B,
0xFF, 0x09, 0x29, 0xF6, 0x20,
0xC0, 0x88, 0x7E, 0x09, 0x03,
0x20, 0x54, 0x54, 0x79, 0x41,
0x00, 0x00, 0x44, 0x7D, 0x41,
0x30, 0x48, 0x48, 0x4A, 0x32,
0x38, 0x40, 0x40, 0x22, 0x7A,
0x00, 0x7A, 0x0A, 0x0A, 0x72,
0x7D, 0x0D, 0x19, 0x31, 0x7D,
0x26, 0x29, 0x29, 0x2F, 0x28,
0x26, 0x29, 0x29, 0x29, 0x26,
0x30, 0x48, 0x4D, 0x40, 0x20,
0x38, 0x08, 0x08, 0x08, 0x08,
0x08, 0x08, 0x08, 0x08, 0x38,
0x2F, 0x10, 0xC8, 0xAC, 0xBA,
0x2F, 0x10, 0x28, 0x34, 0xFA,
0x00, 0x00, 0x7B, 0x00, 0x00,
0x08, 0x14, 0x2A, 0x14, 0x22,
0x22, 0x14, 0x2A, 0x14, 0x08,
0xAA, 0x00, 0x55, 0x00, 0xAA,
0xAA, 0x55, 0xAA, 0x55, 0xAA,
0x00, 0x00, 0x00, 0xFF, 0x00,
0x10, 0x10, 0x10, 0xFF, 0x00,
0x14, 0x14, 0x14, 0xFF, 0x00,
0x10, 0x10, 0xFF, 0x00, 0xFF,
0x10, 0x10, 0xF0, 0x10, 0xF0,
0x14, 0x14, 0x14, 0xFC, 0x00,
0x14, 0x14, 0xF7, 0x00, 0xFF,
0x00, 0x00, 0xFF, 0x00, 0xFF,
0x14, 0x14, 0xF4, 0x04, 0xFC,
0x14, 0x14, 0x17, 0x10, 0x1F,
0x10, 0x10, 0x1F, 0x10, 0x1F,
0x14, 0x14, 0x14, 0x1F, 0x00,
0x10, 0x10, 0x10, 0xF0, 0x00,
0x00, 0x00, 0x00, 0x1F, 0x10,
0x7E, 0x09, 0x09, 0x09, 0x7E, // А -- Заглавные буквы
0x7F, 0x49, 0x49, 0x49, 0x30, // Б
0x7F, 0x49, 0x49, 0x49, 0x36, // В
0x7F, 0x01, 0x01, 0x01, 0x02, // Г
0x60, 0x30, 0x2F, 0x21, 0x7F, // Д
0x7F, 0x49, 0x49, 0x49, 0x41, // Е
0x77, 0x08, 0x3F, 0x08, 0x77, // Ж
0x20, 0x42, 0x49, 0x49, 0x3E, // З
0x7F, 0x20, 0x10, 0x08, 0x7F, // И
0x7C, 0x21, 0x12, 0x09, 0x7C, // Й
0x7F, 0x08, 0x08, 0x14, 0x63, // К
0x40, 0x3F, 0x01, 0x01, 0x7F, // Л
0x7F, 0x02, 0x0C, 0x02, 0x7F, // М
0x7F, 0x08, 0x08, 0x08, 0x7F, // Н
0x3E, 0x41, 0x41, 0x41, 0x3E, // О
0x7F, 0x01, 0x01, 0x01, 0x7F, // П
0x7F, 0x09, 0x09, 0x09, 0x06, // Р
0x3E, 0x41, 0x41, 0x41, 0x22, // С
0x01, 0x01, 0x7F, 0x01, 0x01, // Т
0x47, 0x48, 0x48, 0x48, 0x3F, // У
0x0C, 0x12, 0x7F, 0x12, 0x0C, // Ф
0x41, 0x36, 0x08, 0x36, 0x41, // Х
0x3F, 0x40, 0x40, 0x7F, 0xC0, // Ц
0x07, 0x08, 0x08, 0x08, 0x7F, // Ч
0x7F, 0x40, 0x78, 0x40, 0x7F, // Ш
0x7F, 0x40, 0x78, 0x40, 0xFF, // Щ
0x01, 0x7F, 0x48, 0x48, 0x30, // Ъ
0x7F, 0x48, 0x30, 0x00, 0x7F, // Ы
0x7F, 0x48, 0x48, 0x48, 0x30, // Ь
0x22, 0x41, 0x49, 0x49, 0x3E, // Э
0x7F, 0x08, 0x3E, 0x41, 0x3E, // Ю
0x46, 0x49, 0x29, 0x19, 0x7F, // Я
0x20, 0x54, 0x54, 0x78, 0x40, // а -- Маленькие буквы
0x78, 0x54, 0x54, 0x54, 0x20, // б
0x7C, 0x54, 0x54, 0x54, 0x28, // в
0x7C, 0x04, 0x04, 0x04, 0x08, // г
0xE0, 0x50, 0x4C, 0x44, 0xFC, // д
0x38, 0x54, 0x54, 0x54, 0x08, // е
0x6C, 0x10, 0x7C, 0x10, 0x6C, // ж
0x20, 0x48, 0x44, 0x54, 0x38, // з
0x7C, 0x20, 0x10, 0x08, 0x7C, // и
0x7C, 0x21, 0x12, 0x09, 0x7C, // й
0x7C, 0x10, 0x10, 0x28, 0x44, // к
0x40, 0x3C, 0x04, 0x04, 0x7C, // л
0x7C, 0x08, 0x30, 0x08, 0x7C, // м
0x7C, 0x10, 0x10, 0x10, 0x7C, // н
0x38, 0x44, 0x44, 0x44, 0x38, // о
0x7C, 0x04, 0x04, 0x04, 0x7C, // п
0x7C, 0x14, 0x14, 0x14, 0x08, // р
0x38, 0x44, 0x44, 0x44, 0x20, // с
0x04, 0x04, 0x7C, 0x04, 0x04, // т
0x0C, 0x50, 0x50, 0x50, 0x3C, // у
0x10, 0x28, 0x7C, 0x28, 0x10, // ф
0x44, 0x28, 0x10, 0x28, 0x44, // х
0x3C, 0x40, 0x40, 0x7C, 0xC0, // ц
0x0C, 0x10, 0x10, 0x10, 0x7C, // ч
0x7C, 0x40, 0x70, 0x40, 0x7C, // ш
0x7C, 0x40, 0x70, 0x40, 0xFC, // щ
0x04, 0x7C, 0x50, 0x50, 0x20, // ъ
0x7C, 0x50, 0x20, 0x00, 0x7C, // ы
0x7c, 0x50, 0x50, 0x50, 0x20, // ь
0x44, 0x54, 0x54, 0x54, 0x38, // э
0x7c, 0x10, 0x7c, 0x44, 0x7c, // ю
0x48, 0x5c, 0x54, 0x34, 0x7c // я
#endif
};
Далее в вашем проекте для вывода символов русского алфавита нужно использовать многим знакомую функцию. Добавляем в конец скетча это:
/* Recode russian fonts from UTF-8 to Windows-1251 */
String rus(String source)
{
int i,k;
String target;
unsigned char n;
char m[2] = { '0', '\0' };
k = source.length(); i = 0;
while (i < k) {
n = source[i]; i++;
if (n >= 0xC0) {
switch (n) {
case 0xD0: {
n = source[i]; i++;
if (n == 0x81) { n = 0xA8; break; }
if (n >= 0x90 && n <= 0xBF) n = n + 0x30;
break;
}
case 0xD1: {
n = source[i]; i++;
if (n == 0x91) { n = 0xB8; break; }
if (n >= 0x80 && n <= 0x8F) n = n + 0x70;
break;
}
}
}
m[0] = n; target = target + String(m);
}
return target;
}
Теперь для вывода русского текста нужно всего лишь вызвать эту функцию. Пример:
mylcd.setTextColor(FOREGROUND);
mylcd.setTextSize(1);
mylcd.setCursor(0, 0);
mylcd.print(rus(F("абвгдежзийклмнопрстуфхцчшщъыьэюяпривет, как дела?")));
mylcd.setCursor(0, 16);
mylcd.print(rus(F("АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯПРИВЕТ, КАК ДЕЛА?")));
mylcd.setCursor(0, 32);
mylcd.print(rus(F("ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz :;.$=+#@!")));
Всего лишь писать rus("ваш текст")
Русский и английский текст можно выводить одновременно в одной строке. rus("ABCDEFG АБВГД")
Буквы "Ё" нету.
Приветствую Вас. Постарался повторить всё как написано. Далее взял пример HELLO из библиотеки. Добавил нужные строки в середине, и конце скетча. Но к сожалению русских букв не увидел, на экране Hello world, а далее абракадабра. Что я делаю не так ?
#include "ERM19264_UC1609.h" // LCD setup defines #define LCDcontrast 0x49 #define mylcdheight 64 #define mylcdwidth 192 // GPIO 5-wire SPI interface #define CD 10 // GPIO pin number pick any you want #define RST 9 // GPIO pin number pick any you want #define CS 8 // GPIO pin number pick any you want // GPIO pin number SCK(UNO 13) , HW SPI , SCK // GPIO pin number SDA(UNO 11) , HW SPI , MOSI ERM19264_UC1609 mylcd(CD, RST, CS); // instantiate object void setup() { mylcd.LCDbegin(LCDcontrast); // initialize the OLED mylcd.LCDFillScreen(0x00, 0); mylcd.setTextColor(FOREGROUND); mylcd.setFontNum(1); } void loop() { // define a buffer to cover whole screen uint8_t screenBuffer[mylcdwidth * (mylcdheight/8)]; //1536 bytes // Declare a multi buffer struct MultiBuffer mybuffer; // Intialise struct mybuffer.screenbitmap = (uint8_t*) &screenBuffer; // point it to the buffer mybuffer.width = mylcdwidth ; mybuffer.height = mylcdheight; mybuffer.xoffset = 0; mybuffer.yoffset = 0; // Assign address of struct to be the active buffer pointer mylcd.ActiveBuffer = &mybuffer; mylcd.LCDclearBuffer(); // Clear active buffer while (1) { mylcd.setCursor(20, 20); mylcd.print(F("Hello world")); mylcd.LCDupdate(); // Update screen , write active buffer to screen delay(5000); mylcd.setTextColor(FOREGROUND); mylcd.setTextSize(1); mylcd.setCursor(0, 0); mylcd.print(rus(F("абвгдежзийклмнопрстуфхцчшщъыьэюяпривет, как дела?"))); mylcd.setCursor(0, 16); mylcd.print(rus(F("АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯПРИВЕТ, КАК ДЕЛА?"))); mylcd.setCursor(0, 32); mylcd.print(rus(F("ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz :;.$=+#@!"))); } } /* Recode russian fonts from UTF-8 to Windows-1251 */ String rus(String source) { int i,k; String target; unsigned char n; char m[2] = { '0', '\0' }; k = source.length(); i = 0; while (i < k) { n = source[i]; i++; if (n >= 0xC0) { switch (n) { case 0xD0: { n = source[i]; i++; if (n == 0x81) { n = 0xA8; break; } if (n >= 0x90 && n <= 0xBF) n = n + 0x30; break; } case 0xD1: { n = source[i]; i++; if (n == 0x91) { n = 0xB8; break; } if (n >= 0x80 && n <= 0x8F) n = n + 0x70; break; } } } m[0] = n; target = target + String(m); } return target; }