реклама на сайте
подробности

 
 
> Кирилица на LCD смешивается!
_Олег_
сообщение Aug 13 2008, 05:51
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 89
Регистрация: 5-10-07
Пользователь №: 31 098



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

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

Прикрепленные файлы
Прикрепленный файл  v1.183.rar ( 91.57 килобайт ) Кол-во скачиваний: 49
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SysRq
сообщение Aug 13 2008, 13:15
Сообщение #2


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Добавлю свой вариант:

Код
#define _UNK 0xFF
static const BYTE CP1251_to_HD44780[256] =
{
    // NUL   STX   SOT   ETX   EOT   ENQ   ACK   BEL   BS    HT    LF    VT    FF    CR    SO    SI
       _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
    // DLE   DC1   DC2   DC3   DC4   NAK   SYN   ETB   CAN   EM    SUB   ESC   FS    GS    RS    US
       _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
    // SP    !     "     #     $     %     &     '     (     )     *     +     ,     -     .     /
       0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,
    // 0     1     2     3     4     5     6     7     8     9     :    ;     <     =     >     ?
       0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
    // @     A     B     C     D     E     F     G     H     I     J     K     L     M     N     O
       0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F,
    // P     Q     R     S     T     U     V     W     X     Y     Z     [     \     ]     ^     _
       0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, _UNK, 0x5D, 0x5E, 0x5F,
    // `     a     b     c     d     e     f     g     h     i     j     k     l     m     n     o
       0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
    // p     q     r     s     t     u     v     w     x     y     z     {     |     }     ~     DEL
       0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, _UNK, _UNK, _UNK, 0xE9, _UNK,
    //
       _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
    //
       _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
    //                                           §     Ё                 «
       _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, 0xFD, 0xA2, _UNK, _UNK, 0xC8, _UNK, _UNK, _UNK, _UNK,
    // °                                         ·     ё                 »
       0xEF, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, 0xDF, 0xB5, _UNK, _UNK, 0xC9, _UNK, _UNK, _UNK, _UNK,
    // А     Б     В     Г     Д     Е     Ж     З     И     Й     К     Л     М     Н     О     П
       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, 0x62, 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 CE110_LCD_Write(BYTE c)
{
    I2C_Start();
    I2C_WriteByte(I2C_ACCESS_WRITE(CE110_I2C_ADDRESS));
    I2C_WriteByte(CE110_I2C_CTL_LCD(CE110_CTL_Multi, CE110_CTL_RS, CE110_CTL_NORW));
    I2C_WriteByte(CP1251_to_HD44780[c]);
    I2C_Stop();
}

void CE110_LCD_WriteString(char *str)
{
    BYTE *pos = (BYTE *) str;
    
    I2C_Start();
    I2C_WriteByte(I2C_ACCESS_WRITE(CE110_I2C_ADDRESS));
    I2C_WriteByte(CE110_I2C_CTL_LCD(CE110_CTL_Multi, CE110_CTL_RS, CE110_CTL_NORW));    
    
    while(*pos)
    {
        I2C_WriteByte(CP1251_to_HD44780[*pos]);
        pos++;
    }
    
    I2C_Stop();
}

void CE110_LCD_WriteString_CSEG(prog_uchar *str)
{
    prog_uchar *pos = str;
    BYTE val;
    
    I2C_Start();
    I2C_WriteByte(I2C_ACCESS_WRITE(CE110_I2C_ADDRESS));
    I2C_WriteByte(CE110_I2C_CTL_LCD(CE110_CTL_Multi, CE110_CTL_RS, CE110_CTL_NORW));        
    
    do
    {
        val = pgm_read_byte_far((int) pos);
        if(val)
        {
            I2C_WriteByte(CP1251_to_HD44780[val]);
            pos++;
        }
    } while(val);
    
    I2C_Stop();
}


Ну и пример использования:
Код
prog_uchar FD_TimeFmtStr[] = "Время, ЧЧ:ММ: "; // все в обычной кодировке Windows, 1251

CE110_LCD_WriteString_CSEG(FD_TimeFmtStr);

CE110_LCD_Write('Ы');

CE110_LCD_WriteString("Ыыы!");


Правда, ежели требуется максимум быстродействия, то лучше без преобразований лишних... sad.gif
Go to the top of the page
 
+Quote Post
defunct
сообщение Aug 13 2008, 19:37
Сообщение #3


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(SysRq @ Aug 13 2008, 16:15) *
Правда, ежели требуется максимум быстродействия, то лучше без преобразований лишних... sad.gif

Преобразований там кот наплакал и на быстродействие они не влияют, а вот тормозов в вашей реализации от I2C_Start ... I2C_Stop хватает. Если требуется макс быстродейтсвие - обслуживайте I2C шину по прерыванию.
Go to the top of the page
 
+Quote Post
SysRq
сообщение Aug 13 2008, 20:08
Сообщение #4


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Цитата(defunct @ Aug 13 2008, 23:37) *
...а вот тормозов в вашей реализации от I2C_Start ... I2C_Stop хватает. Если требуется макс быстродейтсвие - обслуживайте I2C шину по прерыванию.

Всякие страшные аргументы функции I2C_WriteByte - это константы, они известны в compile-time (работа с этим девайсом). Реализация I2C софтверная, мастер; под SDA и SCL отвели две ноги порта, прерываний мне не перепало, набортный TWI тоже не у дел (я лишь программер, железо получаю готовое).
Чем улучшить?


Извините за offtopic
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- _Олег_   Кирилица на LCD смешивается!   Aug 13 2008, 05:51
- - Igor26   В конце строк для вывода на ЖК добавте 0х00 Ваша ...   Aug 13 2008, 06:19
- - MrYuran   А нельзя просто буковками чтоли? Типа: const unsig...   Aug 13 2008, 06:52
|- - Dog Pawlowa   Цитата(MrYuran @ Aug 13 2008, 09:52) А не...   Aug 13 2008, 07:22
|- - haker_fox   Цитата(MrYuran @ Aug 13 2008, 15:52) А не...   Aug 13 2008, 07:22
|- - Ivan A-R   Цитата(haker_fox @ Aug 13 2008, 11:22) А ...   Aug 13 2008, 07:39
||- - haker_fox   Цитата(Ivan A-R @ Aug 13 2008, 16:39...   Aug 13 2008, 07:45
|- - AHTOXA   Цитата(haker_fox @ Aug 13 2008, 13:22) А ...   Aug 13 2008, 07:45
|- - Serj78   Может я не в тему, но "железно" индикато...   Aug 13 2008, 08:17
- - Samsony   Можно просто текстом "термометр" - но дл...   Aug 13 2008, 08:45
- - _Олег_   Спасибо, сегодня попробую нули добавить, а за что ...   Aug 13 2008, 08:53
|- - MrYuran   Цитата(_Олег_ @ Aug 13 2008, 12:53) Спаси...   Aug 13 2008, 09:46
|- - Kolia   Я пользуюсь для перекодировки русского язака табл...   Aug 13 2008, 10:00
|- - _Олег_   Цитата(Kolia @ Aug 13 2008, 14:00) Я пол...   Aug 13 2008, 10:38
- - Igor26   ЦитатаНулевой символ обозначает конец строки ... а...   Aug 13 2008, 09:58
- - VXDRV   Кодconst unsigned char WinToLCD_Table[]={ ...   Aug 13 2008, 12:12
|- - _Олег_   Цитата(VXDRV @ Aug 13 2008, 16:12) Ещё та...   Aug 13 2008, 12:18
|- - VXDRV   Цитата(_Олег_ @ Aug 13 2008, 18:18) а как...   Aug 13 2008, 13:31
|- - Kolia   Пользуй мою табличку - она меньше требует памяти, ...   Aug 13 2008, 13:49
|- - VXDRV   Цитата(Kolia @ Aug 13 2008, 19:49) Пользу...   Aug 13 2008, 13:57
|- - defunct   Цитата(SysRq @ Aug 13 2008, 23:08) Чем ул...   Aug 13 2008, 20:36
- - _Олег_   Спасибо за ответы, добавил нули в конце строк для ...   Aug 14 2008, 04:06
- - mempfis_   Подкину Вам и свой вариант вывода кириллицы на жк-...   Aug 14 2008, 06:50
|- - demiurg_spb   Цитата(mempfis_ @ Aug 14 2008, 10:50) При...   Aug 14 2008, 07:10
||- - mempfis_   Цитата(demiurg_spb @ Aug 14 2008, 11:10) ...   Aug 14 2008, 08:39
|- - _Олег_   Цитата(mempfis_ @ Aug 14 2008, 10:50) Под...   Aug 14 2008, 07:15
- - GDI   2SysRq Цитата(я лишь программер, железо получаю го...   Aug 14 2008, 09:14
- - SysRq   Цитата(defunct @ Aug 14 2008, 00:36) ...а...   Aug 14 2008, 13:56


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 23:13
Рейтинг@Mail.ru


Страница сгенерированна за 0.01412 секунд с 7
ELECTRONIX ©2004-2016