篮球计时计分器系统设计原理图:
篮球计时计分器系统设计论文预览:
源程序:
- #include<reg52.h>
- #include <intrins.h>
- #define uint unsigned int
- #define uchar unsigned char
- uchar code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
- uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- uchar disbuffer[8]={0};
- uchar minute=0,second=0; //定义全局变量
- uchar Ascore=0,Bscore=0,temp=0; //
- uchar flage1=0; // 定义标志位
- uchar flage=0; //
- uint count,z; //
- sbit bizz=P3^7; //蜂鸣器
- sbit add1=P1^0; // 加一分
- sbit add2=P1^1; // 加两分
- sbit minus1=P1^2; // 减一分
- sbit exchange=P1^3; // 上下半场换场时换分
- sbit bstop=P1^4; //全场结束 关闭蜂鸣器
- sbit start=P1^5; //开始
- sbit stopagain=P1^6; //暂停 开始
- sbit turn=P1^7; //切换 加分
- sbit timeadd=P3^2; //加时间 设定时间
- void ininterrupt() interrupt 1 //定时器T0中断函数
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- count++;
- if(count==20)
- {
- count=0;
- if(second==0 && minute==0)
- {
- ET0=0;
- }
- else if(second==0 && minute!=0)
- {
- second=59;
- minute--;
- }
- else if(second!=0 )
- {
- second--;
- }
- }
- }
- void delay( ) //显示延时函数
- {
- uint x,y;
- for(x=10;x>0;x--)
- for(y=10;y>0;y--);
- }
- void delay1( ) //延时消抖函数16ms
- {
- uint x,y;
- for(x=10;x>0;x--)
- for(y=360;y>0;y--) ;
- }
- void display1()
- {
- uchar i,j;
- disbuffer[3]=second%10;
- disbuffer[2]=second/10;
- disbuffer[1]=minute%10;
- disbuffer[0]=minute/10;
- disbuffer[5]=Ascore%10;
- disbuffer[4]=Ascore/10;
- disbuffer[7]=Bscore%10;
- disbuffer[6]=Bscore/10;
- temp=0xfe;
- P2=temp;
- for(i=0;i<8;i++)
- {
- j=disbuffer[i];
- P0=table1[j];
- delay();
- temp=_crol_(temp,1); //调用函数 移位
- P2=temp;
-
- }
- }
- void display() //显示函数
- {
- uchar i,j;
- uchar temp;
- disbuffer[3]=second%10;
- disbuffer[2]=second/10;
- disbuffer[1]=minute%10;
- disbuffer[0]=minute/10;
- disbuffer[5]=Ascore%10;
- disbuffer[4]=Ascore/10;
- disbuffer[7]=Bscore%10;
- disbuffer[6]=Bscore/10;
- temp=0xfe;
- P2=temp;
- for(i=0;i<8;i++)
- {
- j=disbuffer[i];
- P0=table[j];
-
- delay();
- temp=_crol_(temp,1); //调用函数 移位
- P2=temp; //
-
- }
- }
- void bizzer() // 蜂鸣器函数
- {
- while(minute==0 && second==0) //判断时间结束
- {
- bizz=0;
- display1();
- if(!bstop==1) //关闭蜂鸣器按键
- {
- delay1(); //延时消抖
- if(!bstop==1)
- {
- while(!bstop==1);
- while(1)
- {
- bizz=1;
- display();
- }
- }
- }
- }
- }
- void exinterrupt() interrupt 0 //中断
- {
- delay1();
- if(!timeadd) //按键设置比赛时间
- {
- while(!timeadd);
- minute++;
- }
- }
- void button() //按键 函数
- {
- if(!turn)
- {
- delay1(); //延时消抖 以下用delay1的都是延时消抖
- if(!turn)
- {
- while(!turn);
- flage+=1; //标志位
- }
- }
- if(flage%2==0)
- {
- if(!add1)
- {
- delay1();
- if(!add1)
- {
- while(!add1); //按键时 松手检测
- Ascore+=1; // A加 1 分
- }
- }
- if(!add2)
- {
- delay1();
- if(!add2)
- {
- while(!add2);
- Ascore+=2;
- }
- }
- if(!minus1)
- {
- delay1();
- if(!minus1)
- {
- while(!minus1);
- Ascore-=1;
- }
- }
- }
- else
- {
- if(!add1)
- {
- delay1();
- if(!add1)
- {
- while(!add1);
- Bscore+=1;
- }
- }
- if(!add2)
- {
- delay1();
- if(!add2)
- {
- while(!add2);
- Bscore+=2;
- }
- }
- if(!minus1)
- {
- delay1();
- if(!minus1)
- {
- while(!minus1);
- Bscore-=1;
- }
- }
- }
- if(!exchange) //下半场换场切换比分按键
- {
- delay1();
- if(!exchange)
- {
- while(!exchange);
- temp=Ascore;
- Ascore=Bscore;
- Bscore=temp;
- }
- }
- if(!stopagain) //暂停 继续 按键
- {
- delay1();
- if(!stopagain)
- {
- while(!stopagain);
- flage1+=1;
- }
- }
- if(flage1%2==1)
- {
- TR0=0;
- }
- else
- TR0=1;
- if(!bstop==1)
- {
- delay1();
- if(!bstop==1)
- {
- while(!bstop==1);
- bizz=0;
- }
- }
- }
- void main()
- {
- while(1)
- {
- display();
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- TMOD=0x01;
- EA=1;
- ET0=1;
- EX0=1;
- IT0=1;
- if(!start)
- {
- delay1();
- if(!start)
- {
- while(!start);
- TR0=1;
- while(minute!=0 || second!=0 )
- {
- display();
- button();
- bizzer();
- }
- }
-
- }
- }
- }
复制代码
所有文件程序及其论文原理图下载:
篮球计时计分器系统设计.zip
(1.59 MB, 下载次数: 192)
|