From 86d4f23d08439d87a29dcae625af1724a72ac754 Mon Sep 17 00:00:00 2001 From: Sergey Sirotkin Date: Wed, 23 Oct 2019 19:07:28 +0300 Subject: [PATCH] Add files via upload --- LCD_1602_RUS_ALL.h | 615 ++++++++++++++------------------------------ font_LCD_1602_RUS.h | 240 ++++++++--------- 2 files changed, 311 insertions(+), 544 deletions(-) diff --git a/LCD_1602_RUS_ALL.h b/LCD_1602_RUS_ALL.h index 2f63122..3daaa89 100644 --- a/LCD_1602_RUS_ALL.h +++ b/LCD_1602_RUS_ALL.h @@ -34,6 +34,95 @@ typedef uint8_t* _uint_farptr_t; wchar_t char_utf8[] = L" "; +//Описание класса набора изменяемых символов +class Symbol { + public: + Symbol (uint16_t _code)//Конструктор с начальной инициализацией класса по коду символа в unicode + { + index = 255;//Начальная инициализация (неинициализированы = 255) + code = _code; + } + + _uint_farptr_t getBitmap()//указатель на растровое изображение символа в дальней памяти. Для работы с таким указателем необходимо использовать функцию memcpy_PF(...) + { + uint16_t _tmp_unicode; + + for (uint8_t i = 0; i < ((sizeof(symbol_image)) / (sizeof(symbol_image[0]))); i++) + { + memcpy_PF(&_tmp_unicode, (_uint_farptr_t)symbol_image[i]._unicode, sizeof(_tmp_unicode));//Загрузка значения из дальней памяти + if (_tmp_unicode == code) + return (_uint_farptr_t)symbol_image[i]._rastr; + } + return 0xFF;//Возвращает 255 при отсутствии совпадения (ошибка) + } + + uint8_t index; + uint16_t code;//Код символа в unicode +} font[] = { //Глобальная переменная font - набор изменияемых символов + 1041, //Б + 1043, //Г + 1044, //Д + 1046, //Ж + 1047, //З + 1048, //И + + 1049, //Й + 1051, //Л + 1055, //П + 1059, //У + 1060, //Ф + + 1062, //Ц + 1063, //Ч + 1064, //Ш + 1065, //Щ + + 1066, //Ъ + 1067, //Ы + 1068, //Ь + 1069, //Э + 1070, //Ю + 1071, //Я + + 1073, //б + 1074, //в + 1075, //г + 1076, //д + 1105, //ё + 1078, //ж + + 1079, //з + 1080, //и + 1081, //й + 1082, //к + 1083, //л + + 1084, //м + 1085, //н + 1087, //п + 1090, //т + + 1092, //ф + 1094, //ц + 1095, //ч + 1096, //ш + 1097, //щ + 1098, //ъ + + 1099, //ы + 1100, //ь + 1101, //э + 1102, //ю + 1103, //я + + 0x490, //Укр. Г + 0x491, //укр. г + 0x404, //укр Е + 0x454, //укр е + 0x407, //укр I + 0x457 //укр i +}; + //Шаблон класса LCD_1602_RUS //user_custom_symbols - количество символов, доступное пользователю для использования в своих целях (не более 8) //Всего переопределяемых символов в LCD - 8. @@ -44,18 +133,12 @@ template class LCD_1602_RUS : public BASE { public: LCD_1602_RUS (uint8_t lcd_Addr, uint8_t lcd_cols, uint8_t lcd_rows, uint8_t user_custom_symbols = 0) : BASE (lcd_Addr, lcd_cols, lcd_rows)//Конструктор для подключения I2C { - max_symbol_count = 8 - user_custom_symbols; - cursor_col = 0; - cursor_row = 0; - ResetAllIndex();//Сброс значений индексов (неинициализированы = 255) + Init(user_custom_symbols); } LCD_1602_RUS (uint8_t rs, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t user_custom_symbols = 0) : BASE (rs, enable, d0, d1, d2, d3)//Конструктор для подключения 10-pin { - max_symbol_count = 8 - user_custom_symbols; - cursor_col = 0; - cursor_row = 0; - ResetAllIndex();//Сброс значений индексов (неинициализированы = 255) + Init(user_custom_symbols); } void print(const wchar_t* _str) @@ -101,7 +184,7 @@ template class LCD_1602_RUS : public BASE { cursor_col++; } } - + template void print(T val, int base) { cursor_col += BASE::print(val, base); @@ -151,28 +234,27 @@ template class LCD_1602_RUS : public BASE { //*ascii - указатель на массив из двух байт wchar_t *ascii_utf8(unsigned char *ascii) { - //if ((ascii[0] == 0xD0) || (ascii[0] == 0xD1)) if (ascii[0] > 0x7F) - {//Кириллица - if ((ascii[0] == 0xD0)&&(ascii[1] == 0x81)) *char_utf8 = 0x401; //код ASCII буквы Ё (0xD081) - else if ((ascii[0] == 0xD1)&&(ascii[1] == 0x91)) *char_utf8 = 0x451; //код ASCII буквы ё (0xD191) - else if ((ascii[0] == 0xD2)&&(ascii[1] == 0x90)) *char_utf8 = 0x490; //код Ukr. ASCII буквы Г (0xD290) - else if ((ascii[0] == 0xD2)&&(ascii[1] == 0x91)) *char_utf8 = 0x491; //код Ukr. ASCII буквы г (0xD291) - else if ((ascii[0] == 0xD0)&&(ascii[1] == 0x84)) *char_utf8 = 0x404; //код Ukr. ASCII буквы Е (0xD084) - else if ((ascii[0] == 0xD1)&&(ascii[1] == 0x94)) *char_utf8 = 0x454; //код Ukr. ASCII буквы е (0xD194) - else if ((ascii[0] == 0xD0)&&(ascii[1] == 0x87)) *char_utf8 = 0x407; //код Ukr. ASCII буквы I (0xD087) - else if ((ascii[0] == 0xD1)&&(ascii[1] == 0x97)) *char_utf8 = 0x457; //код Ukr. ASCII буквы i (0xD087) - else if ((ascii[0] == 0xD0)&&(ascii[1] >= 0x90)&&(ascii[1] <= 0xBF)) //остальные буквы русского алфавита (А...Я а...п) + { //Кириллица + if ((ascii[0] == 0xD0) && (ascii[1] == 0x81)) *char_utf8 = 0x401; //код ASCII буквы Ё (0xD081) + else if ((ascii[0] == 0xD1) && (ascii[1] == 0x91)) *char_utf8 = 0x451; //код ASCII буквы ё (0xD191) + else if ((ascii[0] == 0xD2) && (ascii[1] == 0x90)) *char_utf8 = 0x490; //код Ukr. ASCII буквы Г (0xD290) + else if ((ascii[0] == 0xD2) && (ascii[1] == 0x91)) *char_utf8 = 0x491; //код Ukr. ASCII буквы г (0xD291) + else if ((ascii[0] == 0xD0) && (ascii[1] == 0x84)) *char_utf8 = 0x404; //код Ukr. ASCII буквы Е (0xD084) + else if ((ascii[0] == 0xD1) && (ascii[1] == 0x94)) *char_utf8 = 0x454; //код Ukr. ASCII буквы е (0xD194) + else if ((ascii[0] == 0xD0) && (ascii[1] == 0x87)) *char_utf8 = 0x407; //код Ukr. ASCII буквы I (0xD087) + else if ((ascii[0] == 0xD1) && (ascii[1] == 0x97)) *char_utf8 = 0x457; //код Ukr. ASCII буквы i (0xD087) + else if ((ascii[0] == 0xD0) && (ascii[1] >= 0x90) && (ascii[1] <= 0xBF)) //остальные буквы русского алфавита (А...Я а...п) { *char_utf8 = ascii[1] + 896; } - else if ((ascii[0] == 0xD1)&&(ascii[1] >= 0x80)&&(ascii[1] <= 0x8F)) //остальные буквы русского алфавита (р...я) + else if ((ascii[0] == 0xD1) && (ascii[1] >= 0x80) && (ascii[1] <= 0x8F)) //остальные буквы русского алфавита (р...я) { *char_utf8 = ascii[1] + 960; } } else - {//Латиница + { //Латиница *char_utf8 = ascii[0]; } return char_utf8; @@ -180,7 +262,26 @@ template class LCD_1602_RUS : public BASE { private: - void CharSetToLCD(uint8_t *array, uint8_t *index) + void Init(uint8_t _user_custom_symbols)//Инициализация конструктора + { + max_symbol_count = 8 - _user_custom_symbols; + cursor_col = 0; + cursor_row = 0; + ResetAllIndex();//Сброс значений индексов (неинициализированы = 255) + } + + uint8_t getIndex(uint16_t unicode)//Функция возвращает индекс символа в массиве font по передаваемому в функцию коду unicode + //unicode - код символа в unicode + { + for (uint8_t i = 0; i < ((sizeof(font)) / (sizeof(font[0]))); i++) + { + if (unicode == font[i].code) + return i; + } + return 0xFF;//Возвращает 255 при отсутствии совпадения (ошибка) + } + + void CharSetToLCD(uint8_t *array, uint8_t *index)//Загрузка растрового изображения символа в LCD { uint8_t x, y; @@ -206,347 +307,87 @@ template class LCD_1602_RUS : public BASE { void ResetAllIndex() { symbol_index = 0; - index_rus_B = 255; - index_rus_G = 255; - index_rus_D = 255; - index_rus_ZH = 255; - index_rus_Z = 255; - index_rus_I = 255; - index_rus_II = 255; - index_rus_L = 255; - index_rus_P = 255; - index_rus_U = 255; - index_rus_F = 255; - index_rus_TS = 255; - index_rus_CH = 255; - index_rus_SH = 255; - index_rus_SCH = 255; - index_rus_tverd = 255; - index_rus_Y = 255; - index_rus_myagk = 255; - index_rus_EE = 255; - index_rus_YU = 255; - index_rus_YA = 255; - index_rus_b = 255; - index_rus_v = 255; - index_rus_g = 255; - index_rus_d = 255; - index_rus_yo = 255; - index_rus_zh = 255; - index_rus_z = 255; - index_rus_i = 255; - index_rus_ii = 255; - index_rus_k = 255; - index_rus_l = 255; - index_rus_m = 255; - index_rus_n = 255; - index_rus_p = 255; - index_rus_t = 255; - index_rus_u = 255; - index_rus_f = 255; - index_rus_ts = 255; - index_rus_ch = 255; - index_rus_sh = 255; - index_rus_sch = 255; - index_rus_tverd_mal = 255; - index_rus_y = 255; - index_rus_myagk_mal = 255; - index_rus_ee = 255; - index_rus_yu = 255; - index_rus_ya = 255; - index_ukr_G = 255; - index_ukr_g = 255; - index_ukr_EE = 255; - index_ukr_ee = 255; - index_ukr_II = 255; - index_ukr_ii = 255; + for (uint8_t i = 0; i < ((sizeof(font)) / (sizeof(font[0]))); i++) + font[i].index = 255; } void printwc(const wchar_t _chr) { uint8_t rus_[8]; - switch (_chr) - { - //Русский алфавит, требующий новых символов + + if (_chr < 128) //Английский алфавит без изменения + BASE::print((char)_chr); + else + //Кириллица //Единовременно может быть заменено только 8 символов - case 1041: //Б - memcpy_PF(rus_, (_uint_farptr_t)rus_B, 8); - CharSetToLCD((uint8_t *)rus_, &index_rus_B); - break; - case 1043: //Г - memcpy_PF(rus_, (_uint_farptr_t)rus_G, 8); - CharSetToLCD((uint8_t *)rus_, &index_rus_G); - break; - case 1044: //Д - memcpy_PF(rus_, (_uint_farptr_t)rus_D, 8); - CharSetToLCD((uint8_t *)rus_, &index_rus_D); - break; - case 1046: //Ж - memcpy_PF(rus_, (_uint_farptr_t)rus_ZH, 8); - CharSetToLCD((uint8_t *)rus_, &index_rus_ZH); - break; - case 1047: //З - memcpy_PF(rus_, (_uint_farptr_t)rus_Z, 8); - CharSetToLCD((uint8_t *)rus_, &index_rus_Z); - break; - case 1048: //И - memcpy_PF(rus_, (_uint_farptr_t)rus_I, 8); - CharSetToLCD((uint8_t *)rus_, &index_rus_I); - break; - case 1049: //Й - memcpy_PF(rus_, (_uint_farptr_t)rus_II, 8); - CharSetToLCD((uint8_t *)rus_, &index_rus_II); - break; - case 1051: //Л - memcpy_PF(rus_, (_uint_farptr_t)rus_L, 8); - CharSetToLCD((uint8_t *)rus_, &index_rus_L); - break; - case 1055: //П - memcpy_PF(rus_, (_uint_farptr_t)rus_P, 8); - CharSetToLCD((uint8_t *)rus_, &index_rus_P); - break; - case 1059: //У - memcpy_PF(rus_, (_uint_farptr_t)rus_U, 8); - CharSetToLCD((uint8_t *)rus_, &index_rus_U); - break; - case 1060: //Ф - memcpy_PF(rus_, (_uint_farptr_t)rus_F, 8); - CharSetToLCD((uint8_t *)rus_, &index_rus_F); - break; - case 1062: //Ц - memcpy_PF(rus_, (_uint_farptr_t)rus_TS, 8); - CharSetToLCD((uint8_t *)rus_, &index_rus_TS); - break; - case 1063: //Ч - memcpy_PF(rus_, (_uint_farptr_t)rus_CH, 8); - CharSetToLCD((uint8_t *)rus_, &index_rus_CH); - break; - case 1064: //Ш - memcpy_PF(rus_, (_uint_farptr_t)rus_SH, 8); - CharSetToLCD((uint8_t *)rus_, &index_rus_SH); - break; - case 1065: //Щ - memcpy_PF(rus_, (_uint_farptr_t)rus_SCH, 8); - CharSetToLCD((uint8_t *)rus_, &index_rus_SCH); - break; - case 1066: //Ъ - memcpy_PF(rus_, (_uint_farptr_t)rus_tverd, 8); - CharSetToLCD((uint8_t *)rus_, &index_rus_tverd); - break; - case 1067: //Ы - memcpy_PF(rus_, (_uint_farptr_t)rus_Y, 8); - CharSetToLCD((uint8_t *)rus_, &index_rus_Y); - break; - case 1068: //Ь - memcpy_PF(rus_, (_uint_farptr_t)rus_myagk, 8); - CharSetToLCD((uint8_t *)rus_, &index_rus_myagk); - break; - case 1069: //Э - memcpy_PF(rus_, (_uint_farptr_t)rus_EE, 8); - CharSetToLCD((uint8_t *)rus_, &index_rus_EE); - break; - case 1070: //Ю - memcpy_PF(rus_, (_uint_farptr_t)rus_YU, 8); - CharSetToLCD((uint8_t *)rus_, &index_rus_YU); - break; - case 1071: //Я - memcpy_PF(rus_, (_uint_farptr_t)rus_YA, 8); - CharSetToLCD((uint8_t *)rus_, &index_rus_YA); - break; - case 1073: //б - memcpy_PF(rus_, (_uint_farptr_t)rus_b, 8); - CharSetToLCD((uint8_t *)rus_, &index_rus_b); - break; - case 1074: //в - memcpy_PF(rus_, (_uint_farptr_t)rus_v, 8); - CharSetToLCD((uint8_t *)rus_, &index_rus_v); - break; - case 1075: //г - memcpy_PF(rus_, (_uint_farptr_t)rus_g, 8); - CharSetToLCD((uint8_t *)rus_, &index_rus_g); - break; - case 1076: //д - memcpy_PF(rus_, (_uint_farptr_t)rus_d, 8); - CharSetToLCD((uint8_t *)rus_, &index_rus_d); - break; - case 1105: //ё - memcpy_PF(rus_, (_uint_farptr_t)rus_yo, 8); - CharSetToLCD((uint8_t *)rus_, &index_rus_yo); - break; - case 1078: //ж - memcpy_PF(rus_, (_uint_farptr_t)rus_zh, 8); - CharSetToLCD((uint8_t *)rus_, &index_rus_zh); - break; - case 1079: //з - memcpy_PF(rus_, (_uint_farptr_t)rus_z, 8); - CharSetToLCD((uint8_t *)rus_, &index_rus_z); - break; - case 1080: //и - memcpy_PF(rus_, (_uint_farptr_t)rus_i, 8); - CharSetToLCD((uint8_t *)rus_, &index_rus_i); - break; - case 1081: //й - memcpy_PF(rus_, (_uint_farptr_t)rus_ii, 8); - CharSetToLCD((uint8_t *)rus_, &index_rus_ii); - break; - case 1082: //к - memcpy_PF(rus_, (_uint_farptr_t)rus_k, 8); - CharSetToLCD((uint8_t *)rus_, &index_rus_k); - break; - case 1083: //л - memcpy_PF(rus_, (_uint_farptr_t)rus_l, 8); - CharSetToLCD((uint8_t *)rus_, &index_rus_l); - break; - case 1084: //м - memcpy_PF(rus_, (_uint_farptr_t)rus_m, 8); - CharSetToLCD((uint8_t *)rus_, &index_rus_m); - break; - case 1085: //н - memcpy_PF(rus_, (_uint_farptr_t)rus_n, 8); - CharSetToLCD((uint8_t *)rus_, &index_rus_n); - break; - case 1087: //п - memcpy_PF(rus_, (_uint_farptr_t)rus_p, 8); - CharSetToLCD((uint8_t *)rus_, &index_rus_p); - break; - case 1090: //т - memcpy_PF(rus_, (_uint_farptr_t)rus_t, 8); - CharSetToLCD((uint8_t *)rus_, &index_rus_t); - break; - case 1092: //ф - memcpy_PF(rus_, (_uint_farptr_t)rus_f, 8); - CharSetToLCD((uint8_t *)rus_, &index_rus_f); - break; - case 1094: //ц - memcpy_PF(rus_, (_uint_farptr_t)rus_ts, 8); - CharSetToLCD((uint8_t *)rus_, &index_rus_ts); - break; - case 1095: //ч - memcpy_PF(rus_, (_uint_farptr_t)rus_ch, 8); - CharSetToLCD((uint8_t *)rus_, &index_rus_ch); - break; - case 1096: //ш - memcpy_PF(rus_, (_uint_farptr_t)rus_sh, 8); - CharSetToLCD((uint8_t *)rus_, &index_rus_sh); - break; - case 1097: //щ - memcpy_PF(rus_, (_uint_farptr_t)rus_sch, 8); - CharSetToLCD((uint8_t *)rus_, &index_rus_sch); - break; - case 1098: //ъ - memcpy_PF(rus_, (_uint_farptr_t)rus_tverd_mal, 8); - CharSetToLCD((uint8_t *)rus_, &index_rus_tverd_mal); - break; - case 1099: //ы - memcpy_PF(rus_, (_uint_farptr_t)rus_y, 8); - CharSetToLCD((uint8_t *)rus_, &index_rus_y); - break; - case 1100: //ь - memcpy_PF(rus_, (_uint_farptr_t)rus_myagk_mal, 8); - CharSetToLCD((uint8_t *)rus_, &index_rus_myagk_mal); - break; - case 1101: //э - memcpy_PF(rus_, (_uint_farptr_t)rus_ee, 8); - CharSetToLCD((uint8_t *)rus_, &index_rus_ee); - break; - case 1102: //ю - memcpy_PF(rus_, (_uint_farptr_t)rus_yu, 8); - CharSetToLCD((uint8_t *)rus_, &index_rus_yu); - break; - case 1103: //я - memcpy_PF(rus_, (_uint_farptr_t)rus_ya, 8); - CharSetToLCD((uint8_t *)rus_, &index_rus_ya); - break; - //Украинские буквы - case 0x490: //укр. Г - memcpy_PF(rus_, (_uint_farptr_t)ukr_G, 8); - CharSetToLCD((uint8_t *)rus_, &index_ukr_G); - break; - case 0x491: //укр. г - memcpy_PF(rus_, (_uint_farptr_t)ukr_g, 8); - CharSetToLCD((uint8_t *)rus_, &index_ukr_g); - break; - case 0x404: //укр. Е - memcpy_PF(rus_, (_uint_farptr_t)ukr_EE, 8); - CharSetToLCD((uint8_t *)rus_, &index_ukr_EE); - break; - case 0x454: //укр. е - memcpy_PF(rus_, (_uint_farptr_t)ukr_ee, 8); - CharSetToLCD((uint8_t *)rus_, &index_ukr_ee); - break; - case 0x407: //укр. I - memcpy_PF(rus_, (_uint_farptr_t)ukr_II, 8); - CharSetToLCD((uint8_t *)rus_, &index_ukr_II); - break; - case 0x457: //укр. i - memcpy_PF(rus_, (_uint_farptr_t)ukr_ii, 8); - CharSetToLCD((uint8_t *)rus_, &index_ukr_ii); - break; - //Русский алфавит, использующий одинаковые с английским алфавитом символы - case 1040: //А - BASE::print("A"); - break; - case 1042: //В - BASE::print("B"); - break; - case 1045: //Е - BASE::print("E"); - break; - case 1025: //Ё - BASE::print("E"); - break; - case 1050: //К - BASE::print("K"); - break; - case 1052: //M - BASE::print("M"); - break; - case 1053: //H - BASE::print("H"); - break; - case 1054: //O - BASE::print("O"); - break; - case 1056: //P - BASE::print("P"); - break; - case 1057: //C - BASE::print("C"); - break; - case 1058: //T - BASE::print("T"); - break; - case 1061: //X - BASE::print("X"); - break; - case 1072: //а - BASE::print("a"); - break; - case 1077: //е - BASE::print("e"); - break; - case 1086: //o - BASE::print("o"); - break; - case 1088: //p - BASE::print("p"); - break; - case 1089: //c - BASE::print("c"); - break; - case 1091: //y - BASE::print("y"); - break; - case 1093: //x - BASE::print("x"); - break; - case 0x00B0: //Знак градуса - BASE::write(223); - break; - //Английский алфавит без изменения - default: - BASE::print((char)_chr); - break; - } + switch (_chr) + { + //Русский алфавит, использующий одинаковые с английским алфавитом символы + case 1040: //А + BASE::print("A"); + break; + case 1042: //В + BASE::print("B"); + break; + case 1045: //Е + BASE::print("E"); + break; + case 1025: //Ё + BASE::print("E"); + break; + case 1050: //К + BASE::print("K"); + break; + case 1052: //M + BASE::print("M"); + break; + case 1053: //H + BASE::print("H"); + break; + case 1054: //O + BASE::print("O"); + break; + case 1056: //P + BASE::print("P"); + break; + case 1057: //C + BASE::print("C"); + break; + case 1058: //T + BASE::print("T"); + break; + case 1061: //X + BASE::print("X"); + break; + case 1072: //а + BASE::print("a"); + break; + case 1077: //е + BASE::print("e"); + break; + case 1086: //o + BASE::print("o"); + break; + case 1088: //p + BASE::print("p"); + break; + case 1089: //c + BASE::print("c"); + break; + case 1091: //y + BASE::print("y"); + break; + case 1093: //x + BASE::print("x"); + break; + case 0x00B0: //Знак градуса + BASE::write(223); + break; + default: + //Русский алфавит, требующий новых символов + memcpy_PF(rus_, (_uint_farptr_t)font[getIndex(_chr)].getBitmap(), 8); + CharSetToLCD((uint8_t *)rus_, &font[getIndex(_chr)].index); + break; + } } uint8_t mbtowc(wchar_t *_chr, char *_str, uint8_t mb_num) @@ -566,62 +407,6 @@ template class LCD_1602_RUS : public BASE { int symbol_index;//Индекс символа (от 0 до MAX_SYMBOL_COUNT) uint8_t cursor_col; uint8_t cursor_row; - - //===Буквы==== - uint8_t index_rus_B; - uint8_t index_rus_G; - uint8_t index_rus_D; - uint8_t index_rus_ZH; - uint8_t index_rus_Z; - uint8_t index_rus_I; - uint8_t index_rus_II; - uint8_t index_rus_L; - uint8_t index_rus_P; - uint8_t index_rus_U; - uint8_t index_rus_F; - uint8_t index_rus_TS; - uint8_t index_rus_CH; - uint8_t index_rus_SH; - uint8_t index_rus_SCH; - uint8_t index_rus_tverd; - uint8_t index_rus_Y; - uint8_t index_rus_myagk; - uint8_t index_rus_EE; - uint8_t index_rus_YU; - uint8_t index_rus_YA; - uint8_t index_rus_b; - uint8_t index_rus_v; - uint8_t index_rus_g; - uint8_t index_rus_d; - uint8_t index_rus_yo; - uint8_t index_rus_zh; - uint8_t index_rus_z; - uint8_t index_rus_i; - uint8_t index_rus_ii; - uint8_t index_rus_k; - uint8_t index_rus_l; - uint8_t index_rus_m; - uint8_t index_rus_n; - uint8_t index_rus_p; - uint8_t index_rus_t; - uint8_t index_rus_u; - uint8_t index_rus_f; - uint8_t index_rus_ts; - uint8_t index_rus_ch; - uint8_t index_rus_sh; - uint8_t index_rus_sch; - uint8_t index_rus_tverd_mal; - uint8_t index_rus_y; - uint8_t index_rus_myagk_mal; - uint8_t index_rus_ee; - uint8_t index_rus_yu; - uint8_t index_rus_ya; - uint8_t index_ukr_G; - uint8_t index_ukr_g; - uint8_t index_ukr_EE; - uint8_t index_ukr_ee; - uint8_t index_ukr_II; - uint8_t index_ukr_ii; }; #endif diff --git a/font_LCD_1602_RUS.h b/font_LCD_1602_RUS.h index ceedec2..c651651 100644 --- a/font_LCD_1602_RUS.h +++ b/font_LCD_1602_RUS.h @@ -1,10 +1,11 @@ #ifndef _LCD_1602_RUS_FONT #define _LCD_1602_RUS_FONT -//====Набор изображений кириллических символов -// -//Б -const uint8_t rus_B[8] PROGMEM = { +struct { + uint8_t _rastr[8];//Растровое изображение символа + uint16_t _unicode;//Код символа в unicode +} const symbol_image[] PROGMEM = { //Набор изображений кириллических символов +{{//Б 0b11111, 0b10000, 0b10000, @@ -13,9 +14,8 @@ const uint8_t rus_B[8] PROGMEM = { 0b10001, 0b11110, 0b00000 -}; -//Г -const uint8_t rus_G[8] PROGMEM = { +}, 1041}, +{{//Г 0b11111, 0b10000, 0b10000, @@ -24,9 +24,8 @@ const uint8_t rus_G[8] PROGMEM = { 0b10000, 0b10000, 0b00000 -}; -//Д -const uint8_t rus_D[8] PROGMEM = { +}, 1043}, +{{//Д 0b00110, 0b01010, 0b01010, @@ -35,9 +34,8 @@ const uint8_t rus_D[8] PROGMEM = { 0b01010, 0b11111, 0b10001 -}; -//Ж -const uint8_t rus_ZH[8] PROGMEM = { +}, 1044}, +{{//Ж 0b10101, 0b10101, 0b10101, @@ -46,9 +44,8 @@ const uint8_t rus_ZH[8] PROGMEM = { 0b10101, 0b10101, 0b00000 -}; -//З -const uint8_t rus_Z[8] PROGMEM = { +}, 1046}, +{{//З 0b01110, 0b10001, 0b00001, @@ -57,9 +54,8 @@ const uint8_t rus_Z[8] PROGMEM = { 0b10001, 0b01110, 0b00000 -}; -//И -const byte rus_I[8] PROGMEM = { +}, 1047}, +{{//И 0b10001, 0b10001, 0b10001, @@ -68,9 +64,8 @@ const byte rus_I[8] PROGMEM = { 0b11001, 0b10001, 0b00000 -}; -//Й -const uint8_t rus_II[8] PROGMEM = { +}, 1048}, +{{//Й 0b10101, 0b10001, 0b10001, @@ -79,9 +74,8 @@ const uint8_t rus_II[8] PROGMEM = { 0b11001, 0b10001, 0b00000 -}; -//Л -const uint8_t rus_L[8] PROGMEM = { +}, 1049}, +{{//Л 0b00111, 0b01001, 0b01001, @@ -90,9 +84,8 @@ const uint8_t rus_L[8] PROGMEM = { 0b01001, 0b10001, 0b00000 -}; -//П -const uint8_t rus_P[8] PROGMEM = { +}, 1051}, +{{//П 0b11111, 0b10001, 0b10001, @@ -101,9 +94,8 @@ const uint8_t rus_P[8] PROGMEM = { 0b10001, 0b10001, 0b00000 -}; -//У -const uint8_t rus_U[8] PROGMEM = { +}, 1055}, +{{//У 0b10001, 0b10001, 0b10001, @@ -112,9 +104,8 @@ const uint8_t rus_U[8] PROGMEM = { 0b10001, 0b01110, 0b00000 -}; -//Ф -const uint8_t rus_F[8] PROGMEM = { +}, 1059}, +{{//Ф 0b00100, 0b01110, 0b10101, @@ -123,9 +114,8 @@ const uint8_t rus_F[8] PROGMEM = { 0b01110, 0b00100, 0b00000 -}; -//Ц -const uint8_t rus_TS[8] PROGMEM = { +}, 1060}, +{{//Ц 0b10010, 0b10010, 0b10010, @@ -134,9 +124,8 @@ const uint8_t rus_TS[8] PROGMEM = { 0b10010, 0b11111, 0b00001 -}; -//Ч -const uint8_t rus_CH[8] PROGMEM = { +}, 1062}, +{{//Ч 0b10001, 0b10001, 0b10001, @@ -145,9 +134,8 @@ const uint8_t rus_CH[8] PROGMEM = { 0b00001, 0b00001, 0b00000 -}; -//Ш -const uint8_t rus_SH[8] PROGMEM = { +}, 1063}, +{{//Ш 0b10001, 0b10001, 0b10001, @@ -156,9 +144,8 @@ const uint8_t rus_SH[8] PROGMEM = { 0b10101, 0b11111, 0b00000 -}; -//Щ -const uint8_t rus_SCH[8] PROGMEM = { +}, 1064}, +{{//Щ 0b10001, 0b10001, 0b10001, @@ -167,9 +154,8 @@ const uint8_t rus_SCH[8] PROGMEM = { 0b10101, 0b11111, 0b00001 -}; -//Ъ -const uint8_t rus_tverd[8] PROGMEM = { +}, 1065}, +{{//Ъ 0b11000, 0b01000, 0b01000, @@ -178,9 +164,8 @@ const uint8_t rus_tverd[8] PROGMEM = { 0b01001, 0b01110, 0b00000 -}; -//Ы -const uint8_t rus_Y[8] PROGMEM = { +}, 1066}, +{{//Ы 0b10001, 0b10001, 0b10001, @@ -189,9 +174,8 @@ const uint8_t rus_Y[8] PROGMEM = { 0b10011, 0b11101, 0b00000 -}; -//Ь -const uint8_t rus_myagk[8] PROGMEM = { +}, 1067}, +{{//Ь 0b10000, 0b10000, 0b10000, @@ -200,9 +184,8 @@ const uint8_t rus_myagk[8] PROGMEM = { 0b10001, 0b11110, 0b00000 -}; -//Э -const uint8_t rus_EE[8] PROGMEM = { +}, 1068}, +{{//Э 0b01110, 0b10001, 0b00001, @@ -211,9 +194,8 @@ const uint8_t rus_EE[8] PROGMEM = { 0b10001, 0b01110, 0b00000 -}; -//Ю -const uint8_t rus_YU[8] PROGMEM = { +}, 1069}, +{{//Ю 0b10010, 0b10101, 0b10101, @@ -222,9 +204,8 @@ const uint8_t rus_YU[8] PROGMEM = { 0b10101, 0b10010, 0b00000 -}; -//Я -const uint8_t rus_YA[8] PROGMEM = { +}, 1070}, +{{//Я 0b01111, 0b10001, 0b10001, @@ -233,8 +214,8 @@ const uint8_t rus_YA[8] PROGMEM = { 0b01001, 0b10001, 0b00000 -}; -const uint8_t rus_b[8] PROGMEM = { +}, 1071}, +{{//б 0b00011, 0b01100, 0b10000, @@ -243,8 +224,8 @@ const uint8_t rus_b[8] PROGMEM = { 0b10001, 0b01110, 0b00000 -};//б -const uint8_t rus_v[8] PROGMEM = { +}, 1073}, +{{//в 0b00000, 0b00000, 0b11110, @@ -253,8 +234,8 @@ const uint8_t rus_v[8] PROGMEM = { 0b10001, 0b11110, 0b00000 -};//в -const uint8_t rus_g[8] PROGMEM = { +}, 1074}, +{{//г 0b00000, 0b00000, 0b11110, @@ -263,8 +244,8 @@ const uint8_t rus_g[8] PROGMEM = { 0b10000, 0b10000, 0b00000 -};//г -const uint8_t rus_d[8] PROGMEM = { +}, 1075}, +{{//д 0b00000, 0b00000, 0b00110, @@ -273,8 +254,8 @@ const uint8_t rus_d[8] PROGMEM = { 0b01010, 0b11111, 0b10001 -};//д -const uint8_t rus_yo[8] PROGMEM = { +}, 1076}, +{{//ё 0b01010, 0b00000, 0b01110, @@ -283,8 +264,8 @@ const uint8_t rus_yo[8] PROGMEM = { 0b10000, 0b01111, 0b00000 -};//ё -const uint8_t rus_zh[8] PROGMEM = { +}, 1105}, +{{//ж 0b00000, 0b00000, 0b10101, @@ -293,8 +274,8 @@ const uint8_t rus_zh[8] PROGMEM = { 0b10101, 0b10101, 0b00000 -};//ж -const uint8_t rus_z[8] PROGMEM = { +}, 1078}, +{{//з 0b00000, 0b00000, 0b01110, @@ -303,8 +284,8 @@ const uint8_t rus_z[8] PROGMEM = { 0b10001, 0b01110, 0b00000 -};//з -const uint8_t rus_i[8] PROGMEM = { +}, 1079}, +{{//и 0b00000, 0b00000, 0b10001, @@ -313,8 +294,8 @@ const uint8_t rus_i[8] PROGMEM = { 0b11001, 0b10001, 0b00000 -};//и -const uint8_t rus_ii[8] PROGMEM = { +}, 1080}, +{{//й 0b01010, 0b00100, 0b10001, @@ -323,8 +304,8 @@ const uint8_t rus_ii[8] PROGMEM = { 0b11001, 0b10001, 0b00000 -};//й -const uint8_t rus_k[8] PROGMEM = { +}, 1081}, +{{//к 0b00000, 0b00000, 0b10010, @@ -333,8 +314,8 @@ const uint8_t rus_k[8] PROGMEM = { 0b10100, 0b10010, 0b00000 -};//к -const uint8_t rus_l[8] PROGMEM = { +}, 1082}, +{{//л 0b00000, 0b00000, 0b00111, @@ -343,8 +324,8 @@ const uint8_t rus_l[8] PROGMEM = { 0b01001, 0b10001, 0b00000 -};//л -const uint8_t rus_m[8] PROGMEM = { +}, 1083}, +{{//м 0b00000, 0b00000, 0b10001, @@ -353,8 +334,8 @@ const uint8_t rus_m[8] PROGMEM = { 0b10001, 0b10001, 0b00000 -};//м -const uint8_t rus_n[8] PROGMEM = { +}, 1084}, +{{//н 0b00000, 0b00000, 0b10001, @@ -363,8 +344,8 @@ const uint8_t rus_n[8] PROGMEM = { 0b10001, 0b10001, 0b00000 -};//н -const uint8_t rus_p[8] PROGMEM = { +}, 1085}, +{{//п 0b00000, 0b00000, 0b11111, @@ -373,8 +354,8 @@ const uint8_t rus_p[8] PROGMEM = { 0b10001, 0b10001, 0b00000 -};//п -const uint8_t rus_t[8] PROGMEM = { +}, 1087}, +{{//т 0b00000, 0b00000, 0b11111, @@ -383,8 +364,8 @@ const uint8_t rus_t[8] PROGMEM = { 0b00100, 0b00100, 0b00000 -};//т -const uint8_t rus_f[8] PROGMEM = { +}, 1090}, +{{//ф 0b00000, 0b00000, 0b00100, @@ -393,8 +374,8 @@ const uint8_t rus_f[8] PROGMEM = { 0b01110, 0b00100, 0b00000 -};//ф -const uint8_t rus_ts[8] PROGMEM = { +}, 1092}, +{{//ц 0b00000, 0b00000, 0b10010, @@ -403,8 +384,8 @@ const uint8_t rus_ts[8] PROGMEM = { 0b10010, 0b11111, 0b00001 -};//ц -const uint8_t rus_ch[8] PROGMEM = { +}, 1094}, +{{//ч 0b00000, 0b00000, 0b10001, @@ -413,8 +394,8 @@ const uint8_t rus_ch[8] PROGMEM = { 0b00001, 0b00001, 0b00000 -};//ч -const uint8_t rus_sh[8] PROGMEM = { +}, 1095}, +{{//ш 0b00000, 0b00000, 0b10101, @@ -423,8 +404,8 @@ const uint8_t rus_sh[8] PROGMEM = { 0b10101, 0b11111, 0b00000 -};//ш -const uint8_t rus_sch[8] PROGMEM = { +}, 1096}, +{{//щ 0b00000, 0b00000, 0b10101, @@ -433,8 +414,8 @@ const uint8_t rus_sch[8] PROGMEM = { 0b10101, 0b11111, 0b00001 -};//щ -const uint8_t rus_tverd_mal[8] PROGMEM = { +}, 1097}, +{{//ъ 0b00000, 0b00000, 0b11000, @@ -443,8 +424,8 @@ const uint8_t rus_tverd_mal[8] PROGMEM = { 0b01001, 0b01110, 0b00000 -};//ъ -const uint8_t rus_y[8] PROGMEM = { +}, 1098}, +{{//ы 0b00000, 0b00000, 0b10001, @@ -453,8 +434,8 @@ const uint8_t rus_y[8] PROGMEM = { 0b10011, 0b11101, 0b00000 -};//ы -const uint8_t rus_myagk_mal[8] PROGMEM = { +}, 1099}, +{{//ь 0b00000, 0b00000, 0b10000, @@ -463,8 +444,8 @@ const uint8_t rus_myagk_mal[8] PROGMEM = { 0b10001, 0b11110, 0b00000 -};//ь -const uint8_t rus_ee[8] PROGMEM = { +}, 1100}, +{{//э 0b00000, 0b00000, 0b01110, @@ -473,8 +454,8 @@ const uint8_t rus_ee[8] PROGMEM = { 0b10001, 0b01110, 0b00000 -};//э -const uint8_t rus_yu[8] PROGMEM = { +}, 1101}, +{{//ю 0b00000, 0b00000, 0b10010, @@ -483,8 +464,8 @@ const uint8_t rus_yu[8] PROGMEM = { 0b10101, 0b10010, 0b00000 -};//ю -const uint8_t rus_ya[8] PROGMEM = { +}, 1102}, +{{//я 0b00000, 0b00000, 0b01111, @@ -493,11 +474,11 @@ const uint8_t rus_ya[8] PROGMEM = { 0b00101, 0b01001, 0b00000 -};//я +}, 1103}, // //Украинские буквы // -const uint8_t ukr_G[8] PROGMEM = { +{{//укр. Г 0b00001, 0b11111, 0b10000, @@ -506,8 +487,8 @@ const uint8_t ukr_G[8] PROGMEM = { 0b10000, 0b10000, 0b00000 -};//укр. Г -const uint8_t ukr_g[8] PROGMEM = { +}, 0x490}, +{{//укр. г 0b00000, 0b00010, 0b11110, @@ -516,8 +497,8 @@ const uint8_t ukr_g[8] PROGMEM = { 0b10000, 0b10000, 0b00000 -};//укр. г -const uint8_t ukr_EE[8] PROGMEM = { +}, 0x491}, +{{//укр. Е 0b01111, 0b10000, 0b10000, @@ -526,8 +507,8 @@ const uint8_t ukr_EE[8] PROGMEM = { 0b10000, 0b01111, 0b00000 -};//укр. Е -const uint8_t ukr_ee[8] PROGMEM = { +}, 0x404}, +{{//укр. е 0b00000, 0b00000, 0b01110, @@ -536,8 +517,8 @@ const uint8_t ukr_ee[8] PROGMEM = { 0b10000, 0b01110, 0b00000 -};//укр. е -const uint8_t ukr_II[8] PROGMEM = { +}, 0x454}, +{{//укр. I 0b01010, 0b00000, 0b01110, @@ -546,8 +527,8 @@ const uint8_t ukr_II[8] PROGMEM = { 0b00100, 0b01110, 0b00000 -};//укр. I -const uint8_t ukr_ii[8] PROGMEM = { +}, 0x407}, +{{//укр. i 0b00000, 0b01010, 0b00000, @@ -556,6 +537,7 @@ const uint8_t ukr_ii[8] PROGMEM = { 0b00100, 0b01110, 0b00000 -};//укр. i +}, 0x457} +}; #endif