久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 13677|回復: 17
打印 上一主題 下一主題
收起左側

基于51單片機的排隊叫號系統仿真與程序源碼設計

  [復制鏈接]
跳轉到指定樓層
樓主
基于51單片機的排隊叫號系統設計,電路和程序比較簡單,附件是proteus仿真電路圖和源程序,供初學者學習參考。
排隊叫號系統仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)



單片機源程序如下:
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit rs=P2^0;
  5. sbit rw=P2^1;
  6. sbit e=P2^2;
  7. sbit key1=P1^0;
  8. sbit key2=P1^1;
  9. sbit key3=P1^2;
  10. sbit sounder=P3^7;

  11. uchar prompt1[]="Your No.is 00!";   
  12. uchar prompt2[]="No.00 Go To Win.0";  
  13. uchar prompt3[]="Queue is full ";      
  14. uchar prompt4[]="Queue is empty !";  

  15. uint num_count=0;                  //排隊叫的號碼
  16. uint rank_number[20]={0};          //排隊叫號存儲的數組
  17. uint num=0;                        //窗口消的號碼
  18. int RankFlag=0;                    //叫號的標志
  19. int ClearNumFlag=0;                //消號的標志
  20. uint LengthFlag=0;                 //隊列長度 叫一次號時+1,消一次號時-1

  21. /*延時函數*/
  22. void delay(uint n)
  23. {
  24.    while (n--);
  25. }

  26. /*****************************************
  27. LCD1602 *顯示屏命令寫入函數*
  28. *****************************************/
  29. void LCD_write_com(uchar com)
  30. {  
  31.    e=0;
  32.    rs=0;
  33.    rw=0;
  34.    P0= com;
  35.    delay(1000);
  36.    e=1;
  37.    delay(1000);
  38.    e=0;
  39. }
  40. /*****************************************
  41. LCD1602 *顯示屏數據寫入函數*
  42. *****************************************/
  43. void LCD_write_data(uchar dat)
  44. {
  45.    e=0;
  46.    rs=1;
  47.    rw=0;
  48.    P0 = dat;
  49.    delay(1000);
  50.    e=1;
  51.    delay(1000);
  52.    e=0;
  53. }
  54. /*****************************************
  55. LCD1602 *顯示屏清空顯示*
  56. *****************************************/
  57. void LCD_clear(void)
  58. {
  59.    LCD_write_com(0x01);
  60.    delay(1000);
  61. }
  62. /*****************************************
  63. LCD1602 顯示屏初始化函數
  64. *****************************************/
  65. void LCD_init(void)
  66. {
  67.   // LCD_write_com(0x38);    /*顯示模式設置*/
  68.    //delay(100);
  69.   // LCD_write_com(0x38);
  70.   // delay(100);
  71.    LCD_write_com(0x38);
  72.    delay(100);
  73.    //LCD_write_com(0x38);  
  74.    LCD_write_com(0x08);    /*顯示關閉*/
  75.    LCD_write_com(0x01);    /*顯示清屏*/
  76.    LCD_write_com(0x06);    /*顯示光標移動設置*/
  77.    delay(100);
  78.    LCD_write_com(0x0C);    /*顯示開及光標設置*/
  79. }
  80. /*簡單的蜂鳴器提示音*/
  81. void sound()
  82. { uint a;
  83. for(a=0;a<500;a++)
  84. {
  85.         delay(61);
  86.         sounder=~sounder;
  87. }
  88. }
  89. /*獲取鍵值函數*/
  90. uint sweep_key()
  91. {  
  92.    uint jianzhi;                    
  93.    if(key1==0)
  94.         {        
  95.                 delay(1000);
  96.                 if(key1==0)
  97.                 jianzhi=1;
  98.                 RankFlag=1;
  99.         }
  100.         if(key2==0||key3==0)
  101.         {   
  102.                 delay(1000);
  103.                 if(key2==0)
  104.                 jianzhi=2;
  105.                 if(key3==0)
  106.                 jianzhi=3;
  107.                 ClearNumFlag=1;
  108.         }
  109.         return (jianzhi);
  110. }
  111. /*****************************************
  112. 叫號機 按一次一號鍵變量+1,最大為20                        
  113. *****************************************/
  114. void QueueNumProcess()
  115. {
  116.   
  117.    if(RankFlag==1)             //判斷叫號標志是否有效
  118.    {
  119.       if ( LengthFlag<20)
  120.       {   
  121.                  num_count++;
  122.              rank_number[LengthFlag] = num_count;
  123.       }
  124.       LengthFlag++;
  125.    }
  126. }
  127. /*****************************************
  128. 窗口消號處理函數
  129. *****************************************/
  130. void ClearNumProcess()
  131. {
  132.    uint i;
  133.    if (ClearNumFlag==1)     //判斷消號標志是否有效
  134.    {
  135.       num=rank_number[0];   //把消的號賦給全局變量num
  136.       for(i=0;i<19;i++)     //讓數組整體左移一個存儲單元,即把消得號刪除
  137.       {
  138.              rank_number[i]=rank_number[i+1];
  139.       }
  140.       LengthFlag--;
  141.    }
  142. }
  143. /*****************************************
  144. 檢測到按鍵后,檢測函數處理及LCD顯示處理
  145. *****************************************/
  146. void CheckButtonProcess(uint m)  //m代表檢測到的鍵值
  147. {
  148.    uint jz,i;
  149.    jz=m;
  150.    if((jz==1) && (RankFlag==1))
  151.    {  
  152.            // 當隊列人數達到20時,提示
  153.           // Queue is full
  154.           if( LengthFlag>=20 )               
  155.           {
  156.              LCD_clear();
  157.              LCD_write_com(0x80+0x02);
  158.          delay(100);
  159.          for(i=0;i<16;i++)
  160.          {
  161.             LCD_write_data(prompt3[i]);
  162.                 delay(100);
  163.          }
  164.           }
  165.           else
  166.           {
  167.              QueueNumProcess();
  168.                         
  169.              prompt1[11]=(num_count)/10+'0';
  170.              prompt1[12]=(num_count)%10+'0';
  171.          
  172.              LCD_clear();
  173.              LCD_write_com(0x80+02);
  174.          delay(100);
  175.          for(i=0;i<15;i++)
  176.          {
  177.             LCD_write_data(prompt1[i]);  //"Your No.is 00!";
  178.                 delay(100);
  179.          }
  180.          RankFlag=0;
  181.           }
  182.    }
  183.    
  184.    if((jz==2||jz==3) && ClearNumFlag==1)
  185.    {        
  186.           if(LengthFlag==0)
  187.           {
  188.              LCD_clear();
  189.              LCD_write_com(0x80+0);
  190.          delay(1000);
  191.          for(i=0;i<16;i++)
  192.          {
  193.             LCD_write_data(prompt4[i]);//"Queue is empty ";
  194.                 delay(100);
  195.          }
  196.                         delay(65535);                                //無人排隊時屏幕自動清屏,計數歸零
  197.                         LCD_clear();
  198.                         num_count=0;
  199.           }
  200.           else
  201.           {
  202.              ClearNumProcess();       //消號處理,營業員操作
  203.                     sound();
  204.              prompt2[3]=num/10+'0';
  205.              prompt2[4]=num%10+'0';
  206.                  prompt2[15]=(jz-1)+'0';
  207.              LCD_clear();
  208.              LCD_write_com(0x80+0);
  209.          delay(100);
  210.          for(i=0;i<16;i++)
  211.          {
  212.             LCD_write_data(prompt2[i]); //"No.00 come to No.0";
  213.             delay(100);
  214.          }
  215.              ClearNumFlag=0;
  216.           }
  217.    }  
  218. }
  219. /*****************************************
  220. main 函數
  221. *****************************************/
  222. void main()
  223. {
  224.    uint Kvalue;
  225.    LCD_init();
  226.    while(1)
  227.    {        
  228.       Kvalue=sweep_key();       //獲取鍵值
  229.           if (RankFlag==1 || ClearNumFlag==1)//判斷叫號標志和消號標志是否有效
  230.               CheckButtonProcess(Kvalue);
  231.           delay(200);
  232.           RankFlag=0;             //使叫號標志無效
  233.           ClearNumFlag=0;         //使消號標志無效
  234.           Kvalue=0;               //鍵值清0
  235. ……………………

  236. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
排隊叫號系統只有Proteus7.5才能打開.7z (30.36 KB, 下載次數: 483)


評分

參與人數 1黑幣 +70 收起 理由
admin + 70 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏14 分享淘帖 頂6 踩
回復

使用道具 舉報

沙發
ID:331335 發表于 2018-5-16 15:35 | 只看該作者
不錯,感謝分享
回復

使用道具 舉報

板凳
ID:426970 發表于 2018-11-15 12:02 來自手機 | 只看該作者
還有漢字備注,很舒服,謝謝
回復

使用道具 舉報

地板
ID:444439 發表于 2018-12-11 21:07 | 只看該作者
學習了 感謝分享
回復

使用道具 舉報

5#
ID:444602 發表于 2018-12-12 09:21 | 只看該作者
感覺還不錯啊
回復

使用道具 舉報

6#
ID:460754 發表于 2019-1-6 13:18 | 只看該作者
有原理圖碼
回復

使用道具 舉報

7#
ID:461451 發表于 2019-1-12 13:23 | 只看該作者
這個不會顯示等待的人數,請問樓主有添加人數等待的資源嗎?謝謝
回復

使用道具 舉報

8#
ID:182535 發表于 2019-2-28 11:23 | 只看該作者
學習學習
回復

使用道具 舉報

9#
ID:507398 發表于 2019-4-9 18:26 | 只看該作者
我已下載你的文件,只是在復位電路山有些不明白,請指教一下
回復

使用道具 舉報

10#
ID:557590 發表于 2019-6-8 10:22 | 只看該作者
學習了 感謝分享,很好的東西呀
回復

使用道具 舉報

11#
ID:557590 發表于 2019-6-8 10:27 | 只看該作者
需要需要需要
回復

使用道具 舉報

12#
ID:528932 發表于 2019-6-15 13:39 | 只看該作者
東西不錯,謝謝分享~
回復

使用道具 舉報

13#
ID:563863 發表于 2019-6-16 19:30 | 只看該作者
ck1655 發表于 2019-6-15 13:39
東西不錯,謝謝分享~

叫號端有幾個?
回復

使用道具 舉報

14#
ID:567110 發表于 2019-6-19 19:57 來自手機 | 只看該作者
BBOX 發表于 2019-1-12 13:23
這個不會顯示等待的人數,請問樓主有添加人數等待的資源嗎?謝謝

你好,請問你這個顯示等待人數的做好了嗎。我也在做這個,求助求助
回復

使用道具 舉報

15#
ID:576373 發表于 2019-7-3 17:19 來自手機 | 只看該作者
這個叫號和取號還是基于一個單片機的是吧
回復

使用道具 舉報

16#
ID:610923 發表于 2019-9-16 11:07 | 只看該作者
厲害了
回復

使用道具 舉報

17#
ID:641005 發表于 2019-11-27 10:54 | 只看該作者
能問一下你的仿真圖里面的25630901RP2,TC646B和TC648B應該放在哪啊
回復

使用道具 舉報

18#
ID:769233 發表于 2020-6-14 09:09 | 只看該作者
很有幫助,謝謝分享
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 福利电影在线 | 国产精品国产三级国产aⅴ中文 | 免费能直接在线观看黄的视频 | 中文字幕免费视频 | 欧美日韩电影一区二区 | 天堂中文在线观看 | 龙珠z国语版在线观看 | 狠狠久久久| 91精品久久久| 天天干在线播放 | 国产色黄 | 国产精品美女久久久久久免费 | 亚洲一区日韩 | 国产成人免费视频网站高清观看视频 | 久草视频在线播放 | 久久久精品一区 | 久久精品国产免费一区二区三区 | 91久操视频 | 中文字幕在线看 | 美美女高清毛片视频免费观看 | 成人av一区 | av网站免费在线观看 | 成人中文字幕在线 | 99久久国产综合精品麻豆 | 欧美一区二区在线视频 | 久久久91精品国产一区二区精品 | 91一区二区 | 欧美极品在线播放 | 久久青青 | 干干干操操操 | 视频一区二区中文字幕 | 日日夜夜天天干 | 久久久久久久久淑女av国产精品 | 日韩有码在线播放 | 亚洲视频免费观看 | 超碰高清| 国产精品小视频在线观看 | 亚洲日本欧美日韩高观看 | 毛片黄片免费看 | 伊人影院99 | 欧美一二三 |