// segment | Arduino board PIN number #define G 13 #define F 12 #define A 11 #define B 10 #define E 9 #define D 8 #define C 7 #define DP 6 // Commonn cathodes control #define GND1 5 #define GND2 4 #define GND3 3 #define GND4 2 #define Button_start 1 int timer=0; char run=0; // shows if timer is runnig int b=0; //for buttons int c=0; int d=0; // for buzzer char set_mode=0; // shows if timer is in setup mode int i=0; // functions to display digits ISR(TIMER1_OVF_vect) { TCNT1=0x0BDC; // set initial value to remove time error (16bit counter register) i++; timer++; } void digit0 () { // for 0 needed to turn ON F A B C D E segments, so: digitalWrite(A, HIGH); digitalWrite(B, HIGH); digitalWrite(C, HIGH); digitalWrite(D, HIGH); digitalWrite(E, HIGH); digitalWrite(F, HIGH); //////////////////////// G segment should be turn OFF digitalWrite(G, LOW); }; void digit1 () { digitalWrite(A,LOW); digitalWrite(B, HIGH); digitalWrite(C, HIGH); digitalWrite(D, LOW); digitalWrite(E, LOW); digitalWrite(F, LOW); digitalWrite(G, LOW); }; void digit2 () { digitalWrite(A,HIGH); digitalWrite(B, HIGH); digitalWrite(C, LOW); digitalWrite(D, HIGH); digitalWrite(E, HIGH); digitalWrite(F, LOW); digitalWrite(G, HIGH); }; void digit3 () { digitalWrite(A,HIGH); digitalWrite(B, HIGH); digitalWrite(C, HIGH); digitalWrite(D, HIGH); digitalWrite(E, LOW); digitalWrite(F, LOW); digitalWrite(G, HIGH); }; void digit4 () { digitalWrite(A,LOW); digitalWrite(B, HIGH); digitalWrite(C, HIGH); digitalWrite(D, LOW); digitalWrite(E, LOW); digitalWrite(F, HIGH); digitalWrite(G, HIGH); }; void digit5 () { digitalWrite(A,HIGH); digitalWrite(B, LOW); digitalWrite(C, HIGH); digitalWrite(D, HIGH); digitalWrite(E, LOW); digitalWrite(F, HIGH); digitalWrite(G, HIGH); }; void digit6 () { digitalWrite(A,HIGH); digitalWrite(B, LOW); digitalWrite(C, HIGH); digitalWrite(D, HIGH); digitalWrite(E, HIGH); digitalWrite(F, HIGH); digitalWrite(G, HIGH); }; void digit7 () { digitalWrite(A,HIGH); digitalWrite(B, HIGH); digitalWrite(C, HIGH); digitalWrite(D, LOW); digitalWrite(E, LOW); digitalWrite(F, LOW); digitalWrite(G, LOW); }; void digit8 () { digitalWrite(A, HIGH); digitalWrite(B, HIGH); digitalWrite(C, HIGH); digitalWrite(D, HIGH); digitalWrite(E, HIGH); digitalWrite(F, HIGH); digitalWrite(G, HIGH); }; void digit9 () { digitalWrite(A, HIGH); digitalWrite(B, HIGH); digitalWrite(C, HIGH); digitalWrite(D, HIGH); digitalWrite(E, LOW); digitalWrite(F, HIGH); digitalWrite(G, HIGH); }; //function to display digit from inputed int void showdigit (int digit) { switch (digit) { case 0: digit0 (); break; case 1: digit1 (); break; case 2: digit2 (); break; case 3: digit3 (); break; case 4: digit4 (); break; case 5: digit5 (); break; case 6: digit6 (); break; case 7: digit7 (); break; case 8: digit8 (); break; case 9: digit9 (); break; default: break; }; }; // showing 4 digits void showdigits (int number) { // e.g. we have "1234" showdigit(number/1000); // segments are set to display "1" digitalWrite(DP, LOW); digitalWrite(GND1, HIGH); // first digit on, digitalWrite(GND2, LOW); // other off digitalWrite(GND3, LOW); digitalWrite(GND4, LOW); delay (1); number = number%1000; // remainder of 1234/1000 is 234 digitalWrite(GND1, LOW); // first digit is off showdigit(number/60); //// segments are set to display "2" digitalWrite(GND2, HIGH); // second digit is on digitalWrite(DP, HIGH); delay (1); // and so on.... number =number%60; digitalWrite(GND2, LOW); showdigit(number/10); digitalWrite(GND3, HIGH); digitalWrite(DP, LOW); delay (1); number =number%10; digitalWrite(GND3, LOW); showdigit(number); digitalWrite(GND4, HIGH); digitalWrite(DP, LOW); delay (1); }; void setup() { pinMode(A, OUTPUT); pinMode(B, OUTPUT); pinMode(C, OUTPUT); pinMode(D, OUTPUT); pinMode(E, OUTPUT); pinMode(F, OUTPUT); pinMode(G, OUTPUT); pinMode(DP, OUTPUT); pinMode(GND1, OUTPUT); pinMode(GND2, OUTPUT); pinMode(GND3, OUTPUT); pinMode(GND4, OUTPUT); pinMode(Button_start, INPUT); digitalWrite(Button_start, HIGH); //pull up resistor TIMSK1=0x01; // enabled global and timer overflow interrupt; TCCR1A = 0x00; // normal operation page 148 (mode0); TCNT1=0x0BDC; // set initial value to remove time error (16bit counter register) TCCR1B = 0x04; // start timer/ set clock }; void loop () { showdigits (i); };