#include #define F_CPU 4000000UL #include #include void setColumnToZero(char bit) { bit = 3 - bit; PORTA &= ~_BV(bit); } void setColumnToOne(char bit) { bit = 3 - bit; PORTA |= _BV(bit); } char isRowZero(char bit) { bit += 4; return (PINA & _BV(bit)) == _BV(bit); } void timer1_init() { TCCR1B |= (1 << WGM12)|(1 << CS11)|(1 << CS10); TCNT1 = 0; OCR1A = 24; TIMSK |= (1 << OCIE1A); sei(); } ISR (TIMER1_COMPA_vect) { for (char i = 0; i < 4; i++) { setColumnToZero(i); for (char j = 0; j < 4; j++) { if (isRowZero(j)) { PORTC = ~_BV(j); _delay_ms(1000); PORTC = 0xff; } } setColumnToOne(i); } } void setup() { DDRC = 0xff; // input timer1_init(); } int main(void) { setup(); while(1) { } }