当前位置:   article > 正文

单片机排队叫号系统Proteus仿真程序 有取号键和叫号键以及重复叫号键 有注释

单片机排队叫号系统Proteus仿真程序 有取号键和叫号键以及重复叫号键 有注释

目录

1、前言

​ 2、程序

资料下载地址:单片机排队叫号系统Proteus仿真程序 有取号键和叫号键以及重复叫号键 有注释

1、前言

系统组成:STC89C52RC+Lcd1602+蜂鸣器+按键

具体介绍:

Lcd1602排队叫号系统,有取号显示窗和叫号显示窗。有取号键和叫号键以及重复叫号键。可以显示你前面有几人在等候。具体看图片上面。

 2、程序

  1. void init()//初始化
  2. {
  3. t0=0;
  4. windown=0;
  5. num=0;
  6. buzzer=1;
  7. TMOD=0x01;
  8. TH0=(65536-50000)/256;
  9. TL0=(65536-50000)%256;
  10. EA=1;
  11. ET0=1;
  12. TR0=0;//定时器0
  13. init_lcd2();
  14. init_lcd1();
  15. }
  16. void main()
  17. {
  18. init();
  19. while(1)
  20. {
  21. display_lcd2(num);
  22. }
  23. }
  24. void keyscan()//按键检测
  25. {
  26. if(k0==0)//患者叫号按键检测
  27. {
  28. delay(10);//延时消抖
  29. if(k0==0)
  30. num++;//号码数加1
  31. while(!k0);
  32. delay(10);//延时消抖
  33. while(!k0);//按键松手检测
  34. }
  35. if(k1==0)//一号诊室呼叫
  36. {
  37. delay(10);
  38. if(k1==0)
  39. {
  40. if(num1<num)
  41. {
  42. windown=1;
  43. num1++;
  44. TR0=1;
  45. num2_1=num1;
  46. display_lcd1(num1,windown);//液晶一显示当前呼叫的号码
  47. }
  48. }
  49. while(!k1);
  50. delay(10);//延时消抖
  51. while(!k1);//按键松手检测
  52. }
  53. if(k2==0)//二号诊室呼叫
  54. {
  55. delay(10);
  56. if(k2==0)
  57. {
  58. if(num1<num)
  59. {
  60. windown=2;
  61. num1++;
  62. TR0=1;
  63. num2_2=num1;
  64. display_lcd1(num1,windown);//液晶一显示当前呼叫的号码
  65. }
  66. }
  67. while(!k2);
  68. delay(10);//延时消抖
  69. while(!k2);//按键松手检测
  70. }
  71. if(k3==0)//三号诊室呼叫
  72. {
  73. delay(10);
  74. if(k3==0)
  75. {
  76. if(num1<num)
  77. {
  78. windown=3;
  79. num1++;
  80. TR0=1;
  81. num2_3=num1;
  82. display_lcd1(num1,windown);//液晶一显示当前呼叫的号码
  83. }
  84. }
  85. while(!k3);
  86. delay(10);//延时消抖
  87. while(!k3);//按键松手检测
  88. }
  89. if(k4==0)//四号诊室呼叫
  90. {
  91. delay(10);
  92. if(k4==0)
  93. {
  94. if(num1<num)
  95. {
  96. windown=4;
  97. num1++;
  98. TR0=1;
  99. num2_4=num1;
  100. display_lcd1(num1,windown);//液晶一显示当前呼叫的号码
  101. }
  102. }
  103. while(!k4);
  104. delay(10);//延时消抖
  105. while(!k4);//按键松手检测
  106. }
  107. if(p1==0)//一号诊室重新呼叫
  108. {
  109. delay(10);
  110. if(p1==0)
  111. {
  112. TR0=1;
  113. display_lcd1(num2_1,1);
  114. }
  115. while(!p1);
  116. delay(10);//延时消抖
  117. while(!p1);//按键松手检测
  118. }
  119. if(p2==0)//二号诊室重新呼叫
  120. {
  121. delay(10);
  122. if(p2==0)
  123. {
  124. TR0=1;
  125. display_lcd1(num2_2,2);
  126. }
  127. while(!p2);
  128. delay(10);//延时消抖
  129. while(!p2);//按键松手检测
  130. }
  131. if(p3==0)//三号诊室重新呼叫
  132. {
  133. delay(10);
  134. if(p3==0)
  135. {
  136. TR0=1;
  137. display_lcd1(num2_3,3);
  138. }
  139. while(!p3);
  140. delay(10);//延时消抖
  141. while(!p3);//按键松手检测
  142. }
  143. if(p4==0)//四号诊室重新呼叫
  144. {
  145. delay(10);
  146. if(p4==0)
  147. {
  148. TR0=1;
  149. display_lcd1(num2_4,4);
  150. }
  151. while(!p4);
  152. delay(10);//延时消抖
  153. while(!p4);//按键松手检测
  154. }
  155. }
  156. void write_order1(uchar order)//写指令函数 液晶1
  157. {
  158. rs1=0;
  159. en1=0;
  160. P0=order;
  161. delay(1);
  162. en1=1;
  163. delay(1);
  164. en1=0;
  165. }
  166. void write_dat1(uchar dat)//写数据函数 液晶1
  167. {
  168. rs1=1;
  169. en1=0;
  170. P0=dat;
  171. delay(1);
  172. en1=1;
  173. delay(1);
  174. en1=0;
  175. }
  176. void init_lcd1()//液晶1初始化
  177. {
  178. write_order1(0x38);
  179. write_order1(0x0c);
  180. write_order1(0x06);
  181. write_order1(0x80+1);
  182. // write_order1(0x01);//液晶必备的一些初始化
  183. for(i=0;i<16;i++)
  184. write_dat1(table1_1[i]);
  185. write_order1(0x80+0x40); //液晶显示换行
  186. for(i=0;i<16;i++)
  187. write_dat1(table1_2[i]);
  188. }
  189. void write_add1(uchar address,uchar dat)//指定地址写入数据
  190. {
  191. write_order1(0x80+address);
  192. write_dat1(dat);
  193. }
  194. void display_lcd1(uint num1,uchar windown)//液晶1显示
  195. {
  196. uchar a,b,c,d;//用于液晶
  197. a=num1/1000;
  198. b=num1%1000/100;
  199. c=num1%1000%100/10;
  200. d=num1%10;
  201. write_add1(4,table2[a]);
  202. write_add1(5,table2[b]);
  203. write_add1(6,table2[c]);
  204. write_add1(7,table2[d]);
  205. write_add1(0x40,table2[windown]);
  206. }
  207. void write_order2(uchar order)//写指令函数 液晶2
  208. {
  209. rs2=0;
  210. en2=0;
  211. P1=order;
  212. delay(1);
  213. en2=1;
  214. delay(1);
  215. en2=0;
  216. }
  217. void write_dat2(uchar dat)//写数据函数 液晶2
  218. {
  219. rs2=1;
  220. en2=0;
  221. P1=dat;
  222. delay(1);
  223. en2=1;
  224. delay(1);
  225. en2=0;
  226. }
  227. void init_lcd2()//液晶2初始化
  228. {
  229. write_order2(0x38);
  230. write_order2(0x0c);
  231. write_order2(0x06);
  232. write_order2(0x80);
  233. write_order2(0x00);
  234. for(i=0;i<12;i++)
  235. write_dat2(table2_2[i]);
  236. write_order2(0x80+0x40); //液晶显示换行
  237. for(i=0;i<12;i++)
  238. write_dat2(table2_1[i]);
  239. }
  240. void write_add2(uchar address,uchar dat)//指定地址写入数据
  241. {
  242. write_order2(0x80+address);
  243. write_dat2(dat);
  244. }
  245. void write_add3(uchar address,uchar dat)//指定地址写入数据
  246. {
  247. write_order2(0x80+0x40+address);
  248. write_dat2(dat);
  249. }
  250. void display_lcd2(uint num)//液晶2显示
  251. {
  252. uchar a,b,c,d;//用于液晶
  253. uchar e,f,g,h;//显示等待人数
  254. a=num/1000;
  255. b=num%1000/100;
  256. c=num%1000%100/10;
  257. d=num%10;
  258. write_add2(12,table2[a]);
  259. write_add2(13,table2[b]);
  260. write_add2(14,table2[c]);
  261. write_add2(15,table2[d]);
  262. if(num!=num1) //显示前面等待的人数
  263. {
  264. e=(num-num1-1)/1000;
  265. f=(num-num1-1)%1000/100;
  266. g=(num-num1-1)%1000%100/10;
  267. h=(num-num1-1)%10;
  268. }
  269. else
  270. {
  271. e=(num-num1)/1000;
  272. f=(num-num1)%1000/100;
  273. g=(num-num1)%1000%100/10;
  274. h=(num-num1)%10;
  275. }
  276. write_add3(12,table2[e]);
  277. write_add3(13,table2[f]);
  278. write_add3(14,table2[g]);
  279. write_add3(15,table2[h]);
  280. }
  281. void timer0() interrupt 1
  282. {
  283. TH0=(65536-50000)/256;
  284. TL0=(65536-50000)%256;
  285. t0++;
  286. bi(100);
  287. if(t0>20)
  288. {
  289. TR0=0;
  290. t0=0;
  291. buzzer=1;
  292. }
  293. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/520768
推荐阅读
相关标签
  

闽ICP备14008679号