Mad_kvmg 0 13 мая, 2009 Опубликовано 13 мая, 2009 · Жалоба Доброго времени суток. Озадачился вывести русские буквы на LCD (HD...). const unsigned char ruTable [] = { 'А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ь', 'Ы', 'Ъ', 'Э', 'Ю', 'Я', 'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ь', 'ы', 'ъ', 'э', 'ю', 'я', }; const unsigned char LCDSM [] = { 0x41, 0xA0, 0x42, 0xA1, 0xE0, 0x45, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0x4B, 0xA7, 0x4D, 0x48, 0x4F, 0xA8, 0x50, 0x43, 0x54, 0xA9, 0xAA, 0x58, 0xE1, 0xAB, 0xAC, 0xE2, 0x62, 0xAE, 0xAD, 0xAF, 0xB0, 0xB1, 0x61, 0xB2, 0xB3, 0xB4, 0xE3, 0x65, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0x6F, 0xBE, 0x70, 0x63, 0xBF, 0x79, 0xE4, 0x78, 0xE5, 0xC0, 0xC1, 0xE6, 0xC4, 0xC3, 0xC2, 0xC5, 0xC6, 0xC7, }; unsigned char RuToLCD ( unsigned char sim ) { unsigned char i; for ( i = 0; i < sizeof ( ruTable ); i++ ) { if ( sim == ruTable [ i ] ) return ( LCDSM[ i ] ); } return ( sim ); } Сам механизи работает нормально, компилил gcc, все работает. Hi-tech тоже компилит без ошибок, но вот работать отказывается, выводит абракадабру. Не ужто Hi-tech(9.60 std) не понимает русские буквы? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
evc 0 14 мая, 2009 Опубликовано 14 мая, 2009 · Жалоба ...Не ужто Hi-tech(9.60 std) не понимает русские буквы? Не понимает из-за различий в ASCII таблицах. (кстати буквы эти не "русские", а кириллические) А зачем перебирать каждый раз всю таблицу? Можно сделать и так: const unsigned char TEXT[51][5] ={0x00, 0x00, 0x00, 0x00, 0x00, // SPACE 0x00, 0x00, 0x4F, 0x00, 0x00, // ! 0x00, 0x03, 0x00, 0x03, 0x00, // " 0x14, 0x3E, 0x14, 0x3E, 0x14, // # 0x3C, 0x42, 0x42, 0x42, 0x24, // $ 0x26, 0x16, 0x08, 0x34, 0x32, // % 0x36, 0x49, 0x55, 0x22, 0x50, // & 0x7F, 0x48, 0x48, 0x48, 0x30, // ' 0x00, 0x1C, 0x22, 0x41, 0x00, // ( 0x00, 0x41, 0x22, 0x1C, 0x00, // ) 0x14, 0x08, 0x3E, 0x08, 0x14, // * 0x08, 0x08, 0x3E, 0x08, 0x08, // + 0x00, 0x50, 0x30, 0x00, 0x00, // , 0x08, 0x08, 0x08, 0x08, 0x08, // - 0x00, 0x60, 0x60, 0x00, 0x00, // . 0x20, 0x10, 0x08, 0x04, 0x02, // / 0x3E, 0x51, 0x49, 0x45, 0x3E, // 0 0x04, 0x02, 0x7F, 0x00, 0x00, // 1 0x42, 0x61, 0x51, 0x49, 0x46, // 2 0x22, 0x41, 0x49, 0x49, 0x36, // 3 0x18, 0x14, 0x12, 0x12, 0x7F, // 4 0x4F, 0x49, 0x49, 0x49, 0x31, // 5 0x3E, 0x49, 0x49, 0x49, 0x32, // 6 0x01, 0x01, 0x71, 0x09, 0x07, // 7 0x36, 0x49, 0x49, 0x49, 0x36, // 8 0x26, 0x49, 0x49, 0x49, 0x3E, // 9 0x00, 0x36, 0x36, 0x00, 0x00, // : 0x00, 0x56, 0x36, 0x00, 0x00, //; 0x08, 0x14, 0x22, 0x41, 0x00, // < 0x14, 0x14, 0x14, 0x14, 0x14, // = 0x7F, 0x08, 0x3E, 0x41, 0x3E, // Ю > 0x02, 0x01, 0x51, 0x09, 0x06, // ? 0x3E, 0x41, 0x59, 0x55, 0x5E, // @ 0x7E, 0x09, 0x09, 0x09, 0x7E, // A 0x7F, 0x49, 0x49, 0x49, 0x31, // B 0x3F, 0x20, 0x20, 0x3F, 0x60, // C 0x7E, 0x21, 0x21, 0x3E, 0x60, // D 0x7F, 0x49, 0x49, 0x49, 0x41, // E 0x7F, 0x09, 0x09, 0x09, 0x01, // F 0x7F, 0x01, 0x01, 0x01, 0x01, // G 0x7F, 0x08, 0x08, 0x08, 0x7F, // H 0x7F, 0x20, 0x10, 0x08, 0x7F, // I 0x77, 0x08, 0x7F, 0x08, 0x77, // J 0x7F, 0x08, 0x14, 0x22, 0x41, // K 0x70, 0x08, 0x04, 0x02, 0x7F, // L 0x7F, 0x02, 0x0C, 0x02, 0x7F, // M 0x7F, 0x08, 0x08, 0x08, 0x7F, // N 0x3E, 0x41, 0x41, 0x41, 0x3E, // O 0x7F, 0x01, 0x01, 0x01, 0x7F, // P 0x76, 0x09, 0x09, 0x09, 0x7F}; // Q const unsigned char TEXT2[46][5]={0x7F, 0x09, 0x09, 0x09, 0x06,// R 0x3E, 0x41, 0x41, 0x41, 0x22, // S 0x01, 0x01, 0x7F, 0x01, 0x01, // T 0x27, 0x48, 0x48, 0x48, 0x3F, // U 0x7F, 0x49, 0x49, 0x49, 0x36, // V 0x7F, 0x20, 0x11, 0x08, 0x7F, // Й 0x41, 0x22, 0x1C, 0x22, 0x41, // X 0x07, 0x08, 0x70, 0x08, 0x07, // Y 0x61, 0x51, 0x49, 0x45, 0x43, // Z 0x7F, 0x48, 0x70, 0x00, 0x7F, // Ы [ 0x0F, 0x10, 0x10, 0x10, 0x7F, // обр. черта 0x22, 0x49, 0x49, 0x49, 0x3E, // Э ] 0x04, 0x02, 0x01, 0x02, 0x04, // ^ 0x0F, 0x10, 0x10, 0x10, 0x7F, // Ч _ 0x00, 0x0C, 0x12, 0x12, 0x0C, // ` 0x20, 0x54, 0x54, 0x54, 0x78, // a 0x7F, 0x44, 0x44, 0x44, 0x38, // b 0x38, 0x44, 0x44, 0x44, 0x44, // c 0x38, 0x44, 0x44, 0x44, 0x7F, // d 0x38, 0x54, 0x54, 0x54, 0x18, // e 0x04, 0x04, 0x7E, 0x05, 0x05, // f 0x08, 0x54, 0x54, 0x54, 0x3C, // g 0x7F, 0x08, 0x04, 0x04, 0x78, // h 0x00, 0x44, 0x7D, 0x40, 0x00, // i 0x20, 0x40, 0x44, 0x3D, 0x00, // j 0x7F, 0x10, 0x28, 0x44, 0x00, // k 0x00, 0x41, 0x7F, 0x40, 0x00, // l 0x7C, 0x04, 0x78, 0x04, 0x78, // m 0x7C, 0x08, 0x04, 0x04, 0x78, // n 0x38, 0x44, 0x44, 0x44, 0x38, // o 0x7C, 0x14, 0x14, 0x14, 0x08, // p 0x08, 0x14, 0x14, 0x14, 0x7C, // q 0x00, 0x7C, 0x08, 0x04, 0x04, // r 0x48, 0x54, 0x54, 0x54, 0x20, // s 0x04, 0x04, 0x3F, 0x44, 0x44, // t 0x3C, 0x40, 0x40, 0x20, 0x7C, // u 0x1C, 0x20, 0x40, 0x20, 0x1C, // v 0x3C, 0x40, 0x30, 0x40, 0x3C, // w 0x44, 0x28, 0x10, 0x28, 0x44, // x 0x0C, 0x50, 0x50, 0x50, 0x3C, // y 0x44, 0x64, 0x54, 0x4C, 0x44, // z 0x00, 0x08, 0x36, 0x41, 0x41, // { 0x00, 0x00, 0x7F, 0x00, 0x00, // | 0x41, 0x41, 0x36, 0x08, 0x00, // } 0x02, 0x01, 0x02, 0x04, 0x02,// ~ 0x3E, 0x5D, 0x55, 0x55, 0x3E};//CW void lcd_text57(unsigned char x, unsigned char y, const unsigned char * textptr, unsigned char color){ static unsigned char j; j = 0; while (*textptr != 0){ lcd_symb(x + j, y, *textptr, color); j += 5; lcd_byte(0, x + j, y, color); textptr += 1; j += 1; } } void lcd_symb(unsigned char x, unsigned char y, unsigned char s, unsigned char color){ static unsigned char l, t; for (l = 0; l < 5; l++){ if (s < 'R'){ t = s - ' '; lcd_byte(TEXT[t][l], x + l, y, color); } else if (s <= '~'){ t = s - 'R'; lcd_byte(TEXT2[t][l], x + l, y, color); } else lcd_byte(TEXT[0][l], x + l, y, color); } } подменив (там, где нужно) латинские буквы кириллическими. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Andrey_M 0 14 мая, 2009 Опубликовано 14 мая, 2009 · Жалоба А зачем выводить буквы отдельно? Я обычно поступаю так: const char privet [ ] = {"Привет"}; unsigned char buff [16]; sprintf (buff, privet); остается организовать вывод потока на индикатор. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 15 мая, 2009 Опубликовано 15 мая, 2009 (изменено) · Жалоба Вы в курсе, что у LCD кодировка русских букв НЕ СОВПАДАЕТ ни с одной кодировкой этих букв из мира PC? Да и буквы там далеко не все. Так что если просто записать в индикатор нечто русское, то получится нечто неопределенное. Изменено 15 мая, 2009 пользователем XVR Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
NullPointer 0 15 мая, 2009 Опубликовано 15 мая, 2009 · Жалоба у LCD кодировка русских букв НЕ СОВПАДАЕТ ни с одной кодировкой этих букв из мира PC Ну! Не стоит так категорично. Вполне распространены 866 (OEM), KOI-8. Даже ANSI-1251 попадаются... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 15 мая, 2009 Опубликовано 15 мая, 2009 · Жалоба Ну! Не стоит так категорично. Вполне распространены 866 (OEM), KOI-8. Даже ANSI-1251 попадаются...Хорошо, перефразирую - у случайно взятого LCD индикатора кодировка русских букв будет случайной (или ее вообще не будет) :laughing: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
NullPointer 0 15 мая, 2009 Опубликовано 15 мая, 2009 · Жалоба у случайно взятого LCD индикатора кодировка русских букв будет случайной (или ее вообще не будет) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться