WH0802A-NGG-CT и русские символы

Help!
Начал раскуривать оный дисплейчик. До этого был какой-то без поддержки кириллицы, и вопросов не возникало. И я честно говоря ожидал обычную таблицу ASCII с русскими символами, а тут такое оказвается!


Вот, собственно вопрос, надо мне одну фитюльку сделать, чтобы из внешней подключаемой памяти текст на примерно такой дисплейчик выводить, и вот что-то я аж не представляю, как мне перекодировать исходный текст в ту кашу, которая на дисплей выводиться должна и культурно выглядеть.

Есть софтинка какая? Или может кто написать поможет, советами там, наставлениями?
В гугле как-то не нашёл ничего нужного.

Комментарии (31)

RSS свернуть / развернуть
Напиши себе скриптик на питоне, который уникод будет в эту ересь переводить, делов-то. Я вообще просто руками вписывал.
0
Да вот написал бы, если бы был питону обучен.
0
Тогда напишите программу на сам МК для перекодировки. Я таким макаром шрифты для дисплеев с мобилок паковал.
0
Вот это вариант, мне всё равно же в эту память писать предварительно нужно будет.
0
Я бы, для перекодировки, тупо сделал бы массив на 256 байт во флэш. Подготовить его можно хоть в том-же екселе или дельфе. (Питон я не умею)
0
Предполагаю, что места под этот массив будет может и не остаться, да и как-то это не очень рационально, учитывая, что тексты будут готовиться заранее и мной же.
0
Тогда пробейте тексты кодами напрямую.
const char string[] = {0xHH, 0xHH, 0xHH, 0};

Если у вас нет места на таблицу конвертации, то сомневаюсь что у вас так много строк текста будет.
0
Строки, как он пишет в статье «из внешней подключаемой памяти». То есть весь вопрос, это найти какой-нибудь редактор, который умеет произвольную перекодировку делать, или написать самому.
0
тогда и таблицу перекодировки загнать во внешнюю подключаемую память :)
0
Епт да погугли чуток. Программ перекодировщиков как грязи.
0
Точно! Только это не мне надо, а red_bobcat-у, вот пусть и погуглит. А я просто попытался определить, что-же ему на самом деле нужно. Это самое главное.
0
Может гугль у меня не тот, может я неправильно что-то написал, но ссылок столько накидали, теперь выбор даже есть, чем перекодировать.
0
Это ирония что-ли?
Ссылки ниже не подошли?
Наверняка кто-нибудь поможет написать, но пока-что не понятно:
На чём пишешь для МК? Какой хочеш взять МК? На чём пишешь для PC? Какая операционка?
0
Ссылки подошли, да так, что выбор не из одной и не из 2х программ есть теперь.
Да и появилась идея, раз уж мне всё равно память писать, пускай перекодировкой контроллер займётся во время записи этой самой памяти.
Для МК пишу на Сях, для компа не пишу вообще :(
Операционки — и Win и Lin.
0
Я так понял, будут два устройства, одно пишет в память, потом память перетыкается во второе устройство, которое отображает написанное на дисплее?
0
Именно. Я даже проще сделаю, то, которое пишет, будет текст по уарту принимать, перекодировать, и в память внешнюю писать, а второе читать будет, ему особо интеллекта и не надо будет делать. Всё равно писать в них только я буду. А потом, как немного навострюсь, то может и программку для компа напишу, чтобы она сама перекодировала при засылке, тогда подвяжу её к первому устройству.
0
А МК планируется 2313, там места как раз под управление дисплеем, да под свистоперделки всякие, а вся таблица перекодировки, это, боюсь, четверть памяти её будет.
0
А МК пишущий такой-же? У него 2 килобайта флэша. 256 байт это 1/8 всего флэша. Зато программа будет проще, можно перекодировать любые символы, например кавычки более модные сделать, русские буквы быстрей кодироваться будут т. к. меньше проверок.
Переделываю код от Resp-а:
const char lcd_epson_codes[256] PROGMEM =
{
.... 
0x41,0xA0,0x42,0xA1,0xE0,0x45,0xA3,0xA4, 
0xA5,0xA6,0x4B,0xA7,0x4D,0x48,0x4F,0xA8, 
0x50,0x43,0x54,0xA9,0xAA,0x58,0xE1,0xAB, 
0xAC,0xE2,0xAD,0xAE,0xAD,0xAF,0xB0,0xB1, 
0x61,0xB2,0xB3,0xB4,0xE3,0x65,0xB6,0xB7, 
0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0x6F,0xBE, 
0x70,0x63,0xBF,0x79,0xE4,0x78,0xE5,0xC0, 
0xC1,0xE6,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7
};

inline char lcd_epson(char c)
{
   return pgm_read_byte(&lcd_epson_codes[c]));
}

Недостатки: Нерусские буквы могут медленнее обрабатываться. Больше цифр надо будет написать (там где я… написал), программа больше на 192 байта.
0
Вон как! Всё равно, остаётся как вариант, если памяти хватит.
0
Посмотрите это
0
Я делал вот так:
const char lcd_epson_rus_codes[64] PROGMEM =
{ 
0x41,0xA0,0x42,0xA1,0xE0,0x45,0xA3,0xA4, 
0xA5,0xA6,0x4B,0xA7,0x4D,0x48,0x4F,0xA8, 
0x50,0x43,0x54,0xA9,0xAA,0x58,0xE1,0xAB, 
0xAC,0xE2,0xAD,0xAE,0xAD,0xAF,0xB0,0xB1, 
0x61,0xB2,0xB3,0xB4,0xE3,0x65,0xB6,0xB7, 
0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0x6F,0xBE, 
0x70,0x63,0xBF,0x79,0xE4,0x78,0xE5,0xC0, 
0xC1,0xE6,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7
};

inline char lcd_epson_rus(char c)
{
	if (c >= 'А') c = pgm_read_byte(&(lcd_epson_rus_codes[c - 'А']));
		else if(c == 'Ё') c = 0xA2;
			else if(c == 'ё') c = 0xB5;
	return c;
}
Но это работает только если файл сохранен в кодировке CP1251.
+1
я б просто сделал массив где индексом является ASCII символ а значение ячейки то самое что тебе надо вывести.
А вообще работая с таким дисплеем я просто формировал строки которые мне нужно во флеше. И не заморачивался. Цифры то нормально совпадают. А формировать строки на лету мне не надо было.
0
  • avatar
  • kos
  • 12 мая 2012, 10:41
все проще

#define а 0x16,
#define б 0x2b, 
#define в 0x3b,
...
...


const char string[] = { привет, ',', ' ', мир };

может не слишком удобно, зато все делается при компиляции
0
через пробелы. иначе не подставит.
+1
Т.е. препроцессор осуществляет замену на уровне токенов? Не знал, спасибо
0
Ну иначе бы был-бы полный звиздец :) Представьте себе как поведёт себя макрос MY_WINDOWS_TEXT :) А потом гадай, почему MY__L не определено.
0
не спорю, просто почему-то не задумывался об этом
0
еще вариант — вынести строки в отдельный файл и при сборке через Makefile преобразовывать его с помощью tr/sed/awk/whatever автоматически
0
Вот тут уже всё есть: Таблица перекодировки с функциями-методами на C++
Возьмите то, что поймёте.
0
  • avatar
  • uni
  • 12 мая 2012, 14:21
Это динамический способ, а для статического используют самопальные программы типа вот этой:
avrproject.ru/ds1307/LCD_RUS.rar
или этой:
arv.radioliga.com/content/view/183/44/
0
модет это поможет
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.