欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 請(qǐng)問各位大佬這個(gè)籃球記分器程序有錯(cuò)嗎?為什么不能控制加分和蜂鳴器 [打印本頁(yè)]

作者: dwadwad16    時(shí)間: 2021-12-6 19:47
標(biāo)題: 請(qǐng)問各位大佬這個(gè)籃球記分器程序有錯(cuò)嗎?為什么不能控制加分和蜂鳴器
  1. /**************************************************************************************
  2. 籃球記分器的設(shè)計(jì)
  3. /AT89C51單片機(jī)、數(shù)碼管若干、38譯碼器、矩陣按鍵、蜂鳴器
  4. ***************************************************************************************/

  5. #include "reg52.h"                         //此文件中定義了單片機(jī)的一些特殊功能寄存器

  6. typedef unsigned int u16;          //對(duì)數(shù)據(jù)類型進(jìn)行聲明定義
  7. typedef unsigned char u8;

  8. sbit LSA=P2^0;      //38譯碼器控制
  9. sbit LSB=P2^1;
  10. sbit LSC=P2^2;
  11. sbit LSD=P2^3;      //蜂鳴器觸發(fā)口
  12. sbit F1=P2^4;       //倒計(jì)時(shí)數(shù)碼管控制口
  13. sbit F2=P2^5;
  14. sbit S1=P2^6;
  15. sbit S2=P2^7;

  16. u8 KeyValue;        //用來(lái)存放讀取到的鍵值
  17. u8 feng;      //蜂鳴器

  18. #define GPIO_DIG P0    //計(jì)分?jǐn)?shù)碼管輸出口
  19. #define GPIO_KEY P1    //矩陣按鍵輸入口
  20. #define GPIO_TIME P3   //倒計(jì)時(shí)數(shù)碼管輸出口

  21. u8 code DIG_CODE[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//顯示0~9的值
  22. unsigned char Show[8]={ 0,0,0,0,0,0,0,0,};    //數(shù)組存放向數(shù)碼管輸入的數(shù)
  23. unsigned char TShow[4]={ 0,0,0,0,};

  24. u16 Ascore,Bscore,Change;  //分?jǐn)?shù)
  25. u8 Period;                 //節(jié)數(shù)
  26. u8 m=12,n,c;             //定時(shí)器變量

  27. /*******************************************************************************
  28. * 函 數(shù) 名         : delay
  29. * 函數(shù)功能                   : 延時(shí)函數(shù),i=1時(shí),大約延時(shí)10us
  30. *******************************************************************************/
  31. void delay(u16 i)
  32. {
  33.         while(i--);        
  34. }

  35. /*******************************************************************************
  36. * 函 數(shù) 名         : KeyDown
  37. * 函數(shù)功能                   : 檢測(cè)有按鍵按下并讀取鍵值
  38. *******************************************************************************/
  39. void KeyDown(void)
  40. {
  41.         char a=0;
  42.         GPIO_KEY=0x0f;
  43.          KeyValue=20;   //初始值
  44.         
  45.         if(GPIO_KEY!=0x0f)//讀取按鍵是否按下
  46.         {
  47.                 delay(100);//延時(shí)10ms進(jìn)行消抖
  48.                 if(GPIO_KEY!=0x0f)//再次檢測(cè)鍵盤是否按下
  49.                 {        
  50.                         //測(cè)試列
  51.                         GPIO_KEY=0X0F;
  52.                         switch(GPIO_KEY)
  53.                         {
  54.                                 case(0X0E):        KeyValue=0;break;
  55.                                 case(0X0D):        KeyValue=4;break;
  56.                                 case(0X0B):     KeyValue=8;break;
  57.                                 case(0X07):        KeyValue=12;break;
  58.                         }
  59.                         //測(cè)試行
  60.                         GPIO_KEY=0XF0;
  61.                         switch(GPIO_KEY)
  62.                         {
  63.                                 case(0X70):        KeyValue=KeyValue;break;
  64.                                 case(0XB0):        KeyValue=KeyValue+1;break;
  65.                                 case(0XD0):     KeyValue=KeyValue+2;break;
  66.                                 case(0XE0):        KeyValue=KeyValue+3;break;
  67.                         }
  68.                         while((a<500)&&(GPIO_KEY!=0xf0))         //檢測(cè)按鍵松手檢測(cè)
  69.                         {
  70.                                 delay(1000);
  71.                                 a++;
  72.                         }
  73.                 }
  74.         }
  75. }

  76. /**********************************************************************
  77. *函 數(shù) 名         : Score
  78. *函數(shù)功能                     : 加分程序,按鍵執(zhí)行程序
  79. *************************************************************************/
  80. void Score()
  81. {
  82.         if(KeyValue!=20)
  83.                         switch(KeyValue)//A隊(duì)的計(jì)分
  84.                         {
  85.                                 case(0):        Ascore=Ascore+1;KeyValue=20;break;  
  86.                                 case(1):        Ascore=Ascore+2;KeyValue=20;break;
  87.                                 case(2):  Ascore=Ascore+3;KeyValue=20;break;
  88.                                 case(3):        Ascore=Ascore-1;KeyValue=20;break;
  89.                         }
  90.                         switch(KeyValue)//B隊(duì)的計(jì)分
  91.                         {
  92.                                 case(4):        Bscore=Bscore+1;KeyValue=20;break;
  93.                                 case(5):        Bscore=Bscore+2;KeyValue=20;break;
  94.                                 case(6):  Bscore=Bscore+3;KeyValue=20;break;
  95.                                 case(7):        Bscore=Bscore-1;KeyValue=20;break;
  96.                         }
  97.                                 switch(KeyValue)
  98.                         {
  99.                                 case(8):        Period=Period+1;KeyValue=20;break;                                                           //每一節(jié)加一
  100.                                 case(9):        Period=Period-1;KeyValue=20;break;                                               //減一//
  101.                                 case(10): Change=Ascore;Ascore=Bscore;Bscore=Change;break;  //交換場(chǎng)地
  102.                                 case(11):        Ascore=0; Bscore=0;Period=0;KeyValue=20;break;                 //計(jì)分板復(fù)位
  103.                                 case(12): TR0 = 1;        m=12;  n=0;   KeyValue=20;break;     //定時(shí)50ms,20*50=1000msbreak;
  104.                                 case(13):        TR0 = 1;     break;                           //繼續(xù)比賽
  105.                                 case(14): feng=1;TR0 = 0; KeyValue=20;break;            //暫停比賽
  106.                                 case(15):        feng=0; KeyValue=20;break;                    //關(guān)閉蜂鳴器
  107.                         }
  108. }

  109. /************************************************************
  110. *函 數(shù) 名         : fengMQ
  111. *函數(shù)功能                     : 蜂鳴器觸發(fā)程序
  112. **************************************************************/
  113. void fengMQ(void)
  114. {
  115.   if(feng==1)
  116.         {
  117.                 LSD=~LSD;
  118.         }
  119. }

  120. /******************************************************************
  121. *函 數(shù) 名         : Conut
  122. *函數(shù)功能                     : 分離開送給數(shù)碼管的數(shù)字
  123. *******************************************************************/
  124.    void Conut(void)
  125.         {
  126.                 Show[0]=Period%10;
  127.                 Show[1]=Ascore/100;
  128.                 Show[2]=Ascore/10%10;
  129.                 Show[3]=Ascore%10;
  130.                
  131.                 Show[4]=0;
  132.                 Show[5]=Bscore/100;
  133.                 Show[6]=Bscore/10%10;
  134.                 Show[7]=Bscore%10;
  135.                
  136.                 TShow[0]=m/10;
  137.                 TShow[1]=m%10;
  138.                 TShow[2]=n/10;
  139.                 TShow[3]=n%10;
  140.                
  141.         }

  142. /*******************************************************************************
  143. * 函 數(shù) 名         : DigDisplay
  144. * 函數(shù)功能                    : 數(shù)碼管動(dòng)態(tài)掃描函數(shù),循環(huán)掃描8個(gè)數(shù)碼管顯示
  145. *******************************************************************************/
  146. void DigDisplay()
  147. {
  148.         u8 i,w;
  149.         for(i=0;i<8;i++)
  150.         {
  151.                 switch(i)          //位選,選擇點(diǎn)亮的數(shù)碼管,比分顯示
  152.                 {
  153.                         case(0):
  154.                                 LSA=0;LSB=0;LSC=0; break;//顯示第0位
  155.                         case(1):
  156.                                 LSA=1;LSB=0;LSC=0; break;//顯示第1位
  157.                         case(2):
  158.                                 LSA=0;LSB=1;LSC=0; break;//顯示第2位
  159.                         case(3):
  160.                                 LSA=1;LSB=1;LSC=0; break;//顯示第3位
  161.                         case(4):
  162.                                 LSA=0;LSB=0;LSC=1; break;//顯示第4位
  163.                         case(5):
  164.                                 LSA=1;LSB=0;LSC=1; break;//顯示第5位
  165.                         case(6):
  166.                                 LSA=0;LSB=1;LSC=1; break;//顯示第6位
  167.                         case(7):
  168.                                 LSA=1;LSB=1;LSC=1; break;//顯示第7位        
  169.                 }
  170.                 GPIO_DIG = DIG_CODE[Show[i]];//發(fā)送段碼        
  171.                 delay(10); //間隔一段時(shí)間掃描        
  172.                 P0=0x00;//消隱
  173.         }
  174.         for(w=0;w<4;w++)    //倒計(jì)時(shí)顯示
  175.         {
  176.         switch(w)         //位選,選擇點(diǎn)亮的數(shù)碼管,
  177.                 {
  178.                         case(0):
  179.                                 F1=0;F2=1;S1=1;S2=1; break;//顯示第1位
  180.                         case(1):
  181.                                 F1=1;F2=0;S1=1;S2=1; break;//顯示第2位
  182.                         case(2):
  183.                                 F1=1;F2=1;S1=0;S2=1; break;//顯示第3位
  184.                         case(3):
  185.                                 F1=1;F2=1;S1=1;S2=0; break;//顯示第4位               
  186.                 }
  187.                 GPIO_TIME = DIG_CODE[TShow[w]];
  188.                 delay(10);  //間隔一段時(shí)間掃描        
  189.                 P3=0x00;    //消隱
  190.         }
  191. }

  192. /*******************************************************************************
  193. * 函 數(shù) 名         : Timer0Init
  194. * 函數(shù)功能                    : 配置定時(shí)器0,定時(shí)50ms
  195. *******************************************************************************/
  196. void Timer0Init()
  197. {
  198.           TMOD |= 0x01; //選擇工作方式1
  199.     TH0 = 0x3C;         //設(shè)置初始值,定時(shí)50MS
  200.     TL0 = 0xB0;
  201.     EA = 1;                         //打開總中斷
  202.     ET0 = 1;                 //打開定時(shí)器0中斷
  203. // TR0 = 1;                 //啟動(dòng)定時(shí)器0
  204. }

  205. /*******************************************************************************
  206. * 函 數(shù) 名       : main
  207. * 函數(shù)功能                 : 主函數(shù)
  208. *******************************************************************************/
  209. void main()
  210. {        
  211.   Timer0Init();
  212.         while(1)
  213.         {        
  214.                 KeyDown();
  215.                 Score();                                       
  216.                 Conut();                    //分離出數(shù)
  217.                 fengMQ();                                //*蜂鳴器
  218.                 DigDisplay();                  //數(shù)碼管顯示函數(shù)        
  219.         }               
  220. }

  221. void Timer0() interrupt 1   //中斷程序
  222. {
  223.         static u16 q;          //定義變量q,1s=50ms*20
  224.         TH0 = 0x3C;            //設(shè)置初始值,定時(shí)50MS
  225.   TL0 = 0xB0;
  226.         q++;
  227.         if(q==20)      //計(jì)時(shí)20次時(shí)為1秒
  228.         {
  229.         q=0;           //變量q置零
  230.         if(n==0)       //當(dāng)?shù)褂?jì)時(shí)秒針為0時(shí),分針減一,秒針為59
  231.                 {
  232.                   n=60;
  233.                   m=m-1;
  234.                 }
  235.         n=n-1;        //每秒減一
  236.         }
  237.         if(m==0&&n==0)  //一節(jié)結(jié)束定時(shí)器停止,時(shí)間重置12:00;
  238. {
  239.          TR0 =0;
  240. }        
  241. }
復(fù)制代碼


正在重新握手 ... 成功                        [0.594"]
當(dāng)前的波特率: 115200
正在擦除目標(biāo)區(qū)域 ... 完成 !                [0.313"]
芯片出廠序列號(hào) : F002C4B208E7AE
正在下載用戶代碼 ... 完成 !                [0.875"]
正在設(shè)置硬件選項(xiàng) ... 完成 !                [0.015"]

更新后的硬件選項(xiàng)為:
  . 當(dāng)前的時(shí)鐘頻率: 11.088MHz
  . 系統(tǒng)頻率為12T(單倍速)模式
  . 振蕩器的放大增益不降低
  . 當(dāng)看門狗啟動(dòng)后,任何復(fù)位都可停止看門狗
  . MCU內(nèi)部的擴(kuò)展RAM可用
  . ALE腳的功能選擇仍然為ALE功能腳
  . P1.0和P1.1與下次下載無(wú)關(guān)
  . 下次下載用戶程序時(shí),不擦除用戶EEPROM區(qū)

  單片機(jī)型號(hào): STC89C52RC/LE52RC
  固件版本號(hào): 6.6.4C

操作成功 !







歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1