找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2377|回复: 2
收起左侧

求篮球计分器程序

[复制链接]
ID:155192 发表于 2016-12-16 10:32 | 显示全部楼层 |阅读模式
如题,求篮球计分器程序
回复

使用道具 举报

ID:1 发表于 2017-1-6 18:50 | 显示全部楼层
单片机篮球计分器程序http://www.51hei.com/bbs/dpj-33685-1.html
回复

使用道具 举报

ID:577269 发表于 2020-6-11 00:48 | 显示全部楼层
#include <reg51.h>  #define uchar unsigned char uchar code tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF,0xBF}/*1~9、空格和-的字型码*/                         ,display[8]={1,2,4,8,16,32,64,128};//动态显示数码管 uchar score[2]={0,0},time[2]={12,0},byte[8]={0},j=0,h=0;//score数组记录A、B两队份数time //数组记录倒计时分、秒时间,byte //数组记录八个数码管的显示字,j记 //录按键s0按下的次数,h记录时间 //中断1的次数; bit start=0;                                                                //start为12分倒计时是否开始时的标志位; sbit alrm=P3^0;                                                        //alrm为响铃脉冲输出端 unsigned int t=0;                                                        //响铃脉冲个数 void delay1(uchar t)                                                //延时程序,最短5ms {         unsigned char m,n,k;          for(m=t;m>0;m--)          for(n=10;n>0;n--)          for(k=250;k>0;k--);  }   void jishi()                                        //倒计时程序 {   if(start==1)                                                //如果倒计时标志有效,则开始倒计时   {   if(time[1]==0)                                           {   if(time[0]==0)                        //如果分秒位都为0时,开启时间中断0,输出响铃脉冲   {   start=0;   ET0=1;   TR0=1;   }   else                                        //如果秒位为0,分位不为0,则秒位跳为59,分位减1   {   time[0]--;   time[1]=59;   }    }   else time[1]--;                        //如果分秒位都不为0,则秒位减1   } } void TIMER0() interrupt 1 using 0                        //时间中断0;用于产生响铃脉冲 {                  TH0=0xfc;                                                //1ms的计数初始状态         TL0=0x18;         t++;         alrm=!alrm;         if(t==5000)                                                //如果输出5000个脉冲,则停止响铃         {         t=0;         ET0=0;         TR0=0;         } } void TIMER1() interrupt 3 using 1 {         TH1=0x63;         TL1=0xc0;                        //50ms初始值;         if((h++)==20)         {                            // 一秒是否到,如果到,则进行倒计时程序         h=0;         jishi();         } } void INT_0() interrupt 0 using 2                //外部中断0,记录按键按下次数 {                 ET0=0;         delay1(1);                        //延时消抖         j++;         if(j==5)                                //如果按键s0按下五次,则归零         j=0;         ET0=1; }  void jiaohuan()                        //分数交换,AB两队换场程序 {         uchar temp;         temp=score[0];         score[0]=score[1];         score[1]=temp; }  void INT_1() interrupt 2 using 3                //外部中断1 {                 ET1=0;                                                //延时消抖         delay1(1);         if(j==1)                                                //如果s0按下的次数为1次,则score[1]加1         {                 score[1]++;                 if(score[1]==100)                        //分数到100后归零                 score[1]=0;         }         else if(j==2)                 {                 score[0]++;                                //如果s0按下的次数为2次,则score[0]加1                 if(score[0]==100)                        //分数到100后归零                 score[0]=0;                 }         else if(j==3)                                //如果s0按下的次数为3次,则两队分数交换                 jiaohuan();         else  if(j==4)                 //如果s0按下的次数为4次        ,则打开倒计时或关闭倒计时         start=!start;         else;         ET1=1;          } void by(void) {                         byte[5]=11;                        //第五个数码管一直显示为"-"                 if(j==4)                                //如果s0按下的次数为4,则显示倒计时                 {                          byte[3]=time[0]/10;                         byte[4]=time[0]%10;                         byte[6]=time[1]/10;                         byte[7]=time[1]%10;                  }                 else                         //否则显示比分                 {                                 byte[3]=score[0]/10;                         byte[4]=score[0]%10;                         byte[6]=score[1]/10;                         byte[7]=score[1]%10;                         }  } void blank() {         if(j==1)                //如果s0按下1次;第7、8个数码管闪烁跳动         {                 byte[7]=10,byte[6]=10;         }         else if(j==2)        //如果s0按下2次;第4、5个数码管闪烁跳动         {                 byte[3]=10,byte[4]=10;         }          else if(j==3)        //如果s0按下3次;第4、5、7、8个数码管闪烁跳动         {         byte[7]=10,byte[6]=10;         byte[4]=10,byte[3]=10;         }         else;  } void bitshow() {        if(h<=10)                //前半秒正常显示,后半秒根据s0按下的次数相应的数码管闪烁                 by();                 else                 blank(); } void dis() {        uchar  i;            while(1)                        //        死循环显示         {                         bitshow();                        //求每一位的显示                 for(i=3;i<=7;i++)                 {                 P0=~display[i];                //P0口控制扫描显示的数码管                 P1=tab[byte[i]];                //P1口输出字型码                 delay1(1);                        //延时5ms,增加显示亮度                 }         }  }         void main(void) {                 TMOD=0x11;         EA=1;         EX0=1;         EX1=1;         ET1=1;         IT1=1;         IT0=1;         TR1=1;                                        //开启时间中断1,两个外部中断         IP=5;                                        //中断优先级控制         dis();                                        //显示子程序  }
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表