Ответ: Это только у МЭЛТовских индикаторов есть нестандартная таблица символов. Для всех остальных надо в путчаре перекодировать.
static const char perecod[] = // перекодировка русских букв из таблицы win1251 в таблицу, применяемую в ЖКИ
{ 'A' , 0xa0, 'B' , 0xa1, 0xe0, 'E' , 0xa3, 0xa4, 0xa5, 0xa6, 'K' , 0xa7, 'M' , 'H' , 'O' , 0xa8, // 0xc0..0xcf
'P' , 'C' , 'T' , 0xa9, 0xaa, 'X' , 0xe1, 0xab, 0xac, 0xe2, 0xad, 0xae, 'b' , 0xaf, 0xb0, 0xb1, // 0xd0..0xdf
'a' , 0xb2, 0xb3, 0xb4, 0xe3, 'e' , 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 'o' , 0xbe, // 0xe0..0xef
'p' , 'c' , 0xbf, 'y' , 0xe4, 'x' , 0xe5, 0xc0, 0xc1, 0xe6, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7 // 0xf0..0xff
};
// if ( c )
// { if ( c >= 'А' ) // А - по русски это 0xc0 в win1251
// c = perecod[c - 'А']; // русские буквы в кодировке win1251
// else if ( c >= 0x80 ) // спецсимволы, расположенные в знакогенераторе lcd
// c += 0x40; // мы их немного перенесли (символы с кодом 0xc0..0xff перенесены в область 0x80..0xc0
if ( c )
{ a = c - 'А'; // А - по русски это 0xc0 в win1251
if ( a >= 0 )
c = perecod[a]; // русские буквы в кодировке win1251
else if ( c >= 0x80 ) // спецсимволы, расположенные в знакогенераторе lcd
c += 0x40; // мы их немного перенесли (символы с кодом 0xc0..0xff перенесены в область 0x80..0xc0
Выше 2 варианта перекодировки. Закоментированный вариант подглюкивает в компиляторе ИАР 3.30а, поэтому был немного преобразован, введением временной переменной а.