#include<avr/io.h>
uint8_t leds_on_off_DDR[5] = {0xFB, 0xFB, 0xFE, 0xFE, 0xFD};
uint8_t leds_on_off[5] = {(0xFD<<PF0), (0xFE<<PF0), (0xFB<<PF0), (0xFD<<PF0), (0xFB<<PF0)};
typedef enum {
led1=0,
led2,
led3,
led4,
led5
} leds;
void io_init () {
DDRF = 0x07;
PORTF = 0xF8;
}
void Delay(void ) {
volatile cnt = 16000;
while (cnt--){
asm("nop");
}
}
void turn_on_led () {
DDRF = 0x07;
PORTF = 0xF8;
if (PINF!=0xF8) {
if (!((PINF>>PINF3)&1)) {
DDRF = leds_on_off_DDR[ led1 ];
PORTF = leds_on_off[ led1 ];
}
else if (!( PINF &(1<<PINF4) )) {
DDRF = leds_on_off_DDR[ led2 ];
PORTF = leds_on_off[ led2 ];
}
else if (!( PINF &(1<<PINF5) )) {
DDRF = leds_on_off_DDR[ led3 ];
PORTF = leds_on_off[ led3 ];
}
else if (!( PINF &(1<<PINF6) )) {
DDRF = leds_on_off_DDR[ led4 ];
PORTF = leds_on_off[ led4 ];
}
else if (!( PINF &(1<<PINF7) )) {
DDRF = leds_on_off_DDR[ led5 ];
PORTF = leds_on_off[ led5 ];
}
}
else {
DDRF = 0x07;
PORTF = 0xF8;
}
}
void main() {
io_init();
while (1) {
turn_on_led();
Delay();
}
}