Страница 1 из 1

Инверсия кнопок

Добавлено: Вт окт 06, 2009 13:02:34
FedorChek
Как инвертировать значение кнопок.
Считывание реализованно с помощью этих процедур (с работой которых я толком не разобрался)

Код: Выделить всё

unsigned char read_buttons_ones(void)
{
unsigned char temp;
temp=PIND;
temp>>=2;
temp|=0xf8;
return ~temp;
}

unsigned char read_buttons(void)
{
unsigned char buttons, count, temp;
buttons=read_buttons_ones();
if (ent_flag) {buttons|=1;ent_flag=0;}
count=128;
timer_counter1_start();
while((buttons==0)&&timeout1) buttons=read_buttons_ones();
if (!timeout1) return 0x00;
while(count--) buttons|=read_buttons_ones();
temp=read_buttons_ones();
while(temp)
{
buttons|=temp;
temp=read_buttons_ones();
}
return buttons;
}
Далее идет main
buttons=read_buttons();
switch(buttons)
{
case ENT_button: goto mode_recept;
Вот кнопка ENT_button не инвертирована (работает) т.е. когда нажимаем переходим к процедуре mode_recept
Как прочитать "нажатие" на остальные две кнопки у которых вместо "0" единица

Добавлено: Вт окт 06, 2009 19:36:25
Saadov
Полный текст приведите, как реализована клавиатура? Матрицей или просто несколько кнопок к порту?

Добавлено: Вт окт 06, 2009 20:00:57
Saadov
Как я понял это функция антидребезга кнопок, так и не понял, что вы в итоге хотели
Но приведу строки из одноименного курса

Код: Выделить всё

Логические операции:
|| // "ИЛИ" - только "ложь" и "ложь" 
   //          дают "ложь"   


&&  //  "И" - только "истина" и "истина" 
         //         дают "истина"   

!   // "НЕ" - логическое отрицание

/*   Правило - в Си считается:

"Ложь" (False) только ноль.

"Истина"(True)- не ноль. или так:  (!0)

*/

!(истина) // дает "ложь"   

!(ложь)    // дает "истина"  
Обратите внимание на последние 2 строчки

Добавлено: Вт окт 06, 2009 21:13:36
__Alexander
return buttons;

если инвертировать, то

return ~buttons;

Соссно все.

Добавлено: Чт окт 08, 2009 10:52:21
FedorChek
Вот схема подключения кнопок
Кнопка подключенная через транзистор работает с кодом приведенным выше остальные две нет как считать нажатие

Добавлено: Пт окт 09, 2009 10:51:34
FedorChek
Ну что нет соображений?