Advertisement
SIKER_98

przerwania-wbudowane

May 8th, 2020
34
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.40 KB | None | 0 0
  1. #include <REGX52.H>
  2. #define TRUE 1
  3.  
  4. // Znaki na 7-segmentowy wyswietlacz
  5. unsigned char liczba[] = {0x3F, 0x06, 0X5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
  6.  
  7. // Plywajace zero
  8. unsigned char plywanie[] = {0xEF, 0xDF, 0xBF, 0x7F};
  9.  
  10. // Do lapanie wiersza
  11. unsigned char wiersz;
  12.  
  13. // do wyswietlania liczb
  14. unsigned char wyswietlany = 0;
  15. unsigned char licznik = 0;
  16.  
  17. // wlacznik wyswietlacza
  18. bit on_flag = 0; // 1 -> wlaczony
  19. bit strona = 0; // 0 - lewa, 1 - prawa
  20.  
  21. // --- OBSLUGA PRZYCISKOW --- //
  22. void wlacznik() interrupt 0
  23. {
  24. on_flag = on_flag ^ 1; // xorowanie wlacznika
  25. }
  26.  
  27. void inkrementacja() interrupt 2
  28. {
  29. wyswietlany++;
  30. if (wyswietlany == 100)
  31. wyswietlany = 0;
  32. licznik = wyswietlany;
  33. }
  34.  
  35. // --- TIMER --- //
  36. void timer() interrupt 1
  37. {
  38. if (on_flag)
  39. {
  40. if (strona)
  41. {
  42. P1 = liczba[wyswietlany % 10];
  43. P3 = 0x4C;
  44. }
  45. else
  46. {
  47. P1 = liczba[wyswietlany / 10];
  48. P3 = 0x8C;
  49. }
  50. P3 = 0xCC;
  51. }
  52. strona = strona ^ 1;
  53. }
  54.  
  55. // --- OBSLUGA KLAWIATURY --- //
  56. void kolumna_1()
  57. {
  58. if (wiersz == 3)
  59. {
  60. licznik = 0;
  61. }
  62. else
  63. {
  64. licznik = (licznik * 10) % 100 + wiersz * 3 + 1;
  65. }
  66. while (!P2_1)
  67. ;
  68. }
  69.  
  70. void kolumna_2()
  71. {
  72. if (wiersz == 3)
  73. {
  74. licznik = (licznik * 10) % 100;
  75. }
  76. else
  77. {
  78. licznik = (licznik * 10) % 100 + wiersz * 3 + 2;
  79. }
  80. while (!P2_2)
  81. ;
  82. }
  83.  
  84. void kolumna_3()
  85. {
  86. if (wiersz == 3)
  87. {
  88. wyswietlany = licznik;
  89. }
  90. else
  91. {
  92. licznik = (licznik * 10) % 100 + wiersz * 3 + 3;
  93. }
  94. while (!P2_3)
  95. ;
  96. }
  97.  
  98. void wiersze()
  99. {
  100. P2 = plywanie[wiersz];
  101. if (!P2_1)
  102. kolumna_1();
  103. else if (!P2_2)
  104. kolumna_2();
  105. else if (!P2_3)
  106. kolumna_3();
  107.  
  108. wiersz = (wiersz + 1) % 4;
  109. }
  110.  
  111. // --- INICJALIZACJA PRZERWAN --- //
  112. void setup()
  113. {
  114. EX0 = 1; // zewnetrzne przerwanie o numerze 0
  115. EX1 = 1; // zewnetrzne przerwanie o numerze 1
  116. ET0 = 1; // przerwania licznika
  117. IT0 = 1; // przerwanie na 0
  118. IT1 = 1; // przerwanie na 0
  119. TMOD = 0x20; // 8bit autoreload
  120. TR0 = 1; // start licznika
  121. EA = 1; // wlaczenie przerwan
  122. }
  123.  
  124. /// --- MAIN --- ///
  125. int main()
  126. {
  127. setup();
  128. while (TRUE)
  129. {
  130. wiersze();
  131. }
  132. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement