Перейти к содержанию
    

Кирилица на LCD смешивается!

Здравствуйте, хочу спросить следущее:

 

при использовании const unsigned char для вывода кирилицы на LCD почему-то объединяются несколько переменных? Mне интересно как выводить сообщения на LCD содержащие одинаковые фразы, почему они смешиваются?

Вот исходник с результатом:

post-31098-1218606620_thumb.jpg

v1.183.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В конце строк для вывода на ЖК добавте 0х00

 

Ваша строка: const unsigned char mes1 [] = {0xbf, 0x65, 0x70, 0xbc, 0x6f, 0xbc, 0x65, 0xbf, 0x70}; //слово "термометр" в кодировке KOI-8R

Нужно: const unsigned char mes1 [] = {0xbf, 0x65, 0x70, 0xbc, 0x6f, 0xbc, 0x65, 0xbf, 0x70, 0}; //слово "термометр" в кодировке KOI-8R

и так со всеми остальными строками

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А нельзя просто буковками чтоли?

Типа:

const unsigned char mes1 [] = "термометр";

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А нельзя просто буковками чтоли?

Типа:

const unsigned char mes1 [] = "термометр";

Дык у него знакогенератор в КОИ-8, а в этом случае подставится кодовая таблица ОС, стоящей на компьютере.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А нельзя просто буковками чтоли?

Типа:

const unsigned char mes1 [] = "термометр";

А все ли индикаторы Win-1251 понимают?

 

Dog Pawlowa, Вы меня опередили)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А все ли индикаторы Win-1251 понимают?

Не видел таких что бы понимали. Там свой специфичный знакогенератор.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не видел таких что бы понимали. Там свой специфичный знакогенератор.

Почему, мэлтовские понимают: http://melt.com.ru/work/display/150

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А все ли индикаторы Win-1251 понимают?

 

Мои - понимают. Через таблицу перекодировки:)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может я не в тему, но "железно" индикатор представляет из себя 2 индикатора 4х20. может где-то в обработчике баг?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно просто текстом "термометр" - но для этого используйте текстовый редактор типа Aditor и выставьте нужную кодировку. С Codevision AVR работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо, сегодня попробую нули добавить, а за что эти нули отвечают?

 

Может я не в тему, но "железно" индикатор представляет из себя 2 индикатора 4х20. может где-то в обработчике баг?

 

Было бы интересно где?

Изменено пользователем _Олег_

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо, сегодня попробую нули добавить, а за что эти нули отвечают?

Нулевой символ обозначает конец строки

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нулевой символ обозначает конец строки

... а у Вас получется, что программа пихает в индикатор все символы, пока не поймает байт 0х00. Вот и наползают строки друг на друга.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я пользуюсь для перекодировки русского язака таблицу

code byte Table_coder[64]={
0x41,0xA0,0x42,0xA1,//0xC0...0xC3 <=> А Б В Г
0xE0,0x45,0xA3,0x33,//0xC4...0xC7 <=> Д Е Ж З
0xA5,0xA6,0x4B,0xA7,//0xC8...0xCB <=> И Й К Л
0x4D,0x48,0x4F,0xA8,//0xCC...0xCF <=> М Н О П

0x50,0x43,0x54,0xA9,//0xD0...0xD4 <=>  Р С Т У
0xAA,0x58,0xE1,0xAB,//0xD5...0xD7 <=>  Ф Х Ц Ч
0xAC,0xE2,0xAC,0xAE,//0xD8...0xDB <=>  Ш Щ Ъ Ы 
0x62,0xAF,0xB0,0xB1,//0xDC...0xDF <=>  Ь Э Ю Я

0x61,0xB2,0xB3,0xB4,//0xE0...0xE4 <=>  а б в г
0xE3,0x65,0xB6,0xB7,//0xE5...0xE7 <=>  д е ж з
0xB8,0xA6,0xBA,0xBB,//0xE8...0xEB <=>  и й к л
0xBC,0xBD,0x6F,0xBE,//0xEC...0xEF <=>  м н о п

0x70,0x63,0xBF,0x79,//0xF0...0xE4 <=>  р с т у
0xE4,0xD5,0xE5,0xC0,//0xF5...0xE7 <=>  ф х ц ч
0xC1,0xE6,0xC2,0xC3,//0xF8...0xEB <=>  ш щ ъ ы
0XC4,0xC5,0xC6,0xC7    //0xFC...0xEF <=>  ь э ю я
};

byte coder(byte b)
{
if (b<192) return b;
else       return Table_coder[b-192];
}

 

Для создания строки удобно пользовать функцию sprintf,(Конец строки добавляется автоматом):

 

    sprintf(buffer,"Строка 1");
    for(...)
   buffer[i] =coder(buffer[i]);
   //Write to LCD

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я пользуюсь для перекодировки русского язака таблицу

 

 

Спасибо, я то же так хочу попробовать, но сначала решил сделать просто.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...