Реклама

ЖКИ индикатор - проблемы с выводом кириллицы

Обсуждение технических нюансов лазертаговского оборудования потребительского и HSL классов

Модератор: Steavi

ЖКИ индикатор - проблемы с выводом кириллицы

Новое сообщение Pingvin » 27 фев 2012, 16:45

Решил побаловаться с ЖКИ - взял двустрочный по 16 символов в строке.
Нашёл либу под AVR - все замечательно, инициируется, латиница выводиться без проблем.
А вот с кириллицей ...
Дело в том, что контроллер индикатора понимает коды символов в кодировке ASCII (она же DOS-овская cp866), а редактор AVR-студии сохраняет файл в системной кодировке, тоесть cp1251.
И если я в исходниках пишу
Код: выделить все
lcdptints("Привет!")

То на индикатор выводится чёрте что, ибо кодировка не та!
Приходится извращаться, и "чёрте что" писать в исходниках, что ухудшает читабельность кода.
Как редактор студии заставить работать с cp866?
Или макрос может есть какой хитрый для конвертации кодировок на стадии предкомпиляции?
У меня пока один вариант в голове - make файле прописать перед компиляцией использование утилиты iconv.
Но он мне тоже не очень то нравиться ... :( :?
Pingvin
Ст. Лейтенант
Ст. Лейтенант
 
Сообщений: 257
Зарегистрирован: 09 авг 2011, 17:45

Re: ЖКИ индикатор - проблемы с выводом кириллицы

Новое сообщение Hold » 06 мар 2012, 17:01

В текст кода:
flash char Decode2Rus[255-192+1]= {
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 };

void putschar(flash unsigned char *string)
{
char c;
while (c=*string++){
if(c>=192) lcd_putchar(Decode2Rus[c-192]);
else lcd_putchar(c);
}
}


Затем putschar(" Привет мир!");
Hold
Новобранец
 
Сообщений: 6
Зарегистрирован: 29 май 2011, 19:16

Re: ЖКИ индикатор - проблемы с выводом кириллицы

Новое сообщение Pingvin » 19 апр 2012, 10:22

Hold писал(а):В текст кода:
flash char Decode2Rus[255-192+1]= {
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 };

void putschar(flash unsigned char *string)
{
char c;
while (c=*string++){
if(c>=192) lcd_putchar(Decode2Rus[c-192]);
else lcd_putchar(c);
}
}


Затем putschar(" Привет мир!");


Спасибо!
Именно так и сделал, работает! :)
Pingvin
Ст. Лейтенант
Ст. Лейтенант
 
Сообщений: 257
Зарегистрирован: 09 авг 2011, 17:45


Вернуться в Оборудование потребительского / HSL классов: технические вопросы

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron