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

 
 
> Кирилица на 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
Ответов
VXDRV
сообщение Aug 13 2008, 12:12
Сообщение #2


Участник
*

Группа: Свой
Сообщений: 67
Регистрация: 5-02-07
Пользователь №: 25 074



Код
const unsigned char WinToLCD_Table[]={
0x00,    //000 Cимвол - User 0
0x01,    //001 Cимвол - User 1
0x02,    //002 Cимвол - User 2
0x03,    //003 Cимвол - User 3
0x04,    //004 Cимвол - User 4
0x05,    //005 Cимвол - User 5
0x06,    //006 Cимвол - User 6
0x07,    //007 Cимвол - User 7
0x08,    //008 Cимвол - User 0
0x09,    //009 Cимвол - User 1
0x0A,    //010 Cимвол - User 2
0x0B,    //011 Cимвол - User 3
0x0C,    //012 Cимвол - User 4
0x0D,    //013 Cимвол - User 5
0x0E,    //014 Cимвол - User 6
0x0F,    //015 Cимвол - User 7
0x20,    //016 Cимвол -
0x20,    //017 Cимвол -
0x20,    //018 Cимвол -
0x20,    //019 Cимвол -
0x20,    //020 Cимвол -
0x20,    //021 Cимвол -
0x20,    //022 Cимвол -
0x20,    //023 Cимвол -
0x20,    //024 Cимвол -
0x20,    //025 Cимвол -
0x20,    //026 Cимвол -
0x20,    //027 Cимвол -
0x20,    //028 Cимвол -
0x20,    //029 Cимвол -
0x20,    //030 Cимвол -
0x20,    //031 Cимвол -
0x20,    //032 Cимвол -
0x21,    //033 Cимвол - !
0x22,    //034 Cимвол - "
0x23,    //035 Cимвол - #
0x24,    //036 Cимвол - $
0x25,    //037 Cимвол - %
0x26,    //038 Cимвол - &
0x27,    //039 Cимвол - '
0x28,    //040 Cимвол - Левая скобка
0x29,    //041 Cимвол - Правая скобка
0x2A,    //042 Cимвол - *
0x2B,    //043 Cимвол - +
0x2C,    //044 Cимвол - ,
0x2D,    //045 Cимвол - -
0x2E,    //046 Cимвол - .
0x2F,    //047 Cимвол - /
0x30,    //048 Cимвол - 0
0x31,    //049 Cимвол - 1
0x32,    //050 Cимвол - 2
0x33,    //051 Cимвол - 3
0x34,    //052 Cимвол - 4
0x35,    //053 Cимвол - 5
0x36,    //054 Cимвол - 6
0x37,    //055 Cимвол - 7
0x38,    //056 Cимвол - 8
0x39,    //057 Cимвол - 9
0x3A,    //058 Cимвол - :
0x3B,    //059 Cимвол -;
0x3C,    //060 Cимвол - <
0x3D,    //061 Cимвол - =
0x3E,    //062 Cимвол - >
0x3F,    //063 Cимвол - ?
0x40,    //064 Cимвол - @
0x41,    //065 Cимвол - A
0x42,    //066 Cимвол - B
0x43,    //067 Cимвол - C
0x44,    //068 Cимвол - D
0x45,    //069 Cимвол - E
0x46,    //070 Cимвол - F
0x47,    //071 Cимвол - G
0x48,    //072 Cимвол - H
0x49,    //073 Cимвол - I
0x4A,    //074 Cимвол - J
0x4B,    //075 Cимвол - K
0x4C,    //076 Cимвол - L
0x4D,    //077 Cимвол - M
0x4E,    //078 Cимвол - N
0x4F,    //079 Cимвол - O
0x50,    //080 Cимвол - P
0x51,    //081 Cимвол - Q
0x52,    //082 Cимвол - R
0x53,    //083 Cимвол - S
0x54,    //084 Cимвол - T
0x55,    //085 Cимвол - U
0x56,    //086 Cимвол - V
0x57,    //087 Cимвол - W
0x58,    //088 Cимвол - X
0x59,    //089 Cимвол - Y
0x5A,    //090 Cимвол - Z
0x5B,    //091 Cимвол - Левая квадратная скобка
0x5C,    //092 Cимвол - Правая наклонная черта
0x5D,    //093 Cимвол - Правая квадратная скобка
0x5E,    //094 Cимвол - ^
0x5F,    //095 Cимвол - _
0x60,    //096 Cимвол - `
0x61,    //097 Cимвол - a
0x62,    //098 Cимвол - b
0x63,    //099 Cимвол - c
0x64,    //100 Cимвол - d
0x65,    //101 Cимвол - e
0x66,    //102 Cимвол - f
0x67,    //103 Cимвол - g
0x68,    //104 Cимвол - h
0x69,    //105 Cимвол - i
0x6A,    //106 Cимвол - j
0x6B,    //107 Cимвол - k
0x6C,    //108 Cимвол - l
0x6D,    //109 Cимвол - m
0x6E,    //110 Cимвол - n
0x6F,    //111 Cимвол - o
0x70,    //112 Cимвол - p
0x71,    //113 Cимвол - q
0x72,    //114 Cимвол - r
0x73,    //115 Cимвол - s
0x74,    //116 Cимвол - t
0x75,    //117 Cимвол - u
0x76,    //118 Cимвол - v
0x77,    //119 Cимвол - w
0x78,    //120 Cимвол - x
0x79,    //121 Cимвол - y
0x7A,    //122 Cимвол - z
0x7B,    //123 Cимвол - Левая фигурная скобка
0x7C,    //124 Cимвол - |
0x7D,    //125 Cимвол - Правая фигурная скобка
0x20,    //126 Cимвол -
0x20,    //127 Cимвол -
0x20,    //128 Cимвол -
0x20,    //129 Cимвол -
0x20,    //130 Cимвол -
0x20,    //131 Cимвол -
0x20,    //132 Cимвол -
0x20,    //133 Cимвол -
0x20,    //134 Cимвол -
0x20,    //135 Cимвол -
0x20,    //136 Cимвол -
0x20,    //137 Cимвол -
0x20,    //138 Cимвол -
0x20,    //139 Cимвол -
0x20,    //140 Cимвол -
0x20,    //141 Cимвол -
0x20,    //142 Cимвол -
0x20,    //143 Cимвол -
0x20,    //144 Cимвол -
0x20,    //145 Cимвол -
0x20,    //146 Cимвол -
0x20,    //147 Cимвол -
0x20,    //148 Cимвол -
0x20,    //149 Cимвол -
0x20,    //150 Cимвол -
0x20,    //151 Cимвол -
0x20,    //152 Cимвол -
0x20,    //153 Cимвол -
0x20,    //154 Cимвол -
0x20,    //155 Cимвол -
0x20,    //156 Cимвол -
0x20,    //157 Cимвол -
0x20,    //158 Cимвол -
0x20,    //159 Cимвол -
0x20,    //160 Cимвол -
0x20,    //161 Cимвол -
0x20,    //162 Cимвол -
0x20,    //163 Cимвол -
0x20,    //164 Cимвол -
0x20,    //165 Cимвол -
0x20,    //166 Cимвол -
0x20,    //167 Cимвол -
0xA2,    //168 Cимвол - Ё
0x20,    //169 Cимвол -
0x20,    //170 Cимвол -
0x20,    //171 Cимвол -
0x20,    //172 Cимвол -
0x20,    //173 Cимвол -
0x20,    //174 Cимвол -
0x20,    //175 Cимвол -
0x20,    //176 Cимвол -
0x20,    //177 Cимвол -
0x20,    //178 Cимвол -
0x20,    //179 Cимвол -
0x20,    //180 Cимвол -
0x20,    //181 Cимвол -
0x20,    //182 Cимвол -
0x20,    //183 Cимвол -
0xB5,    //184 Cимвол - ё
0x20,    //185 Cимвол -
0x20,    //186 Cимвол -
0x20,    //187 Cимвол -
0x20,    //188 Cимвол -
0x20,    //189 Cимвол -
0x20,    //190 Cимвол -
0x20,    //191 Cимвол -
0x41,    //192 Cимвол - А
0xA0,    //193 Cимвол - Б
0x42,    //194 Cимвол - В
0xA1,    //195 Cимвол - Г
0xE0,    //196 Cимвол - Д
0x45,    //197 Cимвол - Е
0xA3,    //198 Cимвол - Ж
0xA4,    //199 Cимвол - З
0xA5,    //200 Cимвол - И
0xA6,    //201 Cимвол - Й
0x4B,    //202 Cимвол - К
0xA7,    //203 Cимвол - Л
0x4D,    //204 Cимвол - М
0x48,    //205 Cимвол - Н
0x4F,    //206 Cимвол - О
0xA8,    //207 Cимвол - П
0x50,    //208 Cимвол - Р
0x43,    //209 Cимвол - С
0x54,    //210 Cимвол - Т
0xA9,    //211 Cимвол - У
0xAA,    //212 Cимвол - Ф
0x58,    //213 Cимвол - Х
0xE1,    //214 Cимвол - Ц
0xAB,    //215 Cимвол - Ч
0xAC,    //216 Cимвол - Ш
0xE2,    //217 Cимвол - Щ
0xAD,    //218 Cимвол - Ъ
0xAE,    //219 Cимвол - Ы
0x62,    //220 Cимвол - Ь
0xAF,    //221 Cимвол - Э
0xB0,    //222 Cимвол - Ю
0xB1,    //223 Cимвол - Я
0x61,    //224 Cимвол - а
0xB2,    //225 Cимвол - б
0xB3,    //226 Cимвол - в
0xB4,    //227 Cимвол - г
0xE3,    //228 Cимвол - д
0x65,    //229 Cимвол - е
0xB6,    //230 Cимвол - ж
0xB7,    //231 Cимвол - з
0xB8,    //232 Cимвол - и
0xB9,    //233 Cимвол - й
0xBA,    //234 Cимвол - к
0xBB,    //235 Cимвол - л
0xBC,    //236 Cимвол - м
0xBD,    //237 Cимвол - н
0x6F,    //238 Cимвол - о
0xBE,    //239 Cимвол - п
0x70,    //240 Cимвол - р
0x63,    //241 Cимвол - с
0xBF,    //242 Cимвол - т
0x79,    //243 Cимвол - у
0xE4,    //244 Cимвол - ф
0x78,    //245 Cимвол - х
0xE5,    //246 Cимвол - ц
0xC0,    //247 Cимвол - ч
0xC1,    //248 Cимвол - ш
0xE6,    //249 Cимвол - щ
0xC2,    //250 Cимвол - ъ
0xC3,    //251 Cимвол - ы
0xC4,    //252 Cимвол - ь
0xC5,    //253 Cимвол - э
0xC6,    //254 Cимвол - ю
0xC7    //255 Cимвол - я
};

unsigned char ConvertByteToLCD(unsigned char Byte_LCD)
{
    return WinToLCD_Table[Byte_LCD];
}


Ещё табличка - работает шустрее, вероятно, чем прошлая... Специфичные знаки игнорированы.
Go to the top of the page
 
+Quote Post
_Олег_
сообщение Aug 13 2008, 12:18
Сообщение #3


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

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



Цитата(VXDRV @ Aug 13 2008, 16:12) *
Ещё табличка - работает шустрее, вероятно, чем прошлая... Специфичные знаки игнорированы.


а как, например, с этой табличкой что-то вывести на LCD?
Go to the top of the page
 
+Quote Post
VXDRV
сообщение Aug 13 2008, 13:31
Сообщение #4


Участник
*

Группа: Свой
Сообщений: 67
Регистрация: 5-02-07
Пользователь №: 25 074



Цитата(_Олег_ @ Aug 13 2008, 18:18) *
а как, например, с этой табличкой что-то вывести на LCD?

В последних проектах использую RTOS SALVO. Например, задача по выводу на LCD 16x2:

Код
void Task_LCDOut(void)
{
    OS_Delay(16);
    WriteIR(0x30);
    OS_Delay(5);
    WriteIR(0x30);
    OS_Delay(5);
    WriteIR(0x30);
    OS_Delay(5);
    WriteIR(0x38);
    OS_Delay(5);
    WriteIR(0x80);
    OS_Delay(5);
    WriteIR(0x0C);
    OS_Delay(5);
    WriteIR(0x06);            while (WaitReady()==0) {OS_Yield();};

// Зашиваем сердечко в LCD
    WriteIR(0x40);            while (WaitReady()==0) {OS_Yield();};
    WriteDR(0b00000000);    while (WaitReady()==0) {OS_Yield();};
    WriteDR(0b00001010);    while (WaitReady()==0) {OS_Yield();};
    WriteDR(0b00011111);    while (WaitReady()==0) {OS_Yield();};
    WriteDR(0b00011111);    while (WaitReady()==0) {OS_Yield();};
    WriteDR(0b00001110);    while (WaitReady()==0) {OS_Yield();};
    WriteDR(0b00000100);    while (WaitReady()==0) {OS_Yield();};
    WriteDR(0b00000000);    while (WaitReady()==0) {OS_Yield();};
    WriteDR(0b00000000);    while (WaitReady()==0) {OS_Yield();};
    for (;;)
    {
        OS_Delay(2);

        if (LCD_ACTION==34) {LCD_ACTION=0;}
        if (LCD_ACTION==0)
        {
            if (WaitReady()==1) {WriteIR(0x80);} else {LCD_ACTION=255;}
        }
        if (LCD_ACTION==17)
        {
            if (WaitReady()==1) {WriteIR(0xC0);} else {LCD_ACTION=16;}
        }
        if ((LCD_ACTION>=1)&&(LCD_ACTION<=16))
        {
            if (WaitReady()==1)
            {
                WriteDR(ConvertByteToLCD(LCD_CHAR[LCD_ACTION-1]));
            }
            else
            {
                --LCD_ACTION;
            }
        }
        if ((LCD_ACTION>=18)&&(LCD_ACTION<=33))
        {
            if (WaitReady()==1)
            {
                WriteDR(ConvertByteToLCD(LCD_CHAR[LCD_ACTION-2]));
            }
            else
            {
                --LCD_ACTION;
            }
        }
        ++LCD_ACTION;
    }
}


LCD_CHAR[0...31] - буфер (unsigned char) в RAM;
LCD_ACTION - счётчик действий;
За проход задачи обновляется один символ.
Первая строка символы с 0 по 15, вторая с 16 по 31.

Дополнительные функции (используемые в других задачах):

Код
void CopyROMtoLCDBuff(const unsigned char *StrIn, unsigned char *LCD_Buff)

{
    while (*StrIn)
    {
        *(LCD_Buff++)=*(StrIn++);
    }
}

void CopyRAMtoLCDBuff(unsigned char *StrIn, unsigned char *LCD_Buff)
{
    while (*StrIn)
    {
        *(LCD_Buff++)=*(StrIn++);
    }
}

unsigned char length(unsigned char *StrIn)
{
    unsigned char L;
    L=0;
    while (*StrIn)
    {
        StrIn++;
        L++;
    }
    return L;
}


Например вывод текста в буфер LCD:

Код
const unsigned char Message_MEASURING[]="Measuring...";
const unsigned char Message_STATE2[]="Перенапряжение";


Вызов:

Код
pLCD_CHAR=&LCD_CHAR[0];
CopyROMtoLCDBuff(Message_MEASURING, pLCD_CHAR);
pLCD_CHAR=&LCD_CHAR[16];
CopyROMtoLCDBuff(Message_STATE2, pLCD_CHAR);


