Сообщение от FedorChek
|
|
Касательно 32 ноги ничего не менялось 1 и 2 ноги раньше были подключены как и 32 т.е. изначально на них висели «1» нажал появился «0» сейчас на 1 и 2 висит «0» нажал появилась «1» код приведенный в самом начале с переменной temp работал исправно (до изменения в схеме), как, сам не понял но факт остается фактом. Может дело не только в первой процедуре но и в остальных тоже (приведены в начале)
|
Хорошо - разбор полета.
Изначально ДО переделки:
|
Код:
|
unsigned char read_buttons_ones(void)
{
unsigned char temp;
temp=PIND;
temp››=2;
temp|=0xf8;
return ~temp;
} |
Не нажата ни одна кнопка - на входах 3 единицы - возвращает 0.
Нажата 1-ая кнопка( 32 нога - PD2 = 0) - возвращает 0x01
Нажата 2-ая кнопка (1 нога - PD3 = 0) - возвращает 0x02
Нажата 3-я кнопка (2 нога - PD4 = 0) - возвращает 0x04
Изменили подключение ДВУХ кнопок на инверсное
((PIND ›› 2) ^ 0x01) & 0x07
Не нажато ничего - на входах PD2 - 1, PD3 - 0, PD4 - 0
Возвращает 0
Нажата 1-ая - PD2 = 0, PD1 = 0, PD2 = 0 возвращает 0x01
2-ая нажата (PD3 = 1,PD2 = 1, PD4 = 0) возвращает 0х02
3-я нажата (PD4 = 1, PD3 = 0, PD2 = 1) возвращает 0х04
Это должно работать. В других функциях нет физического чтения портов, так что видимо все работает через этот драйвер клавиш.
Может там есть еще функции чтения? Искать по использованию PIND.