Цитата(chief_olimp @ Dec 29 2008, 21:43)

Да нет похоже не то. За основу приходится брать вот эту таблицу
Кодовая таблица для русифицированного индикатора И соответственно городить таблицу где каждому символу в таблице А соответствует символ в уникоде в таблице Б. Ну фактически таблица только одна и обращатся к ней нужно предварительно от ссылки отнимае некое число. У меня пока 160 но будет минимум 48
Как раз ее я и имел ввиду, когда говорил о выводе символов на ЖК-индикатор. Только я предлагал перекодировку не напрямую, из Unicode в кода ЖК, а через кодировку CP-1251, т.е.
Unicode -> CP1251 -> ЖК.
На мой взгляд, этот вариант предпочтительней. Конечно, если не "жмут" такты. Тем более, что наверняка Вам придется выводить на ЖК-индикатор символы из CP1251 (При выводе на индикатор надписей из памяти программ)
P.S. Вот, немного набросал:
Код
__flash unsigned char CP1251_to_LCD_table[256]=
// 0 1 2 3 4 5 6 7 8 9 A B C D E F Lo Hi
{
0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , // 0
16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 , 27 , 28 , 29 , 30 , 31 , // 1
32 , 33 , 34 , 35 , 36 , 37 , 38 , 39 , 40 , 41 , 42 , 43 , 44 , 45 , 46 , 47 , // 2 !"#$%&''()*+,-./
48 , 49 , 50 , 51 , 52 , 53 , 54 , 55 , 56 , 57 , 58 , 59 , 60 , 61 , 62 , 63 , // 3 0123456789:;<=>?
64 , 65 , 66 , 67 , 68 , 69 , 70 , 71 , 72 , 73 , 74 , 75 , 76 , 77 , 78 , 79 , // 4 @ABCDEFGHIJKLMNO
80 , 81 , 82 , 83 , 84 , 85 , 86 , 87 , 88 , 89 , 90 , 91 , 92 , 93 , 94 , 95 , // 5 PQRSTUVWXYZ[\]^_
96 , 97 , 98 , 99 ,100 ,101 ,102 ,103 ,104 ,105 ,106 ,107 ,108 ,109 ,110 ,111 , // 6 `abcdefghijklmno
112 ,113 ,114 ,115 ,116 ,117 ,118 ,119 ,120 ,121 ,122 ,123 ,124 ,125 ,0xE9,127 , // 7 pqrstuvwxyz{|}~
32 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , // 8 128-143
32 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , // 9 144-159
32 , 32 , 32 , 32 , 32 , 5 , 32 ,0xFD,0xA2, 32 ,0x01 ,0xC8, 32 , 32 , 32 ,0x03, // A 160-175
0xCB, 32 ,0x49,0x69,0x04, 32 ,0xFE,0xEF,0xB5,0xCC,0x00,0xC9, 32 , 32 , 32 ,0x02, // B 183 - градус
0x41,0xA0,0x42,0xA1,0xE0,0x45,0xA3,0xA4,0xA5,0xA6,0x4B,0xA7,0x4D,0x48,0x4F,0xA8, // C АБВГДЕЖЗИЙКЛМНОП
0x50,0x43,0x54,0xA9,0xAA,0x58,0xE1,0xAB,0xAC,0xE2,0xAD,0xAE,0x62,0xAF,0xB0,0xB1, // D РСТУФХЦЧШЩЪЫЬЭЮЯ
0x61,0xB2,0xB3,0xB4,0xE3,0x65,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0x6F,0xBE, // E абвгдежзийклмноп
0x70,0x63,0xBF,0x79,0xE4,0x78,0xE5,0xC0,0xC1,0xE6,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7}
; // F рстуфхцчшщъыьэюя
// аналогично таблица из CP1251 в Unicode
__flash unsigned int CP1251_to_Unicode[256]={
// 0 1 2 3 4 5 6 7 8 9 A B C D E F Lo Hi
// кода 0..127 передаются "как есть", с расширением до 2 байт
{ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , // 0
16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 , 27 , 28 , 29 , 30 , 31 , // 1
32 , 33 , 34 , 35 , 36 , 37 , 38 , 39 , 40 , 41 , 42 , 43 , 44 , 45 , 46 , 47 , // 2 !"#$%&''()*+,-./
48 , 49 , 50 , 51 , 52 , 53 , 54 , 55 , 56 , 57 , 58 , 59 , 60 , 61 , 62 , 63 , // 3 0123456789:;<=>?
64 , 65 , 66 , 67 , 68 , 69 , 70 , 71 , 72 , 73 , 74 , 75 , 76 , 77 , 78 , 79 , // 4 @ABCDEFGHIJKLMNO
80 , 81 , 82 , 83 , 84 , 85 , 86 , 87 , 88 , 89 , 90 , 91 , 92 , 93 , 94 , 95 , // 5 PQRSTUVWXYZ[\]^_
96 , 97 , 98 , 99 ,100 ,101 ,102 ,103 ,104 ,105 ,106 ,107 ,108 ,109 ,110 ,111 , // 6 `abcdefghijklmno
112 ,113 ,114 ,115 ,116 ,117 ,118 ,119 ,120 ,121 ,122 ,123 ,124 ,125 ,126 ,127 , // 7 pqrstuvwxyz{|}~
// Символы с СР1251-кодами 128...191 земенить на соответствующие им из Unicode
0x020,0x020,0x020,0x020,0x020,0x020,0x020,0x020,
0x020,0x020,0x020,0x020,0x020,0x020,0x020,0x020, // 8 128-143
0x020,0x020,0x020,0x020,0x020,0x020,0x020,0x020,
0x020,0x020,0x020,0x020,0x020,0x020,0x020,0x020, // 9 144-159
0x020,0x020,0x020,0x020,0x020,0x490,0x020,0x020,
0x020,0x020,0x414,0x020,0x020,0x020,0x020,0x020, // A 160-175 Г' Є
0x020,0x020,0x020,0x020,0x020,0x020,0x020,0x020,
0x020,0x020,0x020,0x020,0x020,0x020,0x020,0x020 // B 176-191
0x410,0x411,0x412,0x413,0x414,0x415,0x416,0x417,
0x418,0x419,0x41A,0x41B,0x41C,0x41D,0x41E,0x41F, // C АБВГДЕЖЗИЙКЛМНОП
0x420,0x421,0x422,0x423,0x424,0x425,0x426,0x427,
0x428,0x429,0x42A,0x42B,0x42C,0x42D,0x42E,0x42F, // D РСТУФХЦЧШЩЪЫЬЭЮЯ
0x430,0x431,0x432,0x433,0x434,0x435,0x436,0x437,
0x438,0x439,0x43A,0x43B,0x43C,0x43D,0x43E,0x43F, // E абвгдежзийклмноп
0x440,0x441,0x442,0x443,0x444,0x445,0x446,0x447,
0x448,0x449,0x44A,0x44B,0x44C,0x44D,0x44E,0x44F,}; // F рстуфхцчшщъыьэюя
unsigned char Unicode_to_CP1251(unsigned int sym) // Вариант 1
{
if (sym <= 128) return (char)sym;
if ((sym >= 0x410) && (sym <= 0x44F) return (sym - 0x350);
switch (sym){
case 0x490: return 0xA5 // Г'
case 0x414: return 0xAA // Є
......
default return 0x20
}
}
__flash unsigned char Unicode_to_CP1251_table[256] =
{
........
}
unsigned char Unicode_to_CP1251(unsigned int sym) // Вариант 2
{
if (sym <= 128) return (char)sym; // ANSI
if ((sym >>8) == 0x04) return Unicode_to_CP1251_table[sym & 0xFF]; // Cyrillic
return 0x20; // Other
}
}
// Вывод строки в кодировке CP1251 на ЖК
while (*string){
putLCD(CP1251_to_LCD_table[*string++]);
}
// Вывод строки в кодировке CP1251 в SMS
while (*string){
putSMS(CP1251_to_Unicode_table[*string++]);
}
// Вывод строки в кодировке Unicode на ЖК
while (*string){
putLCD( CP1251_to_LCD_table[ Unicode_to_CP1251(*string++) ] );
}