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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 12751|回復(fù): 6
打印 上一主題 下一主題
收起左側(cè)

基于51單片機的籃球計分器Proteus仿真+代碼設(shè)計

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:269960 發(fā)表于 2018-12-25 10:03 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  單片機自20世紀(jì)70年代問世以來,以極其高的性價比受到人們的重視和關(guān)注,所以應(yīng)用很廣,發(fā)展很快。由于單片機的集成度高,功能強,通用性好,特別是它具有體積小、重量輕、能耗低、價格便宜、可靠性高、抗干擾能力強和使用方便等獨特的優(yōu)點,使單片機迅速得到了推廣應(yīng)用。目前已經(jīng)成為測量控制應(yīng)用系統(tǒng)中的優(yōu)選機種和新電子產(chǎn)品的關(guān)鍵部位,許多用單片機做控制的球賽計時計分系統(tǒng)也應(yīng)運而生,如:用單片機控制液晶顯示(LCD)計時計分器,用單片機控制LED七段顯示器計時計分器等。籃球計時計分器以單片機為核心,由計時器、計分器、綜合控制器等組成。
    系統(tǒng)采用模塊化設(shè)計,主體分為計時顯示模塊、計分顯示模塊、定時報警、按鍵控制鍵盤模塊。每個模塊的程序結(jié)構(gòu)簡單、任務(wù)明確,易于編寫、調(diào)試和修改。程序可讀性好,對程序的修改可局部進行,其他部分可保持不變。編程后利用Keil C51軟件來進行編譯,再將生成的HEX文件裝入芯片中,采用Proteus軟件仿真,檢驗功能是否能夠正常實現(xiàn),隨后可用Protel99畫出硬件電路圖。本設(shè)計中系統(tǒng)硬件電路主要由以下幾個部分組成:單片機AT89C51、計時電路、計分電路、報警電路和按鍵開關(guān)。
本次設(shè)計用由AT89C51編程控制LED七段數(shù)碼管作顯示的球賽計時計分系統(tǒng)。該系統(tǒng)具有賽程定時設(shè)置、賽程時間暫停、及時刷新甲乙雙方的成績等功能。它具有價格低廉、性能穩(wěn)定、操作方便并且易于攜帶等特點,廣泛適合各類學(xué)校或者小型團體作為賽程計時計分。

