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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1508|回復: 1
收起左側

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

[復制鏈接]
ID:741328 發表于 2020-5-4 17:03 | 顯示全部樓層 |閱讀模式
新人求大佬解答!!
銀行叫號系統。八個按鍵代表八個窗口,窗口號與按鍵號對應。排隊號依次加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. }
復制代碼

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

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

正常要顯示這個

正常要顯示這個
回復

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲一区 中文字幕 | 精品国产乱码久久久久久久久 | 丝袜一区二区三区 | 国产成人精品免费视频大全最热 | 欧美人妖网站 | 黄a在线播放 | 久久久久久久久久影视 | 国产精品久久国产精品 | 狠狠爱免费视频 | 国产精品免费一区二区三区四区 | 福利一区二区在线 | 国产精品久久久久久久久久久免费看 | 一级黄在线观看 | 亚州激情| 日韩一级免费观看 | 天天躁人人躁人人躁狂躁 | 国产精品久久久亚洲 | 天天视频一区二区三区 | 秋霞国产 | 91精产国品一二三区 | 久久99这里只有精品 | 亚洲第1页 | 亚洲精品黄色 | 国产精品免费观看 | 99久久精品免费视频 | 水蜜桃亚洲一二三四在线 | 牛牛热在线视频 | 91久久| 亚洲iv一区二区三区 | 欧美亚洲综合久久 | 日韩中文字幕在线免费 | 欧美日韩中文字幕在线 | 日韩成人av在线播放 | 色综合99| av免费网址 | 亚洲3级 | 精品自拍视频在线观看 | 日本a视频 | 91精品国产日韩91久久久久久 | 91免费高清 | 在线观看亚洲专区 |