Ну про 5 байт на символ вроде понятно объяснили:-) Попробую поподробнее про кодировки.
Вот кодировка Windows-1251:
Код
╔══════ ACSII chart (ext) ═══════╗
║ CP: Windows-1251 ║
╟────────────────────────────────╢
║ ☺☻♥♦♣♠•◘○◙♂♀♪♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼║
║ !"#$%&'()*+,-./0123456789:;<=>?║
║@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_║
║`abcdefghijklmnopqrstuvwxyz{|}~⌂║
║__'_":┼╪_%_<_____''""•--_T_>____║
║ Ўў_¤_│§ЁcЄ<┐-RЇ°+___ч¶·ё№є>___ї║
║АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ║
║абвгдежзийклмнопрстуфхцчшщъыьэюя║
╟────────────────────────────────╢
Первая строчка (символы с кодами 0 - 0x1F) - непечатные символы, их выкинули. Поэтому теперь код символа на 0x20 меньше. Это касательно английских буковок. Теперь русские. Пятую и шестую строчки тоже выкинем, там ничего полезного кроме буквы Ё. Но Ё мы прилепим в конце. Итак, русские буквы будут начинаться с кода 0x60, там будет располагаться буква 'А' (0xC0). То есть, при отображении русских букв надо отнимать уже не 0x20, а (0xC0-0x60) = 0x60.
Ё будет иметь код 0xA0, а ё - 0xA1.
Таким образом, процедура вывода символа на дисплей будет выглядеть так:
Код
void glcdWriteChar(unsigned char ch)
{
int pos;
if (ch == 'Ё')
ch = 0xA0;
else if (ch == 'ё')
ch = 0xA1;
else if (ch >= 'A') // это русская 'А'
ch -= 0x60;
else
ch -= 0x20;
pos = ch * 5;
for (ch = 5; ch; ch--)
glcdDataWrite(pgm_read_byte(&Font5x7[pos++]));
glcdDataWrite(0);
}
В приложении - файл шрифта.
Если бы я знал, что такое электричество...