|
Таблицы, как сделать на Си? |
|
|
|
 |
Ответов
|
Aug 9 2006, 05:39
|
Группа: Новичок
Сообщений: 12
Регистрация: 18-07-05
Пользователь №: 6 878

|
Вообщем, вот окончательный вариант, если кому пригодится, правда без русских букв ёЁ, но это 2-мя отдельными if-ами. Вывожу на 16-знаковый ЖКИ hd44780r, проверил в железе, работает. Код const unsigned char rusTable[64]= { 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, 0xAD, 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};
const unsigned char Message[16]= {"Привет,мир World"};
main() { unsigned char i,currentPOS; TRISB=0x00; di(); //---------инициализация lcd----------- lcd=0; delay(1300); lcd=0x30; bitset (lcd, en); bitclr (lcd, en);// _/\_ delay(7); bitset (lcd, en); bitclr (lcd, en);// _/\_ delay(230); wr_command_lcd(0x20); wr_command_lcd(0x28); wr_command_lcd(0x0C); wr_command_lcd(0x06); wr_command_lcd(0x01); delay(230); //----------Загрузка строки -------- wr_command_lcd(0x80); for (i=0;i<8;i++) { currentPOS= Message[i]; if (currentPOS > 0x7F) currentPOS=rusTable[Message[i]-0xC0]; wr_data_lcd(currentPOS); } wr_command_lcd(0xC0); for (i=8;i<16;i++) { currentPOS= Message[i]; if (currentPOS > 0x7F) currentPOS=rusTable[Message[i]-0xC0]; wr_data_lcd(currentPOS); }
|
|
|
|
|
Aug 11 2006, 05:17
|
Знающий
   
Группа: Свой
Сообщений: 506
Регистрация: 29-09-05
Из: Донецк
Пользователь №: 9 063

|
Цитата(giran @ Aug 9 2006, 08:39)  Вообщем, вот окончательный вариант, если кому пригодится, правда без русских букв ёЁ, но это 2-мя отдельными if-ами. Вывожу на 16-знаковый ЖКИ hd44780r, проверил в железе, работает. Код const unsigned char rusTable[64]= { 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, 0xAD, 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};
const unsigned char Message[16]= {"Привет,мир World"};
main() { unsigned char i,currentPOS; TRISB=0x00; di(); //---------инициализация lcd----------- lcd=0; delay(1300); lcd=0x30; bitset (lcd, en); bitclr (lcd, en);// _/\_ delay(7); bitset (lcd, en); bitclr (lcd, en);// _/\_ delay(230); wr_command_lcd(0x20); wr_command_lcd(0x28); wr_command_lcd(0x0C); wr_command_lcd(0x06); wr_command_lcd(0x01); delay(230); //----------Загрузка строки -------- wr_command_lcd(0x80); for (i=0;i<8;i++) { currentPOS= Message[i]; if (currentPOS > 0x7F) currentPOS=rusTable[Message[i]-0xC0]; wr_data_lcd(currentPOS); } wr_command_lcd(0xC0); for (i=8;i<16;i++) { currentPOS= Message[i]; if (currentPOS > 0x7F) currentPOS=rusTable[Message[i]-0xC0]; wr_data_lcd(currentPOS); } Да первая группа русских букв идет после 7F , но вычитать надо 80, а не С0. Анализа второй группы после DF не вижу. Поясните как вы с мелкими буквами выкрутились.
|
|
|
|
|
Aug 11 2006, 06:49
|
Участник

Группа: Новичок
Сообщений: 22
Регистрация: 11-07-06
Пользователь №: 18 734

|
const unsigned char rus_codes[66]= { 0x41,0xa0,0x42,0xa1,0xe0,0x45,0xa2,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,0XB5,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 } ;
// кодировка win1251 -- буквы русские, вроде работает if(c>=0xc0 || c==0xb8 || c==0xa8) { if(c=='Ё') c=6; else if(c=='ё') c='е'-'А' + 2; else if(c<='Е') c=c-'А'; else if(c<='ж') c=c-'А'+1; else c=c-'А'+2; c=rus_codes[c]; }
|
|
|
|
Сообщений в этой теме
Algol Таблицы Jul 31 2006, 08:28 psL Цитата(Algol @ Jul 31 2006, 12:28) День д... Jul 31 2006, 10:29 Костян Цитата(psL @ Jul 31 2006, 08:29) char con... Aug 3 2006, 15:19 upc2 Использовать конструкцию "switch case" Jul 31 2006, 12:07 Algol upc2
Конструкция switch - case не даст тождественн... Jul 31 2006, 14:12 upc2 1.Согласен, что массив в по сравнению с switch - c... Aug 1 2006, 06:00 Algol По п.1 согласен, что с буквами будут дополнительны... Aug 1 2006, 06:30 _Bill Цитата(Algol @ Aug 1 2006, 09:30) По п.1 ... Aug 1 2006, 12:54 Algol В случае Си, так как посоветовал psL. В случае асм... Aug 1 2006, 13:05 _Bill Цитата(Algol @ Aug 1 2006, 16:05) В случа... Aug 1 2006, 13:16 upc2 Откуда 60 байт?
Программа на Си
void main(void)
{... Aug 2 2006, 08:09 upc2 С точки зрения экономичности совершенно одинаково,... Aug 4 2006, 05:01 dialex Цитата(upc2 @ Aug 4 2006, 10:01) Совершен... Aug 4 2006, 05:06 upc2 Сделал.
3 0002 008A MOVWF 0xa ... Aug 4 2006, 05:19 Костян В итоге с const мы видем наличие 'retlw0x60... Aug 4 2006, 09:56 upc2 Цитата(Костян @ Aug 4 2006, 12:56) В итог... Aug 4 2006, 11:43 giran А подскажите, как разместить таблицу, например ... Aug 8 2006, 08:50 Костян Цитата(giran @ Aug 8 2006, 06:50) Пытаюсь... Aug 8 2006, 09:22 giran То есть что-то типа такого:
Кодconst unsigned char... Aug 8 2006, 10:24 Костян Цитата(giran @ Aug 8 2006, 08:24) То есть... Aug 8 2006, 10:46 giran ЦитатаНе нужно оперировать кодами букв
Вы немного ... Aug 9 2006, 02:30 Костян Цитата(giran @ Aug 9 2006, 00:30) Вы немн... Aug 11 2006, 20:35 upc2 dialex Спасибо я разобрался.Различие в таблицах ко... Aug 11 2006, 08:01
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|