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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機籃球計時計分系統仿真及程序 我的單片機課程設計

  [復制鏈接]
跳轉到指定樓層
樓主
ID:201545 發表于 2017-5-17 17:54 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
單片機新手來看看我做的課程設計, 籃球計時計分系統的proteus仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機籃球計時計分器源程序如下:
  1. /******************************************************************
  2. ***************************籃球計時計分系統************************
  3. *************************本系統滿足以下幾點要求********************
  4. *1、能設置整個賽程的比賽時間,在比賽過程中能根據需要暫停和開始計時*
  5. *2、能根據比賽情況刷新比賽雙方的比分*******************************
  6. *3、中場交換比賽場地時,能交換A、B兩隊比分的位置*******************
  7. *4、比賽結束時,能發出報警聲***************************************
  8. ******************************************************************/

  9. #include<reg52.h>
  10. #include<intrins.h>

  11. #define uchar                 unsigned char
  12. #define uint                 unsigned int

  13. uchar code HC595_ScanDATE[]=                //定義數碼管位數組
  14. {
  15.         0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80
  16. };

  17. unsigned char code LED_DATE [] =                //定義數碼管段數組
  18. {
  19.         0XC0,        // 0
  20.         0XF9,        // 1
  21.         0XA4,        // 2
  22.         0XB0,        // 3        
  23.         0X99,        // 4
  24.         0X92,        // 5
  25.         0X82,        // 6        
  26.         0XF8,        // 7
  27.         0X80,        // 8
  28.         0X90        // 9
  29. };

  30. sbit DS                =P2^0;                        //74HC595各I/O口定義
  31. sbit SHCP        =P2^1;
  32. sbit STCP        =P2^2;

  33. sbit S2                =P3^2;                           //賽前設定比賽時間按鍵
  34. sbit S3                =P1^0;                        //加1分按鍵                                                                  
  35. sbit S4                =P1^1;                         //加2分按鍵
  36. sbit S5                =P1^2;                          //減1分按鍵
  37. sbit S6                =P1^3;                        //半場換分按鍵
  38. sbit S7                =P1^4;                          //停止蜂鳴器按鍵
  39. sbit S8                =P1^5;                         //開始按鍵
  40. sbit S9                =P1^6;                           //暫停/繼續按鍵
  41. sbit S10        =P1^7;                          //加分減分隊伍選擇按鍵

  42. sbit LED2        =P3^5;        //A隊指示燈
  43. sbit LED3        =P3^6;        //B隊指示燈

  44. sbit BUZZ        =P3^7;
  45. bit Flag_Score=0;                //加分減分隊伍選擇標志位


  46. void Display();
  47. void HC595(uchar a);
  48. void Delay_MS(uint ms);
  49. void KEY();
  50. void Init();

  51. uint time=1200;                //初始時間20分鐘
  52. uchar A_Score=0;                //A隊得分
  53. uchar B_Score=0;                //B隊得分
  54. uchar Time_bit=0;        //用于定時器溢出標志

  55. void main()
  56. {
  57.         Init();
  58.         while(1)
  59.                 {
  60.                         Display();
  61.                         KEY();
  62.                 }
  63. }

  64. void Init()                                         //初始化函數
  65. {
  66.         LED2=0;                                          
  67.         TMOD=0x01;                                //定時器0 第一種工作方式
  68.         TH0=(65536-50000)/256;        //裝初值,定時50ms
  69.         TL0=(65536-50000)%256;
  70.         EA=1;                                        //開總中斷
  71.         ET0=1;                                        //打開定時器0        
  72. }

  73. void Timer() interrupt 1           //定時器函數,時間處理
  74. {
  75.         Time_bit++;
  76.         if(Time_bit==20)                        //溢出20次,定時1秒
  77.                 {
  78.                         Time_bit=0;
  79.                         if(time==0)                //當比賽結束時,停止計時,并發出警報
  80.                                 {
  81.                                         BUZZ=0;
  82.                                         //time=0;
  83.                                         TR0=0;
  84.                                 }
  85.                         else
  86.                                 time--;
  87.                 }
  88.         TH0=(65536-50000)/256;        //重裝初值,定時50ms
  89.         TL0=(65536-50000)%256;
  90. }

  91. void KEY()
  92. {
  93.         uchar Transposition_Scores=0;                //半場換分使用的緩存數據變量

  94.         if(S2==0)        //比賽時間設定,按一次加5分鐘
  95.                 {
  96.                         Delay_MS(1000);
  97.                         if(S2==0)        
  98.                                 {
  99.                                         while(!S2);
  100.                                         if(TR0==0)        //判斷是否開始,以免已經開始有誤按
  101.                                                 {
  102.                                                         time=time+300;
  103.                                                         if(time>2700)                //如果時間超過45分鐘,重新賦值20分鐘
  104.                                                                 time=1200;
  105.                                                 }
  106.                                 }
  107.                 }

  108.         if(S3==0)        //加1分按鍵
  109.                 {
  110.                         Delay_MS(1000);
  111.                         if(S3==0)
  112.                                 {
  113.                                         if(TR0==1)                //判斷是否開始,以免還未開始有誤按
  114.                                                 {
  115.                                                         while(!S3);
  116.                                                         if(Flag_Score==0)
  117.                                                                         A_Score++;
  118.                                                         else
  119.                                                                         B_Score++;
  120.                                                 }
  121.                                 }
  122.                 }

  123.         if(S4==0)        //加2分按鍵
  124.                 {
  125.                         if(TR0==1)                //判斷是否開始,以免還未開始有誤按
  126.                                 {
  127.                                         Delay_MS(1000);
  128.                                         if(S4==0)
  129.                                                 {
  130.                                                         while(!S4);
  131.                                                         if(Flag_Score==0)
  132.                                                                         A_Score=A_Score+2;
  133.                                                         else
  134.                                                                         B_Score=B_Score+2;
  135.                                                 }
  136.                                 }
  137.                 }

  138.         if(S5==0)        //減1分按鍵
  139.                 {
  140.                         if(TR0==1)                //判斷是否開始,以免還未開始有誤按
  141.                                 {
  142.                                         Delay_MS(1000);
  143.                                         if(S5==0)
  144.                                                 {
  145.                                                         while(!S5);
  146.                                                         if(Flag_Score==0)
  147.                                                                 {
  148.                                                                         if(A_Score==0)                //防止分數是0時亂碼
  149.                                                                                 A_Score=0;
  150.                                                                         else
  151.                                                                                 A_Score--;
  152.                                                                 }
  153.                                                         else
  154.                                                                 {
  155.                                                                         if(B_Score==0)                //防止分數是0時亂碼
  156.                                                                                 B_Score=0;
  157.                                                                         else
  158.                                                                                 B_Score--;
  159.                                                                 }
  160.                                                 }
  161.                                 }
  162.                 }
  163.         
  164.         if(S6==0)        //半場換分
  165.                 {
  166.                         Delay_MS(1000);
  167.                         if(S6==0)
  168.                                 {
  169.                                         while(!S6);
  170.                                         Transposition_Scores=A_Score;        //A隊的得分先賦給緩存變量
  171.                                         A_Score=B_Score;                                //將B隊的得分賦給A隊
  172.                                         B_Score=Transposition_Scores;        //再把緩存變量的值(也就是原先A隊的得分)賦給B隊
  173.                                 }
  174.                 }
  175.         
  176.         if(S7==0)        //停蜂鳴器
  177.                 {
  178.                         Delay_MS(1000);
  179.                         if(S7==0)
  180.                                 {
  181.                                         while(!S7);
  182.                                         BUZZ=1;
  183.                                 }
  184.                 }

  185.         if(S8==0)        //開始
  186.                 {
  187.                         Delay_MS(1000);
  188.                         if(S8==0)
  189.                                 {
  190.                                         while(!S8);
  191.                                         if(time==0)
  192.                                                 time=1200;        //一輪比賽結束后重新給時間賦值
  193.                                         TR0=1;                        //定時器開始工作
  194.                                 }
  195.                 }

  196.         if(S9==0)        //暫停繼續
  197.                 {
  198.                         Delay_MS(1000);
  199.                         if(S9==0)
  200.                                 {
  201.                                         while(!S9);
  202.                                         TR0=~TR0;                        //定時器暫停/繼續工作
  203.                                 }
  204.                 }

  205.         if(S10==0)        //切換加分減分隊伍
  206.                 {
  207.                         Delay_MS(1000);
  208.                         if(S10==0)
  209.                                 {
  210.                                         while(!S10);
  211.                                         Flag_Score=~Flag_Score;
  212.                                         if(Flag_Score==0)
  213.                                                 {
  214.                                                         LED2=0;
  215.                                                         LED3=1;
  216.                                                 }
  217.                                         else
  218.                                                 {
  219.                                                         LED2=1;
  220.                                                         LED3=0;
  221.                                                 }
  222.                                 }
  223.                 }
  224.         
  225.         
  226. }


  227. void Display()        //顯示函數
  228. {
  229.         P0=LED_DATE[time/1000];                //得出時間千位
  230.         HC595(HC595_ScanDATE[0]);
  231.         Delay_MS(500);
  232.         P0=0xff;                                //消隱
  233.         P0=LED_DATE[time%1000/100];        //得出時間百位
  234.         HC595(HC595_ScanDATE[1]);
  235.         Delay_MS(500);
  236.         P0=0xff;                                //消隱
  237.         P0=LED_DATE[time%100/10];                //得出時間十位
  238.         HC595(HC595_ScanDATE[2]);
  239.         Delay_MS(500);
  240.         P0=0xff;                                //消隱
  241.         P0=LED_DATE[time%10];                        //得出時間最個位
  242.         HC595(HC595_ScanDATE[3]);
  243.         Delay_MS(500);
  244.         P0=0xff;                                //消隱

  245.         P0=LED_DATE[A_Score/10];                //得出A隊得分十位
  246.         HC595(HC595_ScanDATE[4]);
  247.         Delay_MS(500);
  248.         P0=0xff;                                //消隱
  249.         P0=LED_DATE[A_Score%10];                //得出A隊得分個位
  250.         HC595(HC595_ScanDATE[5]);
  251.         Delay_MS(500);
  252.         P0=0xff;                                //消隱

  253.         P0=LED_DATE[B_Score/10];                //得出B隊得分十位
  254.         HC595(HC595_ScanDATE[6]);
  255. ……………………

  256. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載(帶仿真圖與源碼):
籃球計分系統.zip (104.14 KB, 下載次數: 165)


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

使用道具 舉報

沙發
ID:207654 發表于 2017-6-6 22:48 來自手機 | 只看該作者
太棒了 解壓來就可以用 幫我解決了大問題呢  不過對我而言好難呀 程序解讀都有問題
已經做出實物詳見:http://www.zg4o1577.cn/bbs/dpj-88757-1.html

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

板凳
ID:261201 發表于 2017-12-18 19:46 | 只看該作者
樓主,這個倒數  不是一分鐘倒數。。1200之后它就是1199了,應該是1159才對。你設置的TIME沒有除以60分鐘來算

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

地板
ID:386553 發表于 2018-10-7 18:32 | 只看該作者
樓主,DSN文件打不開
回復

使用道具 舉報

5#
ID:447027 發表于 2018-12-15 23:31 | 只看該作者
出現了Time :undefine identifier報錯該怎么辦啊
回復

使用道具 舉報

6#
ID:565728 發表于 2019-6-18 15:40 | 只看該作者
怎么修改時間 從1199 改成1159啊
回復

使用道具 舉報

7#
ID:756455 發表于 2020-6-7 21:05 | 只看該作者
怎么修改時間 從1199 改成1159啊
回復

使用道具 舉報

8#
ID:1079527 發表于 2023-5-24 10:36 | 只看該作者

樓主,DSN文件打不開
回復

使用道具 舉報

9#
ID:262 發表于 2023-5-24 15:42 | 只看該作者
xiangruyimo 發表于 2023-5-24 10:36
樓主,DSN文件打不開

Proteus8.13版本的工程.7z (24.26 KB, 下載次數: 4)
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕不卡 | 日韩三级在线观看 | 国产精品成人国产乱一区 | 午夜视频在线 | 免费看色 | 美女国产 | 欧美黄色片 | 精品久久久久久亚洲精品 | 久久久av| 免费av在线| 五月激情综合 | 日操操| 国产精品免费一区二区三区四区 | 国产99精品 | 天天干com | 久久久久久久久久毛片 | 久久久综合精品 | 女同av亚洲女人天堂 | 岛国精品 | 日操操 | 97视频精品 | 亚洲电影成人 | 91精品久久久久久久久中文字幕 | 久久久精品高清 | 中文字幕三区 | 殴美黄色录像 | 一区二区三区日韩 | 欧美亚洲在线 | 日本天堂一区二区 | 国产一级片在线播放 | 狠狠干网站 | 久久影音先锋 | 亚洲在线日韩 | 亚洲一区 | 成人精品国产一区二区4080 | 伊人焦久影院 | 日韩精品无码一区二区三区 | 99久久久99久久国产片鸭王 | 亚洲日韩中文字幕一区 | h片在线看 | 美女一级a毛片免费观看97 |