Facebook
From Zavisic, 5 Months ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 129
  1. int milisekund = 0;
  2. int stotinke = 0;
  3. int desetinke = 0;
  4. int sekunde = 0;
  5. int jedinice = 0;
  6. int desetice = 0;
  7. int stotine = 0;
  8. unsigned long ispisTime = 0; //pomocna promenljiva za periodu odabiranja ispisa cifre na dipleju
  9. int brojDispleja = 4; //broj displeja koji se trenutno osvezava (ispis krece od DIS4)
  10. const int matricaCifara[10][7] = { { 1,1,1,1,1,1,0 }, // cifra 0
  11.  { 0,1,1,0,0,0,0 }, // cifra 1
  12.  { 1,1,0,1,1,0,1 }, // cifra 2
  13.  { 1,1,1,1,0,0,1 }, // cifra 3
  14.  { 0,1,1,0,0,1,1 }, // cifra 4
  15.  { 1,0,1,1,0,1,1 }, // cifra 5
  16.  { 1,0,1,1,1,1,1 }, // cifra 6
  17.  { 1,1,1,0,0,0,0 }, // cifra 7
  18.  { 1,1,1,1,1,1,1 }, // cifra 8
  19.  { 1,1,1,0,0,1,1 }}; // cifra 9
  20. const int matricaDispleja[4][4] = { { 0,1,1,1 }, // prozivka DIS4
  21.  { 1,0,1, 1}, // prozivka DIS3
  22.  { 1,1,0,1 }, // prozivka DIS2
  23.  { 1,1,1,0 }}; // prozivka DIS1
  24. void setup()
  25. {
  26. pinMode(2, OUTPUT); //a segment
  27. pinMode(3, OUTPUT); //b segment
  28. pinMode(4, OUTPUT); //c segment
  29. pinMode(5, OUTPUT); //d segment
  30. pinMode(6, OUTPUT); //e segment
  31. pinMode(7, OUTPUT); //f segment
  32. pinMode(8, OUTPUT); //g segment
  33. pinMode(9, OUTPUT); //dp segment
  34. pinMode(10, OUTPUT); //DIS4
  35. pinMode(11, OUTPUT); //DIS3
  36. pinMode(12, OUTPUT); //DIS2
  37. pinMode(13, OUTPUT); //DIS1
  38. }
  39. void loop()
  40. {
  41. if ((abs(micros()-ispisTime)) >= 1000) //da li je istekla perioda osvezavanja od 1ms (1 kHz)
  42. {
  43. ispisTime = micros();
  44. milisekund++;
  45. if(milisekund == 10)
  46. {
  47.  stotinke++;
  48.  milisekund = 0;
  49. }
  50. if (stotinke == 10)
  51. {
  52. desetinke++;
  53. stotinke = 0;
  54. }
  55. if(desetinke == 150)
  56. {
  57.   if ((abs(micros()-ispisTime)) >= 3000000)
  58.   desetinke=0;
  59. }
  60. stotine=desetinke/100;
  61. desetice=(desetinke-(stotine*100))/10;
  62. jedinice=desetinke-stotine*100-desetice*10;
  63. switch(brojDispleja) //koji displej je na redu za osvezavanje
  64. {
  65. case 1: //DIS1
  66. prozoviDisplej(3);
  67. ispisiCifru(jedinice); //ispis sekundi na DIS1
  68. break;
  69. case 2: //DIS2
  70. prozoviDisplej(2);
  71. ispisiCifru(desetice); //ispis 10*sekund na DIS2
  72. break;
  73. case 3: //DIS3
  74. prozoviDisplej(1);
  75. ispisiCifru(stotine); //ispis minuta na DIS3
  76. break;
  77. case 4: //DIS4
  78. prozoviDisplej(0);
  79. ispisiCifru(sekunde); //ispis 10*minut na DIS4
  80. break;
  81. default:
  82. ;
  83. }
  84. brojDispleja--; //priprema redni broj sledeceg displeja za osvezavanje
  85. if (brojDispleja == 0) brojDispleja = 4;
  86. }
  87. }
  88. void ispisiCifru(int number) //funkcija za ispis cifre (vrste matrice cifara)
  89. {
  90. int pin= 2;
  91. for (int j=0; j < 7; j++)
  92. {
  93. digitalWrite(pin, matricaCifara[number][j]); //ispis jednog segmenta (kolona matrice cifara)
  94. pin++;
  95. }
  96. }
  97. void prozoviDisplej(int redniBroj) //funkcija za prozivku jednog displeja
  98. //(tri iskljucuje, jednog ukljucuje)
  99. {
  100. int pin= 10;
  101. for (int j=0; j < 4; j++)
  102. {
  103. digitalWrite(pin, matricaDispleja[redniBroj][j]); //kontrola prozivke jednog displeja
  104. //(kolona matrice displeja)
  105. pin++;
  106. }
  107. }