int milisekund = 0; int stotinke = 0; int desetinke = 0; int sekunde = 0; int jedinice = 0; int desetice = 0; int stotine = 0; unsigned long ispisTime = 0; //pomocna promenljiva za periodu odabiranja ispisa cifre na dipleju int brojDispleja = 4; //broj displeja koji se trenutno osvezava (ispis krece od DIS4) const int matricaCifara[10][7] = { { 1,1,1,1,1,1,0 }, // cifra 0 { 0,1,1,0,0,0,0 }, // cifra 1 { 1,1,0,1,1,0,1 }, // cifra 2 { 1,1,1,1,0,0,1 }, // cifra 3 { 0,1,1,0,0,1,1 }, // cifra 4 { 1,0,1,1,0,1,1 }, // cifra 5 { 1,0,1,1,1,1,1 }, // cifra 6 { 1,1,1,0,0,0,0 }, // cifra 7 { 1,1,1,1,1,1,1 }, // cifra 8 { 1,1,1,0,0,1,1 }}; // cifra 9 const int matricaDispleja[4][4] = { { 0,1,1,1 }, // prozivka DIS4 { 1,0,1, 1}, // prozivka DIS3 { 1,1,0,1 }, // prozivka DIS2 { 1,1,1,0 }}; // prozivka DIS1 void setup() { pinMode(2, OUTPUT); //a segment pinMode(3, OUTPUT); //b segment pinMode(4, OUTPUT); //c segment pinMode(5, OUTPUT); //d segment pinMode(6, OUTPUT); //e segment pinMode(7, OUTPUT); //f segment pinMode(8, OUTPUT); //g segment pinMode(9, OUTPUT); //dp segment pinMode(10, OUTPUT); //DIS4 pinMode(11, OUTPUT); //DIS3 pinMode(12, OUTPUT); //DIS2 pinMode(13, OUTPUT); //DIS1 } void loop() { if ((abs(micros()-ispisTime)) >= 1000) //da li je istekla perioda osvezavanja od 1ms (1 kHz) { ispisTime = micros(); milisekund++; if(milisekund == 10) { stotinke++; milisekund = 0; } if (stotinke == 10) { desetinke++; stotinke = 0; } if(desetinke == 150) { if ((abs(micros()-ispisTime)) >= 3000000) desetinke=0; } stotine=desetinke/100; desetice=(desetinke-(stotine*100))/10; jedinice=desetinke-stotine*100-desetice*10; switch(brojDispleja) //koji displej je na redu za osvezavanje { case 1: //DIS1 prozoviDisplej(3); ispisiCifru(jedinice); //ispis sekundi na DIS1 break; case 2: //DIS2 prozoviDisplej(2); ispisiCifru(desetice); //ispis 10*sekund na DIS2 break; case 3: //DIS3 prozoviDisplej(1); ispisiCifru(stotine); //ispis minuta na DIS3 break; case 4: //DIS4 prozoviDisplej(0); ispisiCifru(sekunde); //ispis 10*minut na DIS4 break; default: ; } brojDispleja--; //priprema redni broj sledeceg displeja za osvezavanje if (brojDispleja == 0) brojDispleja = 4; } } void ispisiCifru(int number) //funkcija za ispis cifre (vrste matrice cifara) { int pin= 2; for (int j=0; j < 7; j++) { digitalWrite(pin, matricaCifara[number][j]); //ispis jednog segmenta (kolona matrice cifara) pin++; } } void prozoviDisplej(int redniBroj) //funkcija za prozivku jednog displeja //(tri iskljucuje, jednog ukljucuje) { int pin= 10; for (int j=0; j < 4; j++) { digitalWrite(pin, matricaDispleja[redniBroj][j]); //kontrola prozivke jednog displeja //(kolona matrice displeja) pin++; } }