Правила Arduino IDE для кодирования символов второй половины байтовой таблицы символов (т. е. с номерами более 127) соответствуют младшему байту кодировки UTF-8 (именно в ней сохраняется текстовый файл программы. ino). В русскоязычной части таблицы UTF-8 младшие байты кодов с 80h no 8Fh занимают строчные буквы от «р» до «я», далее идут подряд 32 заглавные от «А» до «Я» (исключая букву «Ё»), а в кодах от B0h до BFh размещены оставшиеся строчные от «а» до «п». Таким образом у нас еще остается в конце байтовой таблицы незадействованная часть размером в целых 64 символа (с кодами от C0h до FFh), куда можно при надобности поместить различные служебные символы, отсутствующие в оригинале (вроде степеней или индексов). При самостоятельном дополнении таблицы не забывайте, что номера символов должны идти подряд, начиная с указанного в заголовке функции
Один из таких отсутствующих символов нам понадобится уже в следующей главе — ни в системном английском шрифте, ни в доработанных разными умельцами вариантах не содержится значка градуса. Чтобы больше ничего не менять в заголовке файла, мы не будем дополнять таблицу, а подставим этот- значок вместо одного из редко используемых символов. Закодированный в этой системе символ градуса будет выглядеть так: 0х00, 0х00, 0x0f, 0x09, 0x0f. Для замены я выбрал знак «\» («обратный слэш»), номер которого в таблице равен 0х5С. Вместо значка градуса в операторе вывода тогда придется указывать либо его код (в среде Arduino IDE это удобнее делать в восьмеричном виде так: «\134»), либо просто двойной «обратный слэш» в соответствии с правилами синтаксиса языка С.
Кроме указанных изменений, в этом шрифте я исправил цифру 0 — вместо перечеркнутого «0» скопировал для символа 0x30 строку для буквы «О» (символ номер 0x4F). Перечеркнутый ноль давно удален из всех шрифтов в пользовательских устройствах, что иногда даже бывает неудобно, — например, когда требуется воспроизвести пароль с цифрами и буквами вперемешку. И только в таблицах шрифтов для подобных индикаторов он по инерции задержался с доисторических времен господства АЦПУ и алфавитно-цифровых терминалов, но в современном антураже выглядит довольно дико. Обидно, что для строчных дисплеев со встроенными шрифтами, подобных тем, что вы также увидите в следующей главе, этот символ так просто исправить не удастся.
Архив с файлом русифицированного шрифта под именем
#include
#include "SystemFont5x7R.h" //файл шрифта
void setup () {
GLCD.Init(); //инициализация
GLCD. ClearScreen ();
}
void loop ()
{
GLCD.SelectFont(System5x7); //выбираем шрифт
GLCD.CursorToXY(0,0); //установим курсор в начальную позицию
GLCD. println ("АБВГДЕЖЗИЙКЛМНОП");
GLCD.println("PCTyOXU41imbbIb3roH");
GLCD.println ("абвгдежзийклмноп");
GLCD.println("рстуфхцчшщъыьэюя");
GLCD.println("1234567890");
GLCD.CursorToXY(19*6,4*8); //установим курсор в предпоследнюю позицию 5-й строки
GLCD.print(\\С); //градус С
GLCD.CursorToXY(4*6,7*8); //установим курсор в позицию 4 строки 8
GLCD.print("MT-12864J");
}