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

 
 
> Таблицы, как сделать на Си?
Algol
сообщение Jul 31 2006, 08:28
Сообщение #1


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

Группа: Свой
Сообщений: 140
Регистрация: 7-04-05
Из: Россия, Владимир
Пользователь №: 3 941



День добрый!
Недавно начал осваивать Си (HT-PICC) и все было хорошо, пока мне не приспичило сделать таблицу перекодировки. На асме я писал вот так, все просто и понятно - перед вызовом процедуры кидаем в W цифру, образ которой хотим получить

TABLE
ADDWF PCL,1
RETLW B'11101011' ;0
RETLW B'01100000' ;1
RETLW B'11000111' ;2
RETLW B'11100101' ;3

Вопрос к знатокам, как мне сделать тоже самое, но только на Си?

Сообщение отредактировал Algol - Jul 31 2006, 08:29
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
giran
сообщение Aug 9 2006, 05:39
Сообщение #2





Группа: Новичок
Сообщений: 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);    }
Go to the top of the page
 
+Quote Post
upc2
сообщение Aug 11 2006, 05:17
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 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 не вижу.
Поясните как вы с мелкими буквами выкрутились.
Go to the top of the page
 
+Quote Post
dialex
сообщение Aug 11 2006, 06:49
Сообщение #4


Участник
*

Группа: Новичок
Сообщений: 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];
}
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


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

 


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


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