, где pLCD_CHAR - указатель на буфер LCD. Выводятся сообщения начиная с нулевого и с шестнадцатого символа (Выводится в верхней строке - "Measuring...", в нижней - "Перенапряжение").

Из оперативной памяти (например, изменяющиеся переменные - должны завершаться нулём):

Код
pITOA_BUFF=&ITOA_BUFF[0];
pLCD_CHAR=&LCD_CHAR[10];
itoa10(pITOA_BUFF, HR_Temp);
CopyRAMtoLCDBuff(pITOA_BUFF, pLCD_CHAR);


- Выводятся с 10 позиции цифры, разложенные в ITOA_BUFF.
Или тупо - присвоением:

Код
pITOA_BUFF=&ITOA_BUFF[0];
LCD_CHAR[3]=ITOA_BUFF[0];
LCD_CHAR[4]=ITOA_BUFF[1];
LCD_CHAR[5]='.';
LCD_CHAR[6]=ITOA_BUFF[2];


- Выводятся цифры из ITOA_BUFF с разделительной точкой.

Кстати, не забываем затирать старую инфу в буфере LCD_CHAR, записывая код 0x20, при обновлении её. При этом происходит постоянное обновление экрана. Необходимо переписывать только LCD_CHAR.
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
|- - Kolia   Пользуй мою табличку - она меньше требует памяти, ...   Aug 13 2008, 13:49
|- - VXDRV   Цитата(Kolia @ Aug 13 2008, 19:49) Пользу...   Aug 13 2008, 13:57
- - SysRq   Добавлю свой вариант: Код#define _UNK 0xFF static...   Aug 13 2008, 13:15
|- - defunct   Цитата(SysRq @ Aug 13 2008, 16:15) Правда...   Aug 13 2008, 19:37
|- - SysRq   Цитата(defunct @ Aug 13 2008, 23:37) ...а...   Aug 13 2008, 20:08
|- - 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
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 22:12
Рейтинг@Mail.ru


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