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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

請問各位大佬這個籃球記分器程序有錯嗎?為什么不能控制加分和蜂鳴器

[復制鏈接]
跳轉到指定樓層
樓主
ID:988120 發表于 2021-12-6 19:47 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. /**************************************************************************************
  2. 籃球記分器的設計
  3. /AT89C51單片機、數碼管若干、38譯碼器、矩陣按鍵、蜂鳴器
  4. ***************************************************************************************/

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

  6. typedef unsigned int u16;          //對數據類型進行聲明定義
  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;      //蜂鳴器觸發口
  12. sbit F1=P2^4;       //倒計時數碼管控制口
  13. sbit F2=P2^5;
  14. sbit S1=P2^6;
  15. sbit S2=P2^7;

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

  18. #define GPIO_DIG P0    //計分數碼管輸出口
  19. #define GPIO_KEY P1    //矩陣按鍵輸入口
  20. #define GPIO_TIME P3   //倒計時數碼管輸出口

  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,};    //數組存放向數碼管輸入的數
  23. unsigned char TShow[4]={ 0,0,0,0,};

  24. u16 Ascore,Bscore,Change;  //分數
  25. u8 Period;                 //節數
  26. u8 m=12,n,c;             //定時器變量

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

  35. /*******************************************************************************
  36. * 函 數 名         : KeyDown
  37. * 函數功能                   : 檢測有按鍵按下并讀取鍵值
  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);//延時10ms進行消抖
  48.                 if(GPIO_KEY!=0x0f)//再次檢測鍵盤是否按下
  49.                 {        
  50.                         //測試列
  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.                         //測試行
  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))         //檢測按鍵松手檢測
  69.                         {
  70.                                 delay(1000);
  71.                                 a++;
  72.                         }
  73.                 }
  74.         }
  75. }

  76. /**********************************************************************
  77. *函 數 名         : Score
  78. *函數功能                     : 加分程序,按鍵執行程序
  79. *************************************************************************/
  80. void Score()
  81. {
  82.         if(KeyValue!=20)
  83.                         switch(KeyValue)//A隊的計分
  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隊的計分
  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;                                                           //每一節加一
  100.                                 case(9):        Period=Period-1;KeyValue=20;break;                                               //減一//
  101.                                 case(10): Change=Ascore;Ascore=Bscore;Bscore=Change;break;  //交換場地
  102.                                 case(11):        Ascore=0; Bscore=0;Period=0;KeyValue=20;break;                 //計分板復位
  103.                                 case(12): TR0 = 1;        m=12;  n=0;   KeyValue=20;break;     //定時50ms,20*50=1000msbreak;
  104.                                 case(13):        TR0 = 1;     break;                           //繼續比賽
  105.                                 case(14): feng=1;TR0 = 0; KeyValue=20;break;            //暫停比賽
  106.                                 case(15):        feng=0; KeyValue=20;break;                    //關閉蜂鳴器
  107.                         }
  108. }

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

  120. /******************************************************************
  121. *函 數 名         : Conut
  122. *函數功能                     : 分離開送給數碼管的數字
  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. * 函 數 名         : DigDisplay
  144. * 函數功能                    : 數碼管動態掃描函數,循環掃描8個數碼管顯示
  145. *******************************************************************************/
  146. void DigDisplay()
  147. {
  148.         u8 i,w;
  149.         for(i=0;i<8;i++)
  150.         {
  151.                 switch(i)          //位選,選擇點亮的數碼管,比分顯示
  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]];//發送段碼        
  171.                 delay(10); //間隔一段時間掃描        
  172.                 P0=0x00;//消隱
  173.         }
  174.         for(w=0;w<4;w++)    //倒計時顯示
  175.         {
  176.         switch(w)         //位選,選擇點亮的數碼管,
  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);  //間隔一段時間掃描        
  189.                 P3=0x00;    //消隱
  190.         }
  191. }

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

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

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


正在重新握手 ... 成功                        [0.594"]
當前的波特率: 115200
正在擦除目標區域 ... 完成 !                [0.313"]
芯片出廠序列號 : F002C4B208E7AE
正在下載用戶代碼 ... 完成 !                [0.875"]
正在設置硬件選項 ... 完成 !                [0.015"]

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

  單片機型號: STC89C52RC/LE52RC
  固件版本號: 6.6.4C

操作成功 !


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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文二区| 国产成人免费视频网站高清观看视频 | 国产在线一区二区 | 午夜精品一区二区三区在线 | 国产美女自拍视频 | 国产成人精品一区二区三区视频 | 91九色婷婷 | 自拍 亚洲 欧美 老师 丝袜 | 国产一区二区欧美 | 欧美日韩一区精品 | 欧美性大战xxxxx久久久 | 精品久久国产 | 婷婷综合色 | 精品欧美一区二区三区久久久 | 色综合99| 免费国产黄网站在线观看视频 | 日韩欧美亚洲 | 狠狠操婷婷 | 91精品无人区卡一卡二卡三 | 亚洲精品视频在线播放 | 天天射影院 | 亚洲欧美国产精品久久 | 区一区二在线观看 | a级黄色网 | 欧美日韩专区 | 久久欧美高清二区三区 | 欧美精品乱码99久久影院 | 国产亚洲精品综合一区 | 国产分类视频 | 国产成在线观看免费视频 | 91极品欧美视频 | 日韩视频一区二区三区 | 国产免费一区二区三区最新6 | 成人在线免费观看视频 | 精品久久久久久亚洲精品 | 国产免费一区二区三区 | 理论片午午伦夜理片影院 | 欧美亚洲国产日韩 | 日韩精品一区二区三区第95 | 精品国产一区二区三区久久 | 精品中文字幕在线观看 |