籃球計分器仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. #include<reg51.h>

  2. #define LEDData P0

  3. unsigned char code LEDCode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

  4. unsigned char minit,second,count,count1;                //分,秒,計數(shù)器

  5. sbit add1=P1^0;                                                //甲對加分,每按一次加1分   /在未開始比賽時為加時間分
  6. sbit dec1=P1^1;                                                //甲對減分,每按一次減1分        /在未開始比賽時為減時間分
  7. sbit exchange=P1^2;                                        //交換場地
  8. sbit add2=P1^3;                                                //乙對加分,每按一次加1分        /在未開始比賽時為加時間秒
  9. sbit dec2=P1^4;                                                //乙對減分,每按一次減1分        /在未開始比賽時為減時間秒
  10. sbit secondpoint=P0^7;                                //秒閃動點
  11. //----依次點亮數(shù)碼管的位------
  12. sbit led1=P2^7;
  13. sbit led2=P2^6;
  14. sbit led3=P2^5;
  15. sbit led4=P2^4;
  16. sbit led5=P2^3;
  17. sbit led6=P2^2;
  18. sbit led7=P2^1;
  19. sbit led8=P2^0;
  20. sbit led9=P3^7;
  21. sbit led10=P3^6;
  22. sbit led11=P3^5;

  23. sbit alam=P1^7;                                                //報警
  24. sbit onoff=P3^2;
  25. bit  playon=0;                                                //比賽進行標(biāo)志位,為1時表示比賽開始,計時開啟
  26. bit  timeover=0;                                        //比賽結(jié)束標(biāo)志位,為1時表示時間已經(jīng)完
  27. bit  AorB=0;                                                //甲乙對交換位置標(biāo)志位
  28. bit  halfsecond=0;                                        //半秒標(biāo)志位

  29. unsigned int scoreA;                                //甲隊得分
  30. unsigned int scoreB;                                //乙隊得分
  31.                

  32. void Delay5ms(void)
  33. {
  34.         unsigned int i;
  35.         for(i=100;i>0;i--);
  36. }
  37. void display(void)
  38. {
  39. //-----------顯示時間分--------------
  40.         LEDData=LEDCode[minit/10];
  41.         led1=0;
  42.         Delay5ms();
  43.         led1=1;
  44.         LEDData=LEDCode[minit%10];
  45.         led2=0;
  46.         Delay5ms();
  47.         led2=1;
  48. //-------------秒點閃動------------
  49.         if(halfsecond==1)
  50.                 LEDData=0x80;
  51.         else
  52.                 LEDData=0x00;
  53.         led2=0;
  54.         Delay5ms();
  55.         led2=1;
  56.         secondpoint=0;
  57. //-----------顯示時間秒------------
  58.         LEDData=LEDCode[second/10];
  59.         led3=0;
  60.         Delay5ms();
  61.         led3=1;
  62.         LEDData=LEDCode[second%10];
  63.         led4=0;
  64.         Delay5ms();
  65.         led4=1;
  66. //-----------顯示1組的分?jǐn)?shù)百位-------
  67.         if(AorB==0)
  68.                 LEDData=LEDCode[scoreA/100];
  69.         else
  70.                 LEDData=LEDCode[scoreB/100];
  71.         led5=0;
  72.         Delay5ms();
  73.         led5=1;
  74. //---------------顯示1組分?jǐn)?shù)的十位-----------
  75.         if(AorB==0)
  76.                 LEDData=LEDCode[(scoreA%100)/10];
  77.         else
  78.                 LEDData=LEDCode[(scoreB%100)/10];
  79.         led6=0;
  80.         Delay5ms();
  81.         led6=1;

  82. //---------------顯示1組分?jǐn)?shù)的個位-----------
  83.         if(AorB==0)
  84.                 LEDData=LEDCode[scoreA%10];
  85.         else
  86.                 LEDData=LEDCode[scoreB%10];
  87.         led7=0;
  88.         Delay5ms();
  89.         led7=1;

  90. //-----------顯示2組分?jǐn)?shù)的百位-------
  91.         if(AorB==1)
  92.                 LEDData=LEDCode[scoreA/100];
  93.         else
  94.                 LEDData=LEDCode[scoreB/100];
  95.         led8=0;
  96.         Delay5ms();
  97.         led8=1;
  98. //-----------顯示2組分?jǐn)?shù)的十位-----------
  99.         if(AorB==1)
  100.                 LEDData=LEDCode[(scoreA%100)/10];
  101.         else
  102.                 LEDData=LEDCode[(scoreB%100)/10];
  103.         led9=0;
  104.         Delay5ms();
  105.         led9=1;

  106. //-----------顯示2組分?jǐn)?shù)的個位-----------
  107.         if(AorB==1)
  108.                 LEDData=LEDCode[scoreA%10];
  109.         else
  110.                 LEDData=LEDCode[scoreB%10];
  111.         led10=0;
  112.         Delay5ms();
  113.         led10=1;
  114. }


  115. //=========================按鍵檢測程序================================================
  116. void keyscan(void)
  117. {
  118.         if(onoff==0)
  119.         {
  120.                 display();
  121.                 if(onoff==0)
  122.                 {
  123.                         alam=0;
  124.                         Delay5ms();Delay5ms();
  125.                         alam=1;
  126.                         TR1=0;
  127.                         timeover=0;
  128.                         playon=!playon;                                //開始標(biāo)志位
  129.                         TR0=playon;                                        //開啟計時
  130.                         do
  131.                                 display();
  132.                         while(onoff==0);
  133.                 }
  134.         }
  135.         if(playon==0)
  136.         {
  137.                 if(add1==0)
  138.                 {
  139.                         display();
  140.                         if(add1==0);
  141.                         {
  142.                                 alam=0;
  143.                                 Delay5ms();Delay5ms();
  144.                                 alam=1;
  145.                                 if(minit<99)
  146.                                         minit++;
  147.                                 else
  148.                                         minit=99;
  149.                         }
  150.                         do
  151.                                 display();
  152.                         while(add1==0);
  153.                 }

  154.                 if(dec1==0)
  155.                 {
  156.                         display();
  157.                         if(dec1==0);
  158.                         {
  159.                                 alam=0;
  160.                                 Delay5ms();Delay5ms();
  161.                                 alam=1;
  162.                                 if(minit>0)
  163.                                         minit--;
  164.                                 else
  165.                                         minit=0;
  166.                         }
  167.                         do
  168.                                 display();
  169.                         while(dec1==0);
  170.                 }

  171.                 if(add2==0)
  172.                 {
  173.                         display();
  174.                         if(add2==0);
  175.                         {
  176.                                 alam=0;
  177.                                 Delay5ms();Delay5ms();
  178.                                 alam=1;
  179.                                 if(second<59)
  180.                                         second++;
  181.                                 else
  182.                                         second=59;
  183.                         }
  184.                         do
  185.                                 display();
  186.                         while(add2==0);
  187.                 }

  188.                 if(dec2==0)
  189.                 {
  190.                         display();
  191.                         if(dec2==0);
  192.                         {
  193.                                 alam=0;
  194.                                 Delay5ms();Delay5ms();
  195.                                 alam=1;
  196.                                 if(second>0)
  197.                                         second--;
  198.                                 else
  199.                                         second=0;
  200.                         }
  201.                         do
  202.                                 display();
  203.                         while(dec2==0);
  204.                 }

  205.                 if(exchange==0)
  206.                 {
  207.                         display();
  208.                         if(exchange==0);
  209.                         {
  210.                                 alam=0;
  211.                                 Delay5ms();Delay5ms();
  212.                                 alam=1;
  213.                                 TR1=0;                                        //關(guān)閉T1計數(shù)器
  214.                                 alam=1;                                        //關(guān)報警
  215.                                    AorB=~AorB;                                //開啟交換        
  216.                                 minit=15;                                //并將時間預(yù)設(shè)為15:00
  217.                                 second=0;
  218.                         }
  219.                         do
  220.                                 display();
  221.                         while(exchange==0);
  222.                 }        
  223.         }
  224.         else
  225.         {
  226.                 if(add1==0)
  227.                 {
  228.                         display();
  229.                         if(add1==0);
  230.                         {
  231.                                 alam=0;
  232.                                 Delay5ms();Delay5ms();
  233.                                 alam=1;
  234.                                 if(AorB==0)
  235.                                 {
  236.                                         if(scoreA<999)
  237.                                                 scoreA++;
  238.                                         else
  239.                                                 scoreA=999;
  240.                                 }
  241.                                 else
  242.                                 {
  243.                                         if(scoreB<999)
  244.                                                 scoreB++;
  245.                                         else
  246.                                                 scoreB=999;
  247.                                 }
  248.                         }
  249.                         do
  250.                                 display();
  251.                         while(add1==0);
  252.                 }

  253.                 if(dec1==0)
  254.                 {
  255.                         display();
  256.                         if(dec1==0);
  257.                         {
  258.                                 alam=0;
  259.                                 Delay5ms();Delay5ms();
  260.                                 alam=1;
  261.                                 if(AorB==0)
  262.                                 {
  263.                                         if(scoreA>0)
  264.                                                 scoreA--;
  265.                                         else
  266.                                                 scoreA=0;
  267.                                 }
  268.                                 else
  269.                                 {
  270.                                         if(scoreB>0)
  271.                                                 scoreB--;
  272.                                         else
  273.                                                 scoreB=0;
  274.                                 }
  275.                         }
  276.                         do
  277.                                 display();
  278.                         while(dec1==0);
  279.                 }

  280.                 if(add2==0)
  281.                 {
  282.                         display();
  283.                         if(add2==0);
  284.                         {
  285.                                 alam=0;
  286.                                 Delay5ms();Delay5ms();
  287.                                 alam=1;
  288.                                 if(AorB==1)
  289.                                 {
  290.                                         if(scoreA<999)
  291.                                                 scoreA++;
  292.                                         else
  293.                                                 scoreA=999;
  294.                                 }
  295.                                 else
  296.                                 {
  297.                                         if(scoreB<999)
  298.                                                 scoreB++;
  299.                                         else
  300.                                                 scoreB=999;
  301.                                 }
  302.                         }
  303.                         do
  304.                                 display();
  305.                         while(add2==0);
  306.                 }

  307.                 if(dec2==0)
  308.                 {
  309.                         display();
  310.                         if(dec2==0);
  311.                         {
  312.                                 alam=0;
  313.                                 Delay5ms();Delay5ms();
  314.                                 alam=1;
  315.                                 if(AorB==1)
  316.                                 {
  317.                                         if(scoreA>0)
  318.                                                 scoreA--;
  319.                                         else
  320.                                                 scoreA=0;
  321.                                 }
  322.                                 else
  323.                                 {
  324.                                         if(scoreB>0)
  325.                                                 scoreB--;
  326.                                         else
  327.                                                 scoreB=0;
  328.                                 }
  329.                         }
  330.                         do
  331.                                 display();
  332.                         while(dec2==0);
  333.                 }
  334.         }
  335. }
  336.         


  337. //******************************主函數(shù)*************************************************
  338. void main(void)
  339. {
  340.         TMOD=0x11;
  341.          TL0=0xb0;
  342.          TH0=0x3c;
  343.          TL1=0xb0;
  344.          TH1=0x3c;
  345.         minit=12;                                //初始值為12:00
  346.         second=0;
  347.          EA=1;
  348.         ET0=1;
  349.         ET1=1;
  350.          TR0=0;
  351.         TR1=0;
  352.         P1=0xFF;
  353.         P3=0xFF;
  354.          while(1)
  355.          {
  356.                 keyscan();
  357.                 display();                        
  358.     }
  359. }

  360. //*********************************中斷服務(wù)函數(shù)**************************************
  361. void  time0_int(void) interrupt 1
  362. {
  363.          TL0=0xb0;
  364.          TH0=0x3c;
  365.          TR0=1;
  366.           count++;
  367.         if(count==10)
  368.         {
  369.                 halfsecond=0;
  370.         }

  371.            if(count==20)
  372.            {
  373.                 count=0;
  374.                 halfsecond=1;
  375.         
  376.             if(second==0)
  377.                  {
  378.                         if(minit>0)
  379.                         {
  380.                                 second=59;
  381.                                 minit--;
  382.                         }
  383.                         else
  384.                         {
  385.                                 timeover=1;
  386.                                 playon=0;
  387.                                 TR0=0;
  388.                                 TR1=1;
  389.                         }
  390.                 }
  391.                 else
  392.                         second--;
  393.            }
  394. }


  395. //*********************************中斷服務(wù)函數(shù)**************************************
  396. void  time1_int(void) interrupt 3
  397. {
  398.         TL1=0xb0;
  399.          TH1=0x3c;
  400.          TR1=1;
  401.           count1++;
  402.         if(count1==10)
  403.         {
  404.                 alam=0;
  405.         }

  406.            if(count1==20)
  407.            {
  408.                 count1=0;
  409.                 alam=1;
  410.         }
  411. }
復(fù)制代碼

所有資料51hei提供下載:
基于51單片機的籃球計分器設(shè)計.zip (67.99 KB, 下載次數(shù): 346)


評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:522091 發(fā)表于 2019-4-26 14:29 | 只看該作者
有沒有人根據(jù)樓主的資料畫個原理圖pcb啊?
回復(fù)

使用道具 舉報

板凳
ID:47652 發(fā)表于 2019-4-29 19:58 | 只看該作者
嗯,收藏了,參考備用

回復(fù)

使用道具 舉報

地板
ID:535301 發(fā)表于 2019-5-11 14:04 | 只看該作者
LEDData=LEDCode[minit/10];這句提示錯誤,,,,warning C275: expression with possibly no effect
回復(fù)

使用道具 舉報

5#
ID:560069 發(fā)表于 2019-6-11 16:18 | 只看該作者
有沒有籃球計分器的程序流程圖啊?
回復(fù)

使用道具 舉報

6#
ID:417529 發(fā)表于 2019-6-18 18:28 | 只看該作者
非常感謝,收藏了
回復(fù)

使用道具 舉報

7#
ID:651464 發(fā)表于 2019-11-28 13:08 | 只看該作者
我下載了但是在哪里看
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美午夜精品 | av网站在线免费观看 | 亚洲bt 欧美bt 日本bt | 国产自产c区 | 日韩一级免费电影 | 久久久精品网站 | 日本手机看片 | 国产91视频一区二区 | 日韩av成人在线观看 | 97人人干| 中文字幕精品一区二区三区精品 | 久久成人国产精品 | 在线观看特色大片免费网站 | 国产精品精品视频一区二区三区 | 91麻豆精品国产91久久久更新资源速度超快 | www.久久| 久久久久久久综合色一本 | 国产色网站 | 91久操视频 | 99久久夜色精品国产亚洲96 | 大学生a级毛片免费视频 | 最近日韩中文字幕 | 99视频免费播放 | 亚洲精品日本 | 日韩一级免费大片 | 99视频免费播放 | 懂色中文一区二区三区在线视频 | 亚洲国产69 | 日韩精品免费看 | 久久久久亚洲精品 | 欧美综合一区二区三区 | 久国久产久精永久网页 | 日韩成人免费视频 | 日日噜噜噜夜夜爽爽狠狠视频, | 日韩综合网 | 国产综合区 | 狠狠躁天天躁夜夜躁婷婷老牛影视 | 欧美性大战久久久久久久蜜臀 | 综合久久99 | 欧美videosex性极品hd | 日韩视频一区二区三区 |