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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3291|回復: 1
收起左側

51單片機籃球計分器

[復制鏈接]
ID:205021 發表于 2017-5-26 10:37 | 顯示全部樓層 |閱讀模式
  • /******************************************************************
  • ***************************籃球計時計分系統************************
  • *************************本系統滿足以下幾點要求********************
  • *1、能設置整個賽程的比賽時間,在比賽過程中能根據需要暫停和開始計時*
  • *2、能根據比賽情況刷新比賽雙方的比分*******************************
  • *3、中場交換比賽場地時,能交換A、B兩隊比分的位置*******************
  • *4、比賽結束時,能發出報警聲***************************************
  • ******************************************************************/
  • #include<reg52.h>
  • #include<intrins.h>
  • #define uchar                 unsigned char
  • #define uint                 unsigned int
  • uchar code HC595_ScanDATE[]=                //定義數碼管位數組
  • {
  •         0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80
  • };
  • unsigned char code LED_DATE [] =                //定義數碼管段數組
  • {
  •         0XC0,        // 0
  •         0XF9,        // 1
  •         0XA4,        // 2
  •         0XB0,        // 3
  •         0X99,        // 4
  •         0X92,        // 5
  •         0X82,        // 6
  •         0XF8,        // 7
  •         0X80,        // 8
  •         0X90        // 9
  • };
  • sbit DS                =P2^0;                        //74HC595各I/O口定義
  • sbit SHCP        =P2^1;
  • sbit STCP        =P2^2;
  • sbit S2                =P3^2;                           //賽前設定比賽時間按鍵
  • sbit S3                =P1^0;                        //加1分按鍵
  • sbit S4                =P1^1;                         //加2分按鍵
  • sbit S5                =P1^2;                          //減1分按鍵
  • sbit S6                =P1^3;                        //半場換分按鍵
  • sbit S7                =P1^4;                          //停止蜂鳴器按鍵
  • sbit S8                =P1^5;                         //開始按鍵
  • sbit S9                =P1^6;                           //暫停/繼續按鍵
  • sbit S10        =P1^7;                          //加分減分隊伍選擇按鍵
  • sbit LED2        =P3^5;        //A隊指示燈
  • sbit LED3        =P3^6;        //B隊指示燈
  • sbit BUZZ        =P3^7;
  • bit Flag_Score=0;                //加分減分隊伍選擇標志位
  • void Display();
  • void HC595(uchar a);
  • void Delay_MS(uint ms);
  • void KEY();
  • void Init();
  • uint time=1200;                //初始時間20分鐘
  • uchar A_Score=0;                //A隊得分
  • uchar B_Score=0;                //B隊得分
  • uchar Time_bit=0;        //用于定時器溢出標志
  • void main()
  • {
  •         Init();
  •         while(1)
  •                 {
  •                         Display();
  •                         KEY();
  •                 }
  • }
  • void Init()                                         //初始化函數
  • {
  •         LED2=0;
  •         TMOD=0x01;                                //定時器0 第一種工作方式
  •         TH0=(65536-50000)/256;        //裝初值,定時50ms
  •         TL0=(65536-50000)%256;
  •         EA=1;                                        //開總中斷
  •         ET0=1;                                        //打開定時器0
  • }
  • void Timer() interrupt 1           //定時器函數,時間處理
  • {
  •         Time_bit++;
  •         if(Time_bit==20)                        //溢出20次,定時1秒
  •                 {
  •                         Time_bit=0;
  •                         if(time==0)                //當比賽結束時,停止計時,并發出警報
  •                                 {
  •                                         BUZZ=0;
  •                                         //time=0;
  •                                         TR0=0;
  •                                 }
  •                         else
  •                                 time--;
  •                 }
  •         TH0=(65536-50000)/256;        //重裝初值,定時50ms
  •         TL0=(65536-50000)%256;
  • }
  • void KEY()
  • {
  •         uchar Transposition_Scores=0;                //半場換分使用的緩存數據變量
  •         if(S2==0)        //比賽時間設定,按一次加5分鐘
  •                 {
  •                         Delay_MS(1000);
  •                         if(S2==0)
  •                                 {
  •                                         while(!S2);
  •                                         if(TR0==0)        //判斷是否開始,以免已經開始有誤按
  •                                                 {
  •                                                         time=time+300;
  •                                                         if(time>2700)                //如果時間超過45分鐘,重新賦值20分鐘
  •                                                                 time=1200;
  •                                                 }
  •                                 }
  •                 }
  •         if(S3==0)        //加1分按鍵
  •                 {
  •                         Delay_MS(1000);
  •                         if(S3==0)
  •                                 {
  •                                         if(TR0==1)                //判斷是否開始,以免還未開始有誤按
  •                                                 {
  •                                                         while(!S3);
  •                                                         if(Flag_Score==0)
  •                                                                         A_Score++;
  •                                                         else
  •                                                                         B_Score++;
  •                                                 }
  •                                 }
  •                 }
  •         if(S4==0)        //加2分按鍵
  •                 {
  •                         if(TR0==1)                //判斷是否開始,以免還未開始有誤按
  •                                 {
  •                                         Delay_MS(1000);
  •                                         if(S4==0)
  •                                                 {
  •                                                         while(!S4);
  •                                                         if(Flag_Score==0)
  •                                                                         A_Score=A_Score+2;
  •                                                         else
  •                                                                         B_Score=B_Score+2;
  •                                                 }
  •                                 }
  •                 }
  •         if(S5==0)        //減1分按鍵
  •                 {
  •                         if(TR0==1)                //判斷是否開始,以免還未開始有誤按
  •                                 {
  •                                         Delay_MS(1000);
  •                                         if(S5==0)
  •                                                 {
  •                                                         while(!S5);
  •                                                         if(Flag_Score==0)
  •                                                                 {
  •                                                                         if(A_Score==0)                //防止分數是0時亂碼
  •                                                                                 A_Score=0;
  •                                                                         else
  •                                                                                 A_Score--;
  •                                                                 }
  •                                                         else
  •                                                                 {
  •                                                                         if(B_Score==0)                //防止分數是0時亂碼
  •                                                                                 B_Score=0;
  •                                                                         else
  •                                                                                 B_Score--;
  •                                                                 }
  •                                                 }
  •                                 }
  •                 }
  •         if(S6==0)        //半場換分
  •                 {
  •                         Delay_MS(1000);
  •                         if(S6==0)
  •                                 {
  •                                         while(!S6);
  •                                         Transposition_Scores=A_Score;        //A隊的得分先賦給緩存變量
  •                                         A_Score=B_Score;                                //將B隊的得分賦給A隊
  •                                         B_Score=Transposition_Scores;        //再把緩存變量的值(也就是原先A隊的得分)賦給B隊
  •                                 }
  •                 }
  •         if(S7==0)        //停蜂鳴器
  •                 {
  •                         Delay_MS(1000);
  •                         if(S7==0)
  •                                 {
  •                                         while(!S7);
  •                                         BUZZ=1;
  •                                 }
  •                 }
  •         if(S8==0)        //開始
  •                 {
  •                         Delay_MS(1000);
  •                         if(S8==0)
  •                                 {
  •                                         while(!S8);
  •                                         if(time==0)
  •                                                 time=1200;        //一輪比賽結束后重新給時間賦值
  •                                         TR0=1;                        //定時器開始工作
  •                                 }
  •                 }
  •         if(S9==0)        //暫停繼續
  •                 {
  •                         Delay_MS(1000);
  •                         if(S9==0)
  •                                 {
  •                                         while(!S9);
  •                                         TR0=~TR0;                        //定時器暫停/繼續工作
  •                                 }
  •                 }
  •         if(S10==0)        //切換加分減分隊伍
  •                 {
  •                         Delay_MS(1000);
  •                         if(S10==0)
  •                                 {
  •                                         while(!S10);
  •                                         Flag_Score=~Flag_Score;
  •                                         if(Flag_Score==0)
  •                                                 {
  •                                                         LED2=0;
  •                                                         LED3=1;
  •                                                 }
  •                                         else
  •                                                 {
  •                                                         LED2=1;
  •                                                         LED3=0;
  •                                                 }
  •                                 }
  •                 }
  • }
  • void Display()        //顯示函數
  • {
  •         P0=LED_DATE[time/1000];                //得出時間千位
  •         HC595(HC595_ScanDATE[0]);
  •         Delay_MS(500);
  •         P0=0xff;                                //消隱
  •         P0=LED_DATE[time%1000/100];        //得出時間百位
  •         HC595(HC595_ScanDATE[1]);
  •         Delay_MS(500);
  •         P0=0xff;                                //消隱
  •         P0=LED_DATE[time%100/10];                //得出時間十位
  •         HC595(HC595_ScanDATE[2]);
  •         Delay_MS(500);
  •         P0=0xff;                                //消隱
  •         P0=LED_DATE[time%10];                        //得出時間最個位
  •         HC595(HC595_ScanDATE[3]);
  •         Delay_MS(500);
  •         P0=0xff;                                //消隱
  •         P0=LED_DATE[A_Score/10];                //得出A隊得分十位
  •         HC595(HC595_ScanDATE[4]);
  •         Delay_MS(500);
  •         P0=0xff;                                //消隱
  •         P0=LED_DATE[A_Score%10];                //得出A隊得分個位
  •         HC595(HC595_ScanDATE[5]);
  •         Delay_MS(500);
  •         P0=0xff;                                //消隱
  •         P0=LED_DATE[B_Score/10];                //得出B隊得分十位
  •         HC595(HC595_ScanDATE[6]);

回復

使用道具 舉報

ID:429157 發表于 2018-11-27 21:03 | 顯示全部樓層
樓主能私發給我嗎
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 黄色片在线网站 | 我爱操 | 国产精品a免费一区久久电影 | 在线亚州 | 国产美女一区二区 | 99久久精品一区二区成人 | 久久精品亚洲精品 | 91麻豆精品国产91久久久更新资源速度超快 | 99久久久久久 | 欧美1区2区 | 中文字幕在线观看 | 久久国产区 | 日韩在线一区二区 | 91视频18| 国产成人精品一区二区三区 | 成人免费视频 | 在线观看av免费 | 国产一区二区三区四区 | 天天拍天天射 | 综合激情久久 | 欧美不卡 | 久久9视频 | www九色| 91黄在线观看 | 日韩久久久久 | 国产精品色 | 久久婷婷色 | 久久久久久亚洲欧洲 | 中文字幕一区二区三区四区不卡 | 亚洲成av人影片在线观看 | 精品美女在线观看视频在线观看 | 性国产丰满麻豆videosex | 国产成人99久久亚洲综合精品 | 爱爱免费视频网站 | 亚洲国产成人精品在线 | 欧美在线观看一区二区 | 操操日 | 亚洲国产精品成人无久久精品 | 激情 一区 | 99一区二区 | 亚洲网站在线播放 |