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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機排隊叫號系統 程序有錯誤 求分析

[復制鏈接]
跳轉到指定樓層
樓主
新人求大佬解答!!
銀行叫號系統。八個按鍵代表八個窗口,窗口號與按鍵號對應。排隊號依次加1,加到99后,重新從1開始,按鍵每按一下,發三聲提示音。
現在不管按哪個鍵都是這樣顯示,有沒有大佬幫忙分析一下程序啊。

單片機源程序如下:
  1. //***********************************************************************************
  2. #include <STC15F2K60S2.H>
  3. //*********************************用戶數據類型定義**********************************
  4. typedef unsigned char uchar;
  5. typedef unsigned int uint;
  6. static uint w;
  7. //*************************************用戶引腳定義**********************************
  8. sbit beep_dr = P3^7;
  9. sbit key1 = P1^0;
  10. sbit key2 = P1^1;
  11. sbit key3 = P1^2;
  12. sbit key4 = P1^3;
  13. sbit key5 = P1^4;
  14. sbit key6 = P1^5;
  15. sbit key7 = P1^6;
  16. sbit key8 = P1^7;
  17. //*************************************共陽極數碼管斷碼數組**************************
  18. uchar code DigSegBuff[] =         //排隊號
  19. {
  20.     0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
  21. };
  22. uchar code WindowBuff[] =        //窗口號
  23. {
  24.     0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,
  25. };

  26. //*************************************函數聲明區***********************************
  27. void DelayMs(uint uiXms);    //有阻塞的延時函數聲明
  28. void IniSystem();                 //系統初始化函數聲明
  29. void IniPeripherals();             //外圍器件初始化函數聲明
  30. void BeepVoice();                 //蜂鳴器發出“嘀”的聲音函數聲明
  31. void MatrixKeyScan();             //按鍵識別函數聲明
  32. void DigDisplay();           //數碼管顯示函數聲明                                                         
  33. //*************************************主函數區************************************
  34. void main()
  35. {
  36.           IniSystem();
  37.           DelayMs(200);
  38.           IniPeripherals();
  39.           DelayMs(200);
  40.           while(1)
  41.           {
  42.                        DigDisplay();
  43.           }
  44. }
  45. //*************************************函數定義區************************************
  46. void DelayMs(uint uiXms)    //有阻塞的延時函數定義
  47. {
  48.     uint i,j;
  49.         for(i=uiXms;i>0;i--)
  50.         {
  51.             for(j=110;j>0;j--);
  52.         }
  53. }

  54. void IniSystem()           //系統初始化函數定義
  55. {
  56.         P0 = 0xff;
  57.                 P1 = 0xff;
  58.                 P2 = 0xff;        
  59.             beep_dr = 1;
  60. }

  61. void IniPeripherals()       //外圍器件初始化函數定義
  62. {
  63.    
  64.           BeepVoice();                    //系統發出三種提示音
  65.           BeepVoice();
  66.           BeepVoice();
  67.           EA=1;         //總中斷允許控制位
  68.           IT0=1;          //中斷觸發位
  69.           EX0=1;         //外部中斷允許位
  70. }

  71. void BeepVoice()            //蜂鳴器發出“嘀”聲函數定義
  72. {
  73.     beep_dr = 0;                //蜂鳴器開
  74.         DelayMs(70);
  75.         beep_dr = 1;                // 蜂鳴器關
  76.         DelayMs(70);
  77. }


  78. void MatrixKeyScan()            //按鍵識別函數定義
  79. interrupt 0                         //中斷0   外部中斷0
  80. {
  81.     EX0 = 0;
  82. //    uchar ucTemp;
  83. //        uint w;
  84.     while(P1 == 0xff);
  85.         DelayMs(10);                  
  86.         if(P1 != 0xff)
  87.         {
  88.             BeepVoice();
  89.                 BeepVoice();
  90.                 BeepVoice();
  91. //            ucTemp = P1;
  92.                 while(P1 != 0xff)
  93.                 {
  94.                     
  95.                         if(key1==0)
  96.                         {w=1;}
  97.                         if(key2==0)
  98.                         {w=2;}
  99.                         if(key3==0)
  100.                         {w=3;}
  101.                         if(key4==0)
  102.                         {w=4;}
  103.                         if(key5==0)
  104.                         {w=5;}
  105.                         if(key6==0)
  106.                         {w=6;}
  107.                         if(key7==0)
  108.                         {w=7;}
  109.                         if(key8==0)
  110.                         {w=8;}
  111.                 }
  112.         }
  113. EX0 = 1;
  114. }         

  115. void DigDisplay()           //數碼管顯示函數定義
  116. {
  117.     static uint h=1;
  118. //        static uint w=0;
  119.         uchar ucBitCode;                //定義位碼  
  120.     for(P1 != 0xff)
  121.         {
  122. //            uint h,w;
  123. //                MatrixKeyScan();
  124.             ucBitCode = 0x01;  //位碼高電平亮
  125.         P2 =0xc0;         //顯示0
  126.                 P0 =~ucBitCode;
  127.                 DelayMs(3);              
  128.             P0 = 0xff;                    //關閉所有數碼管
  129.                 DelayMs(1);
  130.                 ucBitCode = ucBitCode<<1;


  131.                 P2 = WindowBuff[w];   //顯示窗口號
  132.                 P0 =~ucBitCode;
  133.                 DelayMs(3);
  134.             P0 = 0xff;
  135.                 DelayMs(1);
  136.                 ucBitCode = ucBitCode<<1;

  137.                 P2 = 0xbf;                                 //不顯示
  138.                 P0 = ~ucBitCode;
  139.                 DelayMs(3);
  140.                 P0 = 0xff;
  141.                 DelayMs(1);                                 
  142.             ucBitCode = ucBitCode<<1;     

  143.                 P2 = 0xbf;                          //顯示“-”
  144.                 P0 = ~ucBitCode;
  145.                 DelayMs(3);
  146.                 P0 = 0xff;
  147.                 DelayMs(1);
  148.                 ucBitCode = ucBitCode<<1;

  149.                 P2 = 0xbf;                          //顯示“-”
  150.                 P0 = ~ucBitCode;
  151.                 DelayMs(3);
  152.                 P0 = 0xff;
  153.                 DelayMs(1);
  154.                 ucBitCode = ucBitCode<<1;

  155.                 P2 = 0xbf;                                 //不顯示
  156.                 P0 = ~ucBitCode;
  157.                 DelayMs(3);
  158.                 P0 = 0xff;
  159.                 DelayMs(1);                                 
  160.             ucBitCode = ucBitCode<<1;


  161.                 P2 =DigSegBuff[h/10];   //顯示排隊號十位
  162.                 P0 =~ucBitCode;
  163.                 DelayMs(3);
  164.             P0 = 0xff;
  165.                 DelayMs(1);
  166.                 ucBitCode = ucBitCode<<1;

  167.                 P2 =DigSegBuff[h%10];   //顯示排隊號的個位
  168.                 P0 =~ucBitCode;
  169.                 DelayMs(3);
  170.             P0 = 0xff;
  171.                 DelayMs(1);
  172.                 ucBitCode = ucBitCode<<1;            
  173.                 h++;
  174.             if(h>99)
  175.                 {
  176.                     h = 1;
  177.                 }
  178.         }
  179. }
復制代碼

1.png (67.82 KB, 下載次數: 25)

現在不管按哪個鍵都是這樣顯示

現在不管按哪個鍵都是這樣顯示

2.png (192.95 KB, 下載次數: 32)

正常要顯示這個

正常要顯示這個
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:593646 發表于 2020-5-4 19:51 | 只看該作者
我的解決思路:一個個問題差過去,先選一個按鍵按下一直不變的話,不用按鍵,直接改代碼,讓數碼管全部顯示1,如果還是沒效果,連接看一看,程序顯示函數查一查
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 在线视频91 | 色爱av| 91久久综合| 91精品国产综合久久小仙女图片 | 国产精品a一区二区三区网址 | 亚洲欧美成人 | 男女视频在线观看 | 最新国产视频 | 欧美激情在线一区二区三区 | www网站在线观看 | 欧产日产国产精品视频 | 日韩欧美久久 | 最新国产精品精品视频 | 一区二区三区四区电影视频在线观看 | 亚洲精品福利在线 | 国产精品成人在线 | 国产精品久久久久久久久久了 | 一区二区三区视频在线观看 | 日日夜夜天天 | 欧美一级大黄 | 亚洲一区二区三区四区五区中文 | 免费国产视频在线观看 | 中文字幕高清 | 伊人久久综合 | 亚洲精品片 | 日韩久久久一区二区 | 伦理一区二区 | 九九热精品在线 | 亚洲一区| 亚洲成av人片在线观看无码 | 欧美精品乱码99久久影院 | 狠狠操你 | 精品国产一区二区久久 | av在线一区二区三区 | 精品区| 久久里面有精品 | 91在线网站| 国产精品欧美一区二区 | 激情五月婷婷在线 | 日韩欧美亚洲 | 91久久久久久久久久久久久 |