Advertisement
Guest User

Untitled

a guest
May 24th, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.63 KB | None | 0 0
  1. #include <avr/io.h>
  2. #include <avr/interrupt.h>
  3.  
  4. #define S2 250000UL
  5. #define NOKEY 0x7f
  6. #define DELAY 200
  7. #define clrbit(var,bit) var &= ~(1<<bit)
  8. #define setbit(var,bit) var |= 1<<bit
  9. #define OCIE2 7
  10. #define IF 7
  11.  
  12. void sysinit();
  13. void putchLCD(char ch);
  14. void putsLCD (char* ch);
  15. void clrLCD();
  16. void wait(unsigned long int val);
  17. void gotoLC(unsigned char line, unsigned char col);
  18. char kbscan();
  19.  
  20. int main(){
  21.  
  22. char code_ante = NOKEY;
  23. char code_now = NOKEY;
  24. unsigned char kbhit = 0;
  25. char kbcode;
  26. unsigned char loop_cnt=0;
  27.  
  28. sysinit();
  29.  
  30. TCCR2 = 0b00001110;
  31.  
  32. OCR2 = 250 - 1;
  33.  
  34. setbit(TIMSK,OCIE2);
  35.  
  36. setbit(SREG,IF);
  37.  
  38. while(1){
  39.  
  40. if(loop_cnt==DELAY){ //citirile se fac din 15 ms in 15 ms
  41. loop_cnt=0;
  42. code_ante = code_now;
  43. code_now = kbscan();
  44. if( code_ante == NOKEY && code_now != NOKEY){
  45. kbhit=1;
  46. kbcode=code_now;
  47. }
  48. }
  49.  
  50. if(kbhit){
  51. kbhit=0;
  52. gotoLC(1, 1);
  53. putchLCD(kbcode);
  54. wait(5*250000); //aşteapă 0,1 secunde
  55. gotoLC(1,1);
  56. putchLCD(' ');
  57. gotoLC(1,1);
  58.  
  59. }
  60.  
  61. loop_cnt++;
  62.  
  63. }
  64.  
  65. }
  66.  
  67. ISR(TIMER2_COMP_vect)
  68. {
  69.  
  70. static unsigned int cycles = 0;
  71. static unsigned char s = 00;
  72. static unsigned char m = 35;
  73. static unsigned char h = 10;
  74. unsigned char d;
  75.  
  76. cycles++;
  77.  
  78. if(cycles == 125)
  79. {
  80. cycles = 0;
  81. s++;
  82.  
  83. if(s == 60)
  84. {
  85. s = 0;
  86. m++;
  87. }
  88.  
  89. if(m == 60)
  90. {
  91.  
  92. m = 0;
  93. h++;
  94. }
  95.  
  96. if(h == 24)
  97. {
  98. h = 0;
  99. }
  100.  
  101. gotoLC(2, 1);
  102.  
  103. if(h > 9)
  104. {
  105. d = h / 10 +'0';
  106. putchLCD(d);
  107. d = h % 10 + '0';
  108. putchLCD(d);
  109. }
  110.  
  111. else
  112. {
  113. putchLCD(' ');
  114. d = h % 10 + '0';
  115. putchLCD(d);
  116. }
  117.  
  118. putchLCD(':');
  119. d = m / 10 + '0';
  120. putchLCD(d);
  121. d = m % 10 + '0';
  122. putchLCD(d);
  123.  
  124. putchLCD(':');
  125.  
  126. d = s / 10 + '0';
  127. putchLCD(d);
  128. d = s % 10 + '0';
  129. putchLCD(d);
  130.  
  131. if(TIFR & 1<<OCF2)
  132. {
  133. clrLCD();
  134. putsLCD("ERROR");
  135. while(1){}
  136. }
  137.  
  138.  
  139. }
  140.  
  141.  
  142. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement