- int milisekund = 0;
- int stotinke = 0;
- int desetinke = 0;
- int stotine=0;
- int desetice=0;
- int jedinice=0;
- int br=3000;
- int pov=1;
- 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 (br != 3000){
- br++;
- pov=0;
- }
- else pov=1;
- if(milisekund == 10)
- {
- stotinke++;
- milisekund = 0;
- }
- if (stotinke == 10)
- {
- desetinke=desetinke+pov;
- stotinke = 0;
- br=0;
- }
- if(desetinke == 237)
- {
- desetinke=desetinke-pov;
- br=0;
- }
- stotine=desetinke/100;
- desetice=(desetine-(stotine*100))/10;
- jedinice=desetine-stotine*100-desetice*10;
- switch(brojDispleja) //koji displej je na redu za osvezavanje
- {
- case 1: //DIS1
- prozoviDisplej(3);
- ispisiCifru(jedinice); //ispis jedinica na DIS1
- break;
- case 2: //DIS2
- prozoviDisplej(2);
- ispisiCifru(desetice); //ispis desetica na DIS2
- break;
- case 3: //DIS3
- prozoviDisplej(1);
- ispisiCifru(stotine); //ispis stotina na DIS3
- break;
- case 4: //DIS4
- prozoviDisplej(0);
- ispisiCifru(0); //ispis 0 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++;
- }
- }