int milisekund = 0;
int stotinke = 0;
int desetinke = 0;
int
int
int
int minute10 = 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)
{
stotinke = 0;
}
if(desetinke ==
{
desetinke = 0;
delay(3000);
}
{
sekunde10++;
sekunde = 0;
}
if(sekunde10 == 6)
{
minute++;
sekunde10 = 0;
}
if(minute == 10)
{
minute10++;
minute = 0;
}
if(minute10 == 6)
{
minute10 = 0;
}
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);
break;
case 2: //DIS2
prozoviDisplej(2);
break;
case 3: //DIS3
prozoviDisplej(1);
break;
case 4: //DIS4
prozoviDisplej(0);
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++;
}
}