#define F_CPU 8000000L
#include <avr/io.h>
int main(void){
unsigned char drebezg=5; //тактов на дребезг кнопки, чем хуже кнопка, тем выше число
unsigned char butcount=0;
DDRD = 0xFF; //порт D на выход, например зажигаем светодиоды и т.д.
PORTD = 0b00000000; //все биты порта D = 0
DDRB = 0x00; //порт B на вход
PORTB = 0b00000001; //нулевой бит подтянут к 1. К этой ножке подключена кнопка. Кнопка замыкает нулевую ножку порта B на землю.
while(1){
if (!(PINB&0b00000001)){
// PINB - регистр состояния порта B. Побитно посмотреть не можем на СИ, поэтому проверяем так:
// PINB&0b00000001 - проверяем нулевой бит порта B, что он = 1 (кнопка не нажата), остальные биты не учитываются.
// !(PINB&0b00000001) - проверяем, что нулевой бит порта B, не равен 1 (!=1), т.е. кнопка нажата, остальные биты не учитываются
if(butcount < drebezg){butcount ;} //пропускаем такты на дребезг нажатия кнопки
else{PORTD = 0b00000001;}
}
else{
if(butcount > 0){butcount--;} //пропускаем такты на дребезг отжатия кнопки
else{PORTD = 0b00000000;}
}
}
}