Alex2578 0 13 сентября, 2007 Опубликовано 13 сентября, 2007 · Жалоба Там же кириллица не совпадает с кодировкой руссифицированного HD-44780 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
skn 0 13 сентября, 2007 Опубликовано 13 сентября, 2007 · Жалоба Там же кириллица не совпадает с кодировкой руссифицированного HD-44780 Сделайте таблицу перекодировки и все будет совпадать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ReAl 0 13 сентября, 2007 Опубликовано 13 сентября, 2007 · Жалоба Не, таблица перекодировки - это некрасиво. Лишний объём флеша на то, что можно сделать до компиляции программы. Можно перекодировку и в командный файл sed вставить, но это уже хотелось бы делать на чём-то более высокого уровня. Например, очень хороший перекодировщик http://www.onembedding.com/tools/utility/pylcdstring/ но оно тоже рассчитано на то, что изначальный текст набивается вручную :) Кстати, а какая проблема набить вручную небольшие объёмы текста? Особенно если они не превышают объём постов в этой теме? ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex2578 0 14 сентября, 2007 Опубликовано 14 сентября, 2007 · Жалоба Текст длиной около 1000 символов. Ну.... в принципе 1 раз можно переморщиться..... Но проблема еще в том, что в каждом следующем приборе сообщения могут быть свои, отличные от предыдущих. И каждый раз долбить в компиляторе текст, честно говоря, не вдохновляет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kolobok0 0 14 сентября, 2007 Опубликовано 14 сентября, 2007 · Жалоба Текст длиной около 1000 символов. Ну.... в принципе 1 раз можно переморщиться..... Но проблема еще в том, что в каждом следующем приборе сообщения могут быть свои, отличные от предыдущих. И каждый раз долбить в компиляторе текст, честно говоря, не вдохновляет. тут вот вопрос возник... а собственно кто мешает инклудить Ваши строки данных как внешнии файлы.. а в файлы уже заливать кодировщиком ? Или религия не-не ? с уважением (круглый) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CDT 0 14 сентября, 2007 Опубликовано 14 сентября, 2007 · Жалоба Вот штука, которая спасет отцов русской демократии. Да возблагодарят они (как и я) автора ее! text_for_HD44780.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
codavr1 0 14 сентября, 2007 Опубликовано 14 сентября, 2007 · Жалоба Для перекодировки во время компиляции для иаровского асма сделал такой макрос: ;----------------------------------- LCDstr: macro reptc chr,\1 if 'chr'='└' db 65 elseif 'chr'='┴' db 160 elseif 'chr'='┬' db 66 elseif 'chr'='├' db 161 elseif 'chr'='─' db 224 elseif 'chr'='┼' db 69 elseif 'chr'='╞' db 163 elseif 'chr'='╟' db 164 elseif 'chr'='╚' db 165 elseif 'chr'='╔' db 166 elseif 'chr'='╩' db 75 elseif 'chr'='╦' db 167 elseif 'chr'='╠' db 77 elseif 'chr'='═' db 72 elseif 'chr'='╬' db 79 elseif 'chr'='╧' db 168 elseif 'chr'='╨' db 80 elseif 'chr'='╤' db 67 elseif 'chr'='╥' db 84 elseif 'chr'='╙' db 169 elseif 'chr'='╘' db 228 elseif 'chr'='╒' db 88 elseif 'chr'='╓' db 225 elseif 'chr'='╫' db 171 elseif 'chr'='╪' db 172 elseif 'chr'='┘' db 226 elseif 'chr'='┌' db 173 elseif 'chr'='█' db 174 elseif 'chr'='▄' db 98 elseif 'chr'='▌' db 175 elseif 'chr'='▐' db 176 elseif 'chr'='▀' db 177 elseif 'chr'='р' db 97 elseif 'chr'='с' db 178 elseif 'chr'='т' db 179 elseif 'chr'='у' db 180 elseif 'chr'='ф' db 227 elseif 'chr'='х' db 101 elseif 'chr'='ц' db 182 elseif 'chr'='ч' db 183 elseif 'chr'='ш' db 184 elseif 'chr'='щ' db 185 elseif 'chr'='ъ' db 186 elseif 'chr'='ы' db 187 elseif 'chr'='ь' db 188 elseif 'chr'='э' db 189 elseif 'chr'='ю' db 111 elseif 'chr'='я' db 190 elseif 'chr'='Ё' db 112 elseif 'chr'='ё' db 99 elseif 'chr'='Є' db 191 elseif 'chr'='є' db 121 elseif 'chr'='Ї' db 228 elseif 'chr'='ї' db 120 elseif 'chr'='Ў' db 229 elseif 'chr'='ў' db 192 elseif 'chr'='°' db 193 elseif 'chr'='∙' db 230 elseif 'chr'='·' db 194 elseif 'chr'='√' db 195 elseif 'chr'='№' db 196 elseif 'chr'='¤' db 197 elseif 'chr'='■' db 198 elseif 'chr'='ж' db 199 elseif 'chr'='и' db 162 elseif 'chr'='╕' db 181 else db 'chr' endif endr db 0 endm ;----------------------------------- инклужу его из отдельного файла, в программе пишу: LSTEXP- str0: LCDstr "строка по-русски" str1: LCDstr "больщая буква Я работает" str2: LCDstr "вместо маленькой приходится ставить вертикальную палку" even LSTEXP+ LSTEXP - это чтоб компилер результат этого макроса в листинг не писал, а то уж очень нечитаемый листинг получается. нуль в конец строки он сам добавляет... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GrayCat 0 17 сентября, 2007 Опубликовано 17 сентября, 2007 · Жалоба Внесу свои 4.(9) копеек: перекодировщик Win1251 => HD44780, работает по принципу "фильтра": CODE4LCD < Text_1251.txt > Text_44780.txt Применять по вкусу ;) . Я в makefile вставляю, перед компиляцией... CODE4LCD.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
codavr1 0 17 сентября, 2007 Опубликовано 17 сентября, 2007 · Жалоба Макрос, разумеется, такой. (в пред. посте кодировку не сменил): LCDstr: macro reptc chr,\1 if 'chr'='А' db 65 elseif 'chr'='Б' db 160 elseif 'chr'='В' db 66 elseif 'chr'='Г' db 161 elseif 'chr'='Д' db 224 elseif 'chr'='Е' db 69 elseif 'chr'='Ж' db 163 elseif 'chr'='З' db 164 elseif 'chr'='И' db 165 elseif 'chr'='Й' db 166 elseif 'chr'='К' db 75 elseif 'chr'='Л' db 167 elseif 'chr'='М' db 77 elseif 'chr'='Н' db 72 elseif 'chr'='О' db 79 elseif 'chr'='П' db 168 elseif 'chr'='Р' db 80 elseif 'chr'='С' db 67 elseif 'chr'='Т' db 84 elseif 'chr'='У' db 169 elseif 'chr'='Ф' db 228 elseif 'chr'='Х' db 88 elseif 'chr'='Ц' db 225 elseif 'chr'='Ч' db 171 elseif 'chr'='Ш' db 172 elseif 'chr'='Щ' db 226 elseif 'chr'='Ъ' db 173 elseif 'chr'='Ы' db 174 elseif 'chr'='Ь' db 98 elseif 'chr'='Э' db 175 elseif 'chr'='Ю' db 176 elseif 'chr'='Я' db 177 elseif 'chr'='а' db 97 elseif 'chr'='б' db 178 elseif 'chr'='в' db 179 elseif 'chr'='г' db 180 elseif 'chr'='д' db 227 elseif 'chr'='е' db 101 elseif 'chr'='ж' db 182 elseif 'chr'='з' db 183 elseif 'chr'='и' db 184 elseif 'chr'='й' db 185 elseif 'chr'='к' db 186 elseif 'chr'='л' db 187 elseif 'chr'='м' db 188 elseif 'chr'='н' db 189 elseif 'chr'='о' db 111 elseif 'chr'='п' db 190 elseif 'chr'='р' db 112 elseif 'chr'='с' db 99 elseif 'chr'='т' db 191 elseif 'chr'='у' db 121 elseif 'chr'='ф' db 228 elseif 'chr'='х' db 120 elseif 'chr'='ц' db 229 elseif 'chr'='ч' db 192 elseif 'chr'='ш' db 193 elseif 'chr'='щ' db 230 elseif 'chr'='ъ' db 194 elseif 'chr'='ы' db 195 elseif 'chr'='ь' db 196 elseif 'chr'='э' db 197 elseif 'chr'='ю' db 198 elseif 'chr'='╓' db 199 elseif 'chr'='Ё' db 162 elseif 'chr'='ё' db 181 else db 'chr' endif endr db 0 endm вместо прописной 'я' приходится альт-214 вводить... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Waso 1 8 июля, 2012 Опубликовано 8 июля, 2012 · Жалоба Тема древняя как г мамонта, но вот сейчас пришлось заморачиваться такойже проблемой, и решил поделиться своим решением. Вот взял коды из макроса qqqqqq для своей таблички... // коды букв русского алфавита в таблице контроллера жки unsigned char __flash LcdRusChar[] = { 65,160,66,161,224,69,163,164,165,166,75,167,77,72,79,168,80,67, 84,169,228,88,225,171,172,226,173,174,98,175,176,177,97,178,179, 180,227,101,182,183,184,185,186,187,188,189,111,190,112,99,191, 121,228,120,229,192,193,230,194,195,196,197,198,199 }; а в процедуру вывода символов на жки вставляется пара строк: if(c >= 192) // 192 - код русской А в кодировке WIN1251 { c = LcdRusChar[c-192]; // перекодировка в русские символы на жки } lcdDataWrite(c); проблемы с буквой "я" нет. Да, перекодировка на лету, но в сравнении со общим временем обращения к ЖКИ это пшик. Ну и плюс 64 байта табличка. Зато как удобно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hd44780 0 9 июля, 2012 Опубликовано 9 июля, 2012 (изменено) · Жалоба Waso, поддерживаю. Я тоже делал что-то родственное на CvAVR. Да, жрёт лишние пол-копейки флэша, зато удобно и переносимо на любые компиляторы (применял и на WnAVR), в отличие от асмовских макросов и прочих "хитростей", которые у каждого компилятора со своими выкрутасами. Изменено 9 июля, 2012 пользователем hd44780 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
uni 6 25 июля, 2012 Опубликовано 25 июля, 2012 (изменено) · Жалоба Есть даже универсальное решение одновременно для IAR и WinAVR, но на С++. Кому интересно посмотрите как это сделано в классе CLCD. Ну и мой вариант таблицы перекодировки: /* +----------------+ |Таблица символов| |Windows (ANSI) | +----------------+ +----------------+ |0123456789ABCDEF| |0123456789ABCDEF| +----------------+ +----------------+ 0x00 |( пропущено ) | 0x80 |( пропущено ) | 0x10 |( пропущено ) | 0x90 |( пропущено ) | 0x20 | !"#$%&'()*+,-./| 0xA0 |( пропущено ) | 0x30 |0123456789:;<=>?| 0xB0 |( пропущено ) | 0x40 |@ABCDEFGHIJKLMNO| 0xC0 |АБВГДЕЖЗИЙКЛМНОП| 0x50 |PQRSTUVWXYZ[\]^_| 0xD0 |РСТУФХЦЧШЩЪЫЬЭЮЯ| 0x60 |`abcdefghijklmno| 0xE0 |абвгдежзийклмноп| 0x70 |pqrstuvwxyz{|}~ | 0xF0 |рстуфхцчшщъыьэюя| +----------------+ +----------------+ */ // Таблица перекодировки из CP1251 (WIN) #ifdef __ICCAVR__ __flash uint8_t CP1251_TO_CPHD44780[ 256 ] = { #elif defined __GNUC__ PROGMEM uint8_t _CP1251_TO_CPHD44780[ 256 ] = { #endif //PROGMEM unsigned char CP1251_TO_CPHD44780[ 256 ] = { /* +---------------------------------------------------------------------------------------------------------------+ | 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 0A | 0B | 0C | 0D | 0E | 0F | */ /* CGRAM: (1) (2) (3) (4) (5) (6) (7) (8) (1) (2) (3) (4) (5) (6) (7) (8) */ /* 0x00 */ 0x00 , 0x01 , 0x02 , 0x03 , 0x04 , 0x05 , 0x06 , 0x07 , 0x08 , 0x09 , 0x0A , 0x0B , 0x0C , 0x0D , 0x0E , 0x0F , // /* 0x10 */ 0x10 , 0x11 , 0x12 , 0x13 , 0x14 , 0x15 , 0x16 , 0x17 , 0x18 , 0x19 , 0x1A , 0x1B , 0x1C , 0x1D , 0x1E , 0x1F , // /* 0x20 */ 0x20 , 0x21 , 0x22 , 0x23 , 0x24 , 0x25 , 0x26 , 0x27 , 0x28 , 0x29 , 0x2A , 0x2B , 0x2C , 0x2D , 0x2E , 0x2F , // /* 0x30 */ 0x30 , 0x31 , 0x32 , 0x33 , 0x34 , 0x35 , 0x36 , 0x37 , 0x38 , 0x39 , 0x3A , 0x3B , 0x3C , 0x3D , 0x3E , 0x3F , // /* 0x40 */ 0x40 , 0x41 , 0x42 , 0x43 , 0x44 , 0x45 , 0x46 , 0x47 , 0x48 , 0x49 , 0x4A , 0x4B , 0x4C , 0x4D , 0x4E , 0x4F , // /* 0x50 */ 0x50 , 0x51 , 0x52 , 0x53 , 0x54 , 0x55 , 0x56 , 0x57 , 0x58 , 0x59 , 0x5A , 0x5B , 0x20 , 0x5D , 0x5E , 0x5F , // /* 0x60 */ 0x60 , 0x61 , 0x62 , 0x63 , 0x64 , 0x65 , 0x66 , 0x67 , 0x68 , 0x69 , 0x6A , 0x6B , 0x6C , 0x6D , 0x6E , 0x6F , // /* 0x70 */ 0x70 , 0x71 , 0x72 , 0x73 , 0x74 , 0x75 , 0x76 , 0x77 , 0x78 , 0x79 , 0x7A , 0x5B , 0x20 , 0x5D , 0xE9 , 0x7F , // /*| 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 0A | 0B | 0C | 0D | 0E | 0F | */ /* 0x80 */ 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , // /* 0x90 */ 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , 0x20 , // /* 0xA0 */ 0xCB , 0x20 , 0x49 , 0x69 , 0x04 , 0x20 , 0xFE , 0xEF , 0xA2 , 0xCC , 0x00 , 0xC9 , 0x20 , 0x20 , 0x20 , 0x02 , // /* 0xB0 */ 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xB5 , 0x4E , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , // /* 0xC0 */ 0x41 , 0xA0 , 0x42 , 0xA1 , 0xE0 , 0x45 , 0xA3 , 0xA4 , 0xA5 , 0xA6 , 0x4B , 0xA7 , 0x4D , 0x48 , 0x4F , 0xA8 , // /* 0xD0 */ 0x50 , 0x43 , 0x54 , 0xA9 , 0xAA , 0x58 , 0xE1 , 0xAB , 0xAC , 0xE2 , 0xAD , 0xAE , 0x62 , 0xAF , 0xB0 , 0xB1 , // /* 0xE0 */ 0x61 , 0xB2 , 0xB3 , 0xB4 , 0xE3 , 0x65 , 0xB6 , 0xB7 , 0xB8 , 0xB9 , 0xBA , 0xBB , 0xBC , 0xBD , 0x6F , 0xBE , // /* 0xF0 */ 0x70 , 0x63 , 0xBF , 0x79 , 0xE4 , 0x78 , 0xE5 , 0xC0 , 0xC1 , 0xE6 , 0xC2 , 0xC3 , 0xC4 , 0xC5 , 0xC6 , 0xC7 , // /* | 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 0A | 0B | 0C | 0D | 0E | 0F | +---------------------------------------------------------------------------------------------------------------+ */ }; #ifdef __GNUC__ FU08T_PTR CP1251_TO_CPHD44780(_CP1251_TO_CPHD44780); #endif Изменено 25 июля, 2012 пользователем IgorKossak [codebox] для длинного кода!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 25 июля, 2012 Опубликовано 25 июля, 2012 · Жалоба Кому интересно посмотрите как это сделано в классе CLCD.А из каких соображений эта таблица не является статическим членом класса? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
uni 6 25 июля, 2012 Опубликовано 25 июля, 2012 · Жалоба А из каких соображений эта таблица не является статическим членом класса? Из тех соображений, что у меня код одновременно компилируется в IAR и GCC, что наложило отпечаток на форму декларации принадлежности к флешу. В GCC варианте создаётся два идентификатора: массив и указатель на него, а у IAR'а можно обойтись только одним. Не знаю как это объяснить компилятору в терминах членов класса. Пока это не критично, функционал ещё допиливается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться