找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

籃球計時計分器系統(tǒng)設計 單片機源程序 原理圖 論文下載

  [復制鏈接]
跳轉到指定樓層
樓主
ID:114320 發(fā)表于 2016-4-18 15:15 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式

籃球計時計分器系統(tǒng)設計原理圖:


籃球計時計分器系統(tǒng)設計論文預覽:


源程序:
  1. #include<reg52.h>
  2. #include <intrins.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. uchar code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
  6. uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  7. uchar disbuffer[8]={0};
  8. uchar minute=0,second=0;                                //定義全局變量
  9. uchar Ascore=0,Bscore=0,temp=0;                        //
  10. uchar flage1=0;                                                        //        定義標志位
  11. uchar flage=0;                                                        //
  12. uint count,z;                                                   //
  13. sbit bizz=P3^7;                                 //蜂鳴器
  14. sbit add1=P1^0;                                 // 加一分
  15. sbit add2=P1^1;                                 // 加兩分
  16. sbit minus1=P1^2;                         // 減一分
  17. sbit exchange=P1^3;                         // 上下半場換場時換分
  18. sbit bstop=P1^4;                         //全場結束 關閉蜂鳴器
  19. sbit start=P1^5;                         //開始
  20. sbit stopagain=P1^6;             //暫停  開始
  21. sbit turn=P1^7;                                 //切換 加分
  22. sbit timeadd=P3^2;                     //加時間         設定時間
  23. void ininterrupt() interrupt 1         //定時器T0中斷函數
  24. {
  25.            TH0=(65536-50000)/256;
  26.         TL0=(65536-50000)%256;
  27.         count++;
  28.         if(count==20)
  29.         {
  30.                 count=0;
  31.                 if(second==0 && minute==0)
  32.                         {
  33.                                 ET0=0;
  34.                          }
  35.                  else if(second==0 && minute!=0)
  36.                          {
  37.                                 second=59;
  38.                                 minute--;
  39.                         }
  40.                  else if(second!=0 )
  41.                          {
  42.                                 second--;
  43.                         }               
  44.         }
  45. }  
  46. void delay( )           //顯示延時函數
  47. {
  48.         uint x,y;
  49.         for(x=10;x>0;x--)
  50.                 for(y=10;y>0;y--);               
  51. }
  52. void delay1( ) //延時消抖函數16ms
  53. {
  54.         uint x,y;
  55.         for(x=10;x>0;x--)
  56.                 for(y=360;y>0;y--) ;               
  57. }
  58. void display1()
  59. {
  60.         uchar i,j;
  61.         disbuffer[3]=second%10;
  62.         disbuffer[2]=second/10;
  63.         disbuffer[1]=minute%10;       
  64.         disbuffer[0]=minute/10;
  65.         disbuffer[5]=Ascore%10;
  66.         disbuffer[4]=Ascore/10;
  67.         disbuffer[7]=Bscore%10;
  68.         disbuffer[6]=Bscore/10;
  69.         temp=0xfe;
  70.         P2=temp;
  71.         for(i=0;i<8;i++)
  72.         {
  73.                 j=disbuffer[i];
  74.                 P0=table1[j];
  75.                 delay();
  76.                 temp=_crol_(temp,1);          //調用函數 移位
  77.                 P2=temp;
  78.                
  79.         }                       
  80. }                                 
  81. void display()                 //顯示函數
  82. {
  83.         uchar i,j;
  84.         uchar temp;
  85.         disbuffer[3]=second%10;
  86.         disbuffer[2]=second/10;
  87.         disbuffer[1]=minute%10;       
  88.         disbuffer[0]=minute/10;
  89.         disbuffer[5]=Ascore%10;
  90.         disbuffer[4]=Ascore/10;
  91.         disbuffer[7]=Bscore%10;
  92.         disbuffer[6]=Bscore/10;
  93.         temp=0xfe;
  94.         P2=temp;
  95.         for(i=0;i<8;i++)
  96.         {
  97.                 j=disbuffer[i];
  98.                 P0=table[j];
  99.        
  100.                 delay();
  101.                 temp=_crol_(temp,1);                    //調用函數 移位
  102.                 P2=temp;                                                 //
  103.        
  104.         }               
  105. }

  106. void bizzer()                                                  // 蜂鳴器函數  
  107. {
  108.         while(minute==0 && second==0)           //判斷時間結束
  109.         {
  110.                 bizz=0;
  111.                 display1();
  112.                 if(!bstop==1)                                   //關閉蜂鳴器按鍵  
  113.                 {
  114.                         delay1();                                   //延時消抖
  115.                         if(!bstop==1)
  116.                         {
  117.                                 while(!bstop==1);
  118.                                 while(1)
  119.                                 {
  120.                                         bizz=1;
  121.                                         display();
  122.                                 }
  123.                         }
  124.                 }
  125.          }
  126. }                          
  127. void exinterrupt() interrupt 0                           //中斷
  128. {
  129.                 delay1();
  130.                 if(!timeadd)                                         //按鍵設置比賽時間
  131.                 {
  132.                         while(!timeadd);
  133.                         minute++;
  134.                 }       
  135. }
  136. void button()        //按鍵 函數
  137. {
  138.         if(!turn)
  139.         {
  140.                 delay1();                           //延時消抖   以下用delay1的都是延時消抖
  141.                 if(!turn)
  142.                 {
  143.                         while(!turn);
  144.                         flage+=1;                        //標志位
  145.                 }
  146.          }
  147.         if(flage%2==0)
  148.         {
  149.                 if(!add1)
  150.                 {
  151.                         delay1();               
  152.                         if(!add1)
  153.                         {
  154.                                 while(!add1);                          //按鍵時 松手檢測
  155.                                 Ascore+=1;                                  //  A加  1  分
  156.                         }
  157.                 }
  158.                  if(!add2)
  159.                 {
  160.                         delay1();
  161.                         if(!add2)
  162.                         {
  163.                                 while(!add2);
  164.                                 Ascore+=2;
  165.                         }
  166.                 }
  167.                 if(!minus1)
  168.                 {
  169.                         delay1();
  170.                         if(!minus1)
  171.                         {
  172.                                 while(!minus1);
  173.                                 Ascore-=1;
  174.                         }
  175.                 }

  176.         }
  177.         else
  178.         {
  179.                 if(!add1)
  180.                 {
  181.                         delay1();
  182.                         if(!add1)
  183.                         {
  184.                                 while(!add1);
  185.                                 Bscore+=1;
  186.                         }
  187.                  }
  188.                  if(!add2)
  189.                 {
  190.                         delay1();
  191.                         if(!add2)
  192.                         {
  193.                                 while(!add2);
  194.                                 Bscore+=2;               
  195.                         }
  196.                 }
  197.                          if(!minus1)
  198.                         {
  199.                                 delay1();
  200.                                 if(!minus1)
  201.                                 {
  202.                                         while(!minus1);
  203.                                         Bscore-=1;       
  204.                                 }
  205.                         }
  206.         }
  207.         if(!exchange)                                  //下半場換場切換比分按鍵
  208.         {
  209.                 delay1();
  210.                 if(!exchange)
  211.                 {
  212.                         while(!exchange);
  213.                                 temp=Ascore;
  214.                                 Ascore=Bscore;
  215.                                 Bscore=temp;
  216.                 }
  217.         }
  218.         if(!stopagain)                                                 //暫停    繼續(xù)  按鍵
  219.         {
  220.                 delay1();
  221.                 if(!stopagain)
  222.                 {
  223.                         while(!stopagain);
  224.                                 flage1+=1;
  225.                 }
  226.         }
  227.         if(flage1%2==1)
  228.         {
  229.                 TR0=0;
  230.         }
  231.          else
  232.                  TR0=1;
  233.          if(!bstop==1)
  234.          {
  235.                  delay1();
  236.                 if(!bstop==1)
  237.                 {
  238.                         while(!bstop==1);
  239.                         bizz=0;
  240.                 }
  241.          }               
  242. }
  243. void main()
  244. {
  245.         while(1)
  246.         {
  247.                 display();       
  248.                 TH0=(65536-50000)/256;
  249.                 TL0=(65536-50000)%256;
  250.                 TMOD=0x01;
  251.                 EA=1;
  252.                 ET0=1;
  253.                 EX0=1;
  254.                 IT0=1;
  255.                 if(!start)
  256.                 {
  257.                         delay1();
  258.                         if(!start)
  259.                         {
  260.                                 while(!start);
  261.                                 TR0=1;
  262.                                 while(minute!=0 || second!=0 )
  263.                                 {
  264.                                         display();
  265.                                         button();
  266.                                         bizzer();
  267.                                 }
  268.                     }
  269.                        
  270.         }
  271.         }
  272. }
復制代碼

所有文件程序及其論文原理圖下載: 籃球計時計分器系統(tǒng)設計.zip (1.59 MB, 下載次數: 192)

評分

參與人數 2黑幣 +10 收起 理由
7201 + 5
stand + 5 很給力!

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:121216 發(fā)表于 2016-5-16 17:09 | 只看該作者
51黑有你更精彩!!
回復

使用道具 舉報

板凳
ID:121637 發(fā)表于 2016-5-18 10:04 | 只看該作者
新人圍觀,支持支持
回復

使用道具 舉報

地板
ID:151718 發(fā)表于 2016-12-2 17:54 | 只看該作者
樓主,這個為什么要設置減分系統(tǒng)啊,我覺得沒必要吧?
回復

使用道具 舉報

5#
ID:165520 發(fā)表于 2017-2-21 21:02 來自手機 | 只看該作者
這個設計說是有記憶功能,實際上并沒有記憶時間功能,并且display1的存在沒有必要,可以刪除
回復

使用道具 舉報

6#
ID:165520 發(fā)表于 2017-2-22 15:20 | 只看該作者
并且 時間記憶功能無法實現(xiàn),坑人
回復

使用道具 舉報

7#
ID:165520 發(fā)表于 2017-2-22 21:36 來自手機 | 只看該作者
樓主的程序沒有記憶功能是因為蜂鳴器函數循環(huán)嵌套過多,跳不出循環(huán)建議使用中斷,將蜂鳴器打開
回復

使用道具 舉報

8#
ID:191305 發(fā)表于 2017-4-19 17:20 | 只看該作者
樓主好人啊
回復

使用道具 舉報

9#
ID:852300 發(fā)表于 2020-12-9 16:43 | 只看該作者
張恒 發(fā)表于 2016-12-2 17:54
樓主,這個為什么要設置減分系統(tǒng)啊,我覺得沒必要吧?

按錯了的話要減回來
回復

使用道具 舉報

10#
ID:852300 發(fā)表于 2020-12-9 16:47 | 只看該作者
實際上使用還是一方一個電路板好,含時間和一方分數(都用2寸以上數碼管,尺寸已經比較大了),做產品的話銷量也能翻倍
回復

使用道具 舉報

11#
ID:704585 發(fā)表于 2020-12-11 20:18 | 只看該作者
謝謝分享
回復

使用道具 舉報

12#
ID:891769 發(fā)表于 2021-3-14 13:43 來自手機 | 只看該作者
有沒有加分1.2.3的
回復

使用道具 舉報

13#
ID:891769 發(fā)表于 2021-3-14 14:15 來自手機 | 只看該作者
贊贊贊有沒有24秒進攻倒計時的
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表