настраиваете любой таймер на прерывание каждые 15 миллисекунд. заводите volatile-переменную btn, которая будет содержать номера кнопок. в прерывании таймера записываете в эту переменную содержимое порта, к которому подключены кнопки. в основном цикле смотрите в нужные моменты эту переменную и в зависимости от того, какие там значения, делаете то или это...infinity19891 писал(а):забыл как кнопки опрашивать.
Код: Выделить всё
#define BTN_PORT PINB
#define BTN1 PB0
#define BTN2 PB1
#define BTN3 PB3
// и так далее, сколько там у вас кнопок
volatile uint8_t btn;
ISR(IMER0_OVF_vect){
// каждые 15-20 миллисекунд!
btn = (~BTN_PORT) & (_BV(BTN1) | _BV(BTN2) | _BV(BTN3));
}
int main(void){
// всякое разное ваше
// настройки портов и таймеров
while(1){
// всякое разное нужное
switch(btn){
case _BV(BTN1): // если нажата кнопка 1
break;
case _BV(BTN2): // если нажата кнопка 2
break;
// и так далее все кнопки
default:
// если не нажато ни одной кнопки или нажато сразу несколько
}
}
}


