roboforum.ru

Технический форум по робототехнике.

Проблема с выводом русских букв на LCD или глюк CVAVR

Проблема с выводом русских букв на LCD или глюк CVAVR

HarryStar » 29 янв 2011, 02:47

Проблема в следующем:

Сделал свой конвертор русских букв внутри контроллера. Применяю дисплей для отладки, поэтому памяти не жалко.

Конвертор работает, все хорошо.
Вот такой код работает:
Код: Выделить всёРазвернуть
#include <mega32.h>
#asm
   .equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>

char *rus_encode(char *text)
{
char *alfavite = "ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮЁйцукенгшщзхъфывапролджэячсмитьбюё";
char rus_lcd[]={0xA6, 0xE1, 0xA9, 0x4B, 0x45, 0x48, 0xA1, 0xAC, 0xE2, 0xA4, 0x58, 0xAD,
                0xAA, 0xAE, 0x42, 0x41, 0xA8, 0x50, 0x4F, 0xA7, 0xE0, 0xA3, 0xAF,
                0xB1, 0xAB, 0x43, 0x4D, 0xA5, 0x54, 0x62, 0xA0, 0xB0, 0xA2,
               
                0xB9, 0xE5, 0x79, 0xBA, 0x65, 0xBD, 0xB4, 0xC1, 0xE6, 0xB7, 0xD5, 0xC2,
                0xE4, 0xC3, 0xB3, 0x61, 0xBE, 0x70, 0x6F, 0xBB, 0xE3, 0xB6, 0xC5,
                0xC7, 0xC0, 0x63, 0xBC, 0xB8, 0xBF, 0xC4, 0xB2, 0xC6, 0xA2};
unsigned char i,r;
for(i=0; text[i]!=0; i++)
{
  r=0;
  while(r<sizeof(rus_lcd) && text[i] != alfavite[r]) r++;
  if(r!=sizeof(rus_lcd)) text[i] = rus_lcd[r];
}
return(text);
}

void main(void)
{
PORTA=0x00; DDRA=0x00;
PORTB=0x00; DDRB=0x08;
PORTD=0x00; DDRD=0x80;

lcd_init(16);
lcd_clear();


lcd_gotoxy(0, 0);
lcd_puts(rus_encode("Пример"));

}


Теперь если немного изменить последние строчки:
Код: Выделить всёРазвернуть
while(1)
{
lcd_gotoxy(0, 0);
lcd_puts(rus_encode("Пример"));
}


То при первом проходе цикла все нормально, а начиная со второго часть букв заменяется на "ё"
Т.е. выводится : ёрёвет

при этом если написать таК:
Код: Выделить всёРазвернуть
 lcd_gotoxy(0, 0);
lcd_puts(rus_encode("Пример"));
lcd_gotoxy(0, 0);
lcd_puts(rus_encode("Пример"));


То все ок.

Я уже не знаю в чем проблема.

Саму функцию перекодировки можете не проверять, она может и не оптимальна, но она работает как часы.
Но только когда нет циклов, когда вывод происходит внутри цикла, получается какая то фигня.

Re: Проблема с выводом русских букв на LCD или глюк CVAVR

-= Александр =- » 29 янв 2011, 03:03

Если ЖКИ от МЭЛТ - то подмени вот этот файлик. Я его когда-то правил, но почему и как - уже не помню.
Вложения
LCD.rar
CodeVision LCD.LIB для экранов МЭЛТ
(1.44 КиБ) Скачиваний: 0

Re: Проблема с выводом русских букв на LCD или глюк CVAVR

blindman » 29 янв 2011, 05:13

Проблема в том, что rus_encode изменяет исходную строку

Re: Проблема с выводом русских букв на LCD или глюк CVAVR

HarryStar » 29 янв 2011, 11:06

Жки МЭЛТообразный да WH1602B-YYH-CTK
CVAVR 2.04.4a
А что меняется в этой библиотеке?
blindman писал(а):Проблема в том, что rus_encode изменяет исходную строку

Блиндман! Ты гений! :) Вот я тормоз.
Все заработало, теперь интересно только что за другая библиотека.


Rambler\'s Top100 Mail.ru counter