// Debounce program #include #include #define TRUE 1 #define FALSE 0 #define HIGH 1 #define LOW 0 #define BUTTON_PORT PORTA #define BUTTON_PIN PINA #define BUTTON_BIT PA7 #define LED_PORT PORTB #define LED_BIT PB2 #define LED_DDR DDRB #define DEBOUNCE_TIME 25 #define BLOCK_TIME 250 void setup(); int is_pressed(); void toggle_led(); int main() { setup(); while(TRUE) { if (is_pressed()) { toggle_led(); _delay_ms(BLOCK_TIME); } } } void setup() { CLKPR = (1 << CLKPCE); CLKPR = (0 << CLKPS3) | (0 << CLKPS2) | (0 << CLKPS1) | (0 << CLKPS0); // Set LED as output LED_DDR = _BV(LED_BIT); // Turn the LED off initially LED_PORT &= ~(_BV(LED_BIT)); // Turn on internal pull-up on button BUTTON_PORT = _BV(BUTTON_BIT); } int is_pressed() { // check if button pressed if (bit_is_clear(BUTTON_PIN, BUTTON_BIT)) { // debounce the signal _delay_ms(DEBOUNCE_TIME); if (bit_is_clear(BUTTON_PIN, BUTTON_BIT)) return TRUE; } return FALSE; } void toggle_led() { LED_PORT ^= _BV(LED_BIT); }