|
Кирилица на LCD смешивается! |
|
|
|
Aug 13 2008, 05:51
|

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

|
Здравствуйте, хочу спросить следущее: при использовании const unsigned char для вывода кирилицы на LCD почему-то объединяются несколько переменных? Mне интересно как выводить сообщения на LCD содержащие одинаковые фразы, почему они смешиваются? Вот исходник с результатом:
Эскизы прикрепленных изображений
Прикрепленные файлы
v1.183.rar ( 91.57 килобайт )
Кол-во скачиваний: 49
|
|
|
|
|
 |
Ответов
|
Aug 13 2008, 12:12
|

Участник

Группа: Свой
Сообщений: 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]; } Ещё табличка - работает шустрее, вероятно, чем прошлая... Специфичные знаки игнорированы.
|
|
|
|
|
Aug 13 2008, 12:18
|

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

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

Участник

Группа: Свой
Сообщений: 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.
|
|
|
|
Сообщений в этой теме
_Олег_ Кирилица на 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
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|
|