|
Как "красиво" написать этот кусочек?, Хочется писать красиво... |
|
|
|
Mar 22 2007, 21:44
|

Профессионал
    
Группа: Свой
Сообщений: 1 751
Регистрация: 4-08-05
Из: Великие Луки
Пользователь №: 7 360

|
Вот такой кусочек кода, как написать его покрасивее? Заранее благодарен за внимание! Код void read_key(void) { if(PINA==0xFE) { up_press=1; } else { up_press=0; };
if(PINA==0xFD) { down_press=1; } else { down_press=0; };
if(PINA==0xFB) { left_press=1; } else { left_press=0; };
if(PINA==0xF7) { right_press=1; } else { right_press=0; };
if(PINA==0xEF) { mode_press=1; } else { mode_press=0; };
if(PINA==0xDF) { set_press=1; } else { set_press=0; }; }
--------------------
Андрей Смирнов
|
|
|
|
|
 |
Ответов
|
Mar 22 2007, 22:37
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(Pyku_He_oTTyda @ Mar 22 2007, 21:26)  Спасибо! Несколько кнопок не могут быть нажаты, это считается ошибкой. Тогда вполне мой второй вариант подходит. Зачем держать семь переменных, для которых валидным будет только семь значений на всех? Можно еще поправить: Код enum keypressed_t {RELEASED, UP, DOWN, LEFT, RIGHT, MODE, SET, MAX_KEY}; void read_key() { uint8_t Port_Val = ~PINA; uint8_t Mask = 1 << (MAX_KEY - 1); uint8_t Key_tmp = MAX_KEY - 1; do { if(Port_Val & Mask) break; Mask >>= 1; Key_tmp--; } while(Mask); Key = Key_tmp; }
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Mar 22 2007, 22:48
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(Сергей Борщ @ Mar 22 2007, 22:37)  Тогда вполне мой второй вариант подходит. Зачем держать семь переменных, для которых валидным будет только семь значений на всех? Можно еще поправить: Код if(Port_Val & Mask) break; } так мы ловим первую по списку нажатую чтобы проверить что нажата только 1 нужно заменить break; на например tmp++; и в конце цикла проверять tmp<2
|
|
|
|
|
Mar 22 2007, 22:57
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(singlskv @ Mar 22 2007, 21:48)  так мы ловим первую по списку нажатую чтобы проверить что нажата только 1 нужно заменить break; на например tmp++; и в конце цикла проверять tmp<2 Да, про то, что две нажатые считаются как "ни одной" на момент написания не было. Тогда можно или считать, или так: Код void read_key() { uint8_t Port_Val = ~PINA; Port_Val &= (1<<MAX_KEYS) - 1; // mask unused bits if(!(Port_Val & (Port_Val - 1))) // if only one key pressed { uint8_t Mask = 1 << (MAX_KEY - 1); uint8_t Key_tmp = MAX_KEY - 1; do { if(Port_Val & Mask) break; Mask >>= 1; Key_tmp--; } while(Mask); Key = Key_tmp; } else Key = RELEASED; }
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
Сообщений в этой теме
Pyku_He_oTTyda Как "красиво" написать этот кусочек? Mar 22 2007, 21:44 _sR_ Цитата(Pyku_He_oTTyda @ Mar 22 2007, 21:4... Mar 22 2007, 22:06 singlskv Цитата(Pyku_He_oTTyda @ Mar 22 2007, 21:4... Mar 22 2007, 22:08 Сергей Борщ Цитата(Pyku_He_oTTyda @ Mar 22 2007, 20:4... Mar 22 2007, 22:09    singlskv Цитата(Сергей Борщ @ Mar 22 2007, 22:57) ... Mar 22 2007, 23:41 singlskv А значения up_press, down_press , .....
нельзя объ... Mar 22 2007, 22:40 Pyku_He_oTTyda Цитатато есть если несколько нажато, то считаем чт... Mar 22 2007, 22:44 SasaVitebsk А если так???
Код#define CNT_KEY 6 // Чи... Mar 23 2007, 00:30 Сергей Борщ Цитата(SasaVitebsk @ Mar 22 2007, 23:30) ... Mar 23 2007, 14:34  _sR_ Цитата(Сергей Борщ @ Mar 23 2007, 14:34) ... Mar 23 2007, 21:19   SasaVitebsk Цитата(_sR_ @ Mar 23 2007, 22:19) поддерж... Mar 24 2007, 15:54    _sR_ Цитата(SasaVitebsk @ Mar 24 2007, 15:54) ... Mar 25 2007, 19:54 SasaVitebsk Ну ты у нас с первого взгляда ....
Я бы ч/з ... Mar 23 2007, 20:57 smk switch () {
case :
break;
defa... Mar 23 2007, 22:30 kamedi_clab Цитата(smk @ Mar 23 2007, 22:30) switch (... Mar 23 2007, 23:44 Pyku_He_oTTyda Спасибо всем
Закончу прогу, перепишу кусочек, восп... Mar 24 2007, 09:58 kamedi_clab Надеюсь покажешь как кусочек реализован ? Mar 24 2007, 10:11 Pyku_He_oTTyda Покажу Mar 24 2007, 21:21 proba Цитата(Pyku_He_oTTyda @ Mar 22 2007, 21:4... Mar 25 2007, 10:46
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|