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

 
 
> Как "красиво" написать этот кусочек?, Хочется писать красиво...
Pyku_He_oTTyda
сообщение Mar 22 2007, 21:44
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 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;
};
}


--------------------
Андрей Смирнов
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Pyku_He_oTTyda
сообщение Mar 22 2007, 22:26
Сообщение #2


Профессионал
*****

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



Спасибо!
Несколько кнопок не могут быть нажаты, это считается ошибкой.

З.Ы. Прошу прощения, с использованием копи-пасте пропустил ошибку, key_press в моем коде не работает, счас поправлю


--------------------
Андрей Смирнов
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 22 2007, 22:37
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
singlskv
сообщение Mar 22 2007, 22:48
Сообщение #4


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



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

так мы ловим первую по списку нажатую
чтобы проверить что нажата только 1 нужно заменить break; на например tmp++;
и в конце цикла проверять tmp<2
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 22 2007, 22:57
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post

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


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

 


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


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