#ifndef F_CPU #define F_CPU 8000000L #endif #include #include #include #include //#define void display(int i); //for 7seg with common cathode //unsigned int digits[10] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0xFD,0x07,0xFF,0xEF}; //for 7seg with common anode unsigned char digits[10] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x02, 0xF8, 0x00, 0x10}; int i = 0; int pause = 0; ISR(INT0_vect){ if (pause == 0){ if (i>8888){ i = 0; } else { i++; } } _delay_ms(0.2); } void main(void){ DDRA = 0xFF; DDRB = 0xFF; GIMSK |= 0b01000000; // Enable INT0 MCUCR |= 0b00000011; // Trigger INT0 on rising edge sei(); //Enable Global Interrupt //PORTA = digits[3]; while(1) { display(i); /*if (pause == 0){ if (i>8){ i = 0; } else { i++; } } if (PB5) { // is switch open? pause = 1; } else { pause = 0; }*/ } } void display(int i){ int tmp, four, three, two, one; float delay = 0.1; tmp = i; four = tmp/1000; tmp = tmp-1000*four; three = tmp/100; tmp = tmp-100*three; two = tmp/10; tmp = tmp-10*two; one = tmp%10; tmp = tmp-one; if(i>999){ PORTB = 0x01; PORTA = digits[four]; _delay_ms(delay); } if(i>99){ PORTB = 0x02; PORTA = digits[three]; _delay_ms(delay); } if(i>9){ PORTB = 0x04; PORTA = digits[two]; _delay_ms(delay); } PORTB = 0x08; PORTA = digits[one]; _delay_ms(delay); }