Advertisement
Guest User

Interfon

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