找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 13725|回復(fù): 17
打印 上一主題 下一主題
收起左側(cè)

基于51單片機(jī)的排隊(duì)叫號系統(tǒng)仿真與程序源碼設(shè)計(jì)

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
基于51單片機(jī)的排隊(duì)叫號系統(tǒng)設(shè)計(jì),電路和程序比較簡單,附件是proteus仿真電路圖和源程序,供初學(xué)者學(xué)習(xí)參考。
排隊(duì)叫號系統(tǒng)仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)



單片機(jī)源程序如下:
  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;                  //排隊(duì)叫的號碼
  16. uint rank_number[20]={0};          //排隊(duì)叫號存儲的數(shù)組
  17. uint num=0;                        //窗口消的號碼
  18. int RankFlag=0;                    //叫號的標(biāo)志
  19. int ClearNumFlag=0;                //消號的標(biāo)志
  20. uint LengthFlag=0;                 //隊(duì)列長度 叫一次號時(shí)+1,消一次號時(shí)-1

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

  26. /*****************************************
  27. LCD1602 *顯示屏命令寫入函數(shù)*
  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 *顯示屏數(shù)據(jù)寫入函數(shù)*
  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 顯示屏初始化函數(shù)
  64. *****************************************/
  65. void LCD_init(void)
  66. {
  67.   // LCD_write_com(0x38);    /*顯示模式設(shè)置*/
  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);    /*顯示關(guān)閉*/
  75.    LCD_write_com(0x01);    /*顯示清屏*/
  76.    LCD_write_com(0x06);    /*顯示光標(biāo)移動(dòng)設(shè)置*/
  77.    delay(100);
  78.    LCD_write_com(0x0C);    /*顯示開及光標(biāo)設(shè)置*/
  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. /*獲取鍵值函數(shù)*/
  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. 叫號機(jī) 按一次一號鍵變量+1,最大為20                        
  113. *****************************************/
  114. void QueueNumProcess()
  115. {
  116.   
  117.    if(RankFlag==1)             //判斷叫號標(biāo)志是否有效
  118.    {
  119.       if ( LengthFlag<20)
  120.       {   
  121.                  num_count++;
  122.              rank_number[LengthFlag] = num_count;
  123.       }
  124.       LengthFlag++;
  125.    }
  126. }
  127. /*****************************************
  128. 窗口消號處理函數(shù)
  129. *****************************************/
  130. void ClearNumProcess()
  131. {
  132.    uint i;
  133.    if (ClearNumFlag==1)     //判斷消號標(biāo)志是否有效
  134.    {
  135.       num=rank_number[0];   //把消的號賦給全局變量num
  136.       for(i=0;i<19;i++)     //讓數(shù)組整體左移一個(gè)存儲單元,即把消得號刪除
  137.       {
  138.              rank_number[i]=rank_number[i+1];
  139.       }
  140.       LengthFlag--;
  141.    }
  142. }
  143. /*****************************************
  144. 檢測到按鍵后,檢測函數(shù)處理及LCD顯示處理
  145. *****************************************/
  146. void CheckButtonProcess(uint m)  //m代表檢測到的鍵值
  147. {
  148.    uint jz,i;
  149.    jz=m;
  150.    if((jz==1) && (RankFlag==1))
  151.    {  
  152.            // 當(dāng)隊(duì)列人數(shù)達(dá)到20時(shí),提示
  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);                                //無人排隊(duì)時(shí)屏幕自動(dòng)清屏,計(jì)數(shù)歸零
  197.                         LCD_clear();
  198.                         num_count=0;
  199.           }
  200.           else
  201.           {
  202.              ClearNumProcess();       //消號處理,營業(yè)員操作
  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 函數(shù)
  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)//判斷叫號標(biāo)志和消號標(biāo)志是否有效
  230.               CheckButtonProcess(Kvalue);
  231.           delay(200);
  232.           RankFlag=0;             //使叫號標(biāo)志無效
  233.           ClearNumFlag=0;         //使消號標(biāo)志無效
  234.           Kvalue=0;               //鍵值清0
  235. ……………………

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

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


評分

參與人數(shù) 1黑幣 +70 收起 理由
admin + 70 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評分

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

地板
ID:444439 發(fā)表于 2018-12-11 21:07 | 只看該作者
學(xué)習(xí)了 感謝分享
回復(fù)

使用道具 舉報(bào)

5#
ID:444602 發(fā)表于 2018-12-12 09:21 | 只看該作者
感覺還不錯(cuò)啊
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

8#
ID:182535 發(fā)表于 2019-2-28 11:23 | 只看該作者
學(xué)習(xí)學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

10#
ID:557590 發(fā)表于 2019-6-8 10:22 | 只看該作者
學(xué)習(xí)了 感謝分享,很好的東西呀
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

叫號端有幾個(gè)啊?
回復(fù)

使用道具 舉報(bào)

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

你好,請問你這個(gè)顯示等待人數(shù)的做好了嗎。我也在做這個(gè),求助求助
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表