Advertisement
Guest User

M

a guest
Apr 23rd, 2019
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.41 KB | None | 0 0
  1. #include <avr/io.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4.  
  5. #define clrbit(var,bit) var &= ~(1<<bit)
  6. #define setbit(var,bit) var |= 1<<bit
  7.  
  8. #define FMSG 0
  9. #define WAIT 1
  10. #define RING 2
  11. #define OPEN 3
  12. #define COD1 4
  13. #define COD2 5
  14. #define COD3 6
  15. #define ERR 7
  16. #define BROASCA 1
  17.  
  18. void sysinit();
  19. void initLCD();
  20. void putchLCD(char ch);
  21. void putsLCD(char *ch);
  22. void clrLCD();
  23. void gotoLC(unsigned char line, unsigned char col);
  24. char kbscan();
  25.  
  26. int main(){
  27.  
  28. char code_now=0x7f, code_ante;
  29. unsigned char kbhit=0;
  30. char kbcode = 0x7f;
  31.  
  32. unsigned char cmd = 0;
  33. long i = 0;
  34. int time = 0;
  35. unsigned char loop_cnt=0;
  36. volatile unsigned long int delay;
  37.  
  38. char cod[4]="123";
  39. char buf[4];
  40. char stare = FMSG;
  41.  
  42. sysinit();
  43.  
  44. while (1){
  45. //determina daca este tasta apasata
  46. if(loop_cnt==100){
  47. code_ante=code_now;
  48. code_now = kbscan();
  49. if(code_now!=0x7f && code_ante==0x7f){
  50. kbhit=1;
  51. kbcode=code_now;
  52. }
  53. loop_cnt=0;
  54. }
  55.  
  56. //SFSM
  57. switch (stare){
  58. case FMSG:
  59. clrLCD();
  60. putsLCD("1..8 ca sa suni,");
  61. gotoLC(2,1);
  62. putsLCD("C pentru cod:");
  63. stare = WAIT;
  64. break;
  65.  
  66. case WAIT:
  67. if(kbhit){
  68. kbhit=0;
  69. if ('C'==kbcode){
  70. clrLCD();
  71. putsLCD("Cod=");
  72. stare = COD1;
  73. }
  74. if (kbcode>='1' && kbcode <= '8'){
  75. clrLCD();
  76. putsLCD("Sun la ");
  77. putchLCD(kbcode);
  78. i=0;
  79. stare = RING;
  80. }
  81. }
  82. break;
  83.  
  84. case RING:
  85. cmd = PINB & 0x01;
  86. if(i==100000)
  87. putchLCD('.');
  88. if(i==200000)
  89. putchLCD('.');
  90. if(i==300000)
  91. putchLCD('.');
  92. if(i==400000){
  93. clrLCD();
  94. putsLCD("Sun la ");
  95. putchLCD(kbcode);
  96. i=0;
  97. time+=4;
  98. }
  99. if(time>15){
  100. time = 0;
  101. stare = FMSG;
  102. }
  103. if(cmd){
  104. time = 0;
  105. clrLCD();
  106. putsLCD("Deschis");
  107. cmd = 0;
  108. stare = OPEN;
  109. }
  110. break;
  111.  
  112. case COD1:
  113. if(kbhit){
  114. kbhit=0;
  115. if (kbcode>='0' && kbcode <= '9'){
  116. buf[0]=kbcode;
  117. putchLCD('*');
  118. stare = COD2;
  119. }
  120. else{
  121. stare = FMSG;
  122. }
  123. }
  124. break;
  125.  
  126. case COD2:
  127. if(kbhit){
  128. kbhit=0;
  129. if (kbcode>='0' && kbcode <= '9'){
  130. buf[1]=kbcode;
  131. putchLCD('*');
  132. stare = COD3;
  133. }
  134. else{
  135. stare = FMSG;
  136. }
  137. }
  138. break;
  139.  
  140. case COD3:
  141. if(kbhit){
  142. kbhit=0;
  143. if (kbcode>='0' && kbcode <= '9'){
  144. buf[2]=kbcode;
  145. putchLCD('*');
  146. stare = OPEN;
  147. if (strncmp(cod,buf, 3) == 0){
  148. clrLCD();
  149. putsLCD("Deschis");
  150. stare = OPEN;
  151. } else {
  152. clrLCD();
  153. putsLCD("Cod invalid");
  154. stare = ERR;
  155. }
  156. }
  157. else{
  158. stare = FMSG;
  159. }
  160.  
  161. }
  162. break;
  163.  
  164. case OPEN:
  165. setbit(PORTB,BROASCA);
  166. for(delay=0; delay <5*250000UL; delay++){}
  167. clrbit(PORTB,BROASCA);
  168. stare = FMSG;
  169. break;
  170.  
  171. case ERR:
  172. for(delay=0; delay <5*250000UL; delay++){}
  173. stare = FMSG;
  174. break;
  175.  
  176. }//end switch
  177. loop_cnt++;
  178. i++;
  179. }//end while
  180. }//end main
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement