ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
27 апреля
53636 Топик полностью
VAI (12.03.2006 07:48, просмотров: 1) ответил Viland на Проблема соответствия кодов LCD . В моей программе для MSP430F149
Ответ: Это только у МЭЛТовских индикаторов есть нестандартная таблица символов. Для всех остальных надо в путчаре перекодировать.
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а, поэтому был немного преобразован, введением временной переменной а.