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

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Проблема с выводом русских букв на 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("Пример"));


То все ок.

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

Саму функцию перекодировки можете не проверять, она может и не оптимальна, но она работает как часы.
Но только когда нет циклов, когда вывод происходит внутри цикла, получается какая то фигня.
Аватара пользователя
HarryStar
 
Сообщения: 995
Зарегистрирован: 15 ноя 2010, 13:56
Откуда: Нижний Новгород
прог. языки: С, С++, РНР

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

Сообщение -= Александр =- » 29 янв 2011, 03:03

Если ЖКИ от МЭЛТ - то подмени вот этот файлик. Я его когда-то правил, но почему и как - уже не помню.
Вложения
LCD.rar
CodeVision LCD.LIB для экранов МЭЛТ
(1.44 КиБ) Скачиваний: 0
Ниндзя - круче всех. Они умеют ходить по воде, делить на ноль и угадывать шаффл в АйПоде.
Аватара пользователя
-= Александр =-
Мастер Самоделкин
 
Сообщения: 3678
Зарегистрирован: 11 окт 2004, 19:20
Откуда: Россия, СПб
прог. языки: C/C++, Python, asm
ФИО: Курмис Александр Андреевич

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

Сообщение blindman » 29 янв 2011, 05:13

Проблема в том, что rus_encode изменяет исходную строку
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

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

Сообщение HarryStar » 29 янв 2011, 11:06

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

Блиндман! Ты гений! :) Вот я тормоз.
Все заработало, теперь интересно только что за другая библиотека.
Аватара пользователя
HarryStar
 
Сообщения: 995
Зарегистрирован: 15 ноя 2010, 13:56
Откуда: Нижний Новгород
прог. языки: С, С++, РНР


Вернуться в Микроконтроллеры

Кто сейчас на конференции

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