篮球计时计分器系统设计报告Word文件下载.docx
《篮球计时计分器系统设计报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《篮球计时计分器系统设计报告Word文件下载.docx(15页珍藏版)》请在冰豆网上搜索。
为实现篮球计时计分器系统的设计,本系统应该满足以下几点要求:
•能设置整个赛程的比赛时间,在比赛过程中能根据需要暂停和开始计时。
•能根据比赛情况刷新比赛双方的比分。
•中场交换比赛场地时,能交换甲、乙两队比分的位置。
•比赛结束时,能发出报警声。
2.系统设计思路
根据设计任务与要求,设计思路如下:
系统主要功能包括记分和计时两部分,能实现两队比分的加分、减分、汁时以及其他多种显示效果;
系统控制模块有:
2位动态显示记分模块、4位动态显示计时模块、两队加分减分模块、按键查询模块、分秒控制模块等。
具体实现过程:
釆用7段LED数码管动态显示整个赛程的比赛时间和两队的比分情况。
通过4个按键和外部中断0实现输入功能,用于赛前时间调整、比赛过程比分纪录、时间启停以及比赛结束以后的声音报警等功能。
2.硬件电路设计
根据设计要求与设计思路,确定该系统的设计方案,图6-1为该系统设计方案的硬件电路设计框图。
硬件电路主要由4部分组成:
主控电路、按键控制电路、显示模块和定时报警模块。
下
面对其进行一一介绍。
2.1主控电路
系统的主控电路即为单片机最小系统,前丨M几章已经介绍过,其电气原理图如图6-2所示,这串.不再赘述。
2.2按键控制模块
系统共涉及9个按键,采用查询方式进行键盘扫描,具体电气原理图如图所示:
2.3显示模块
系统采用共阳极数码管显示,前面也已作详细介绍,在此不再赘述。
本系统显示分为三部分时间计时显示、A队分数显示以及B队分数显示。
显示模块如图所示:
2.4定时报警模块
定时报警模块采用蜂鸣器声音报警。
比赛结束后,P3.7输出一低电平,此时,发射结正向偏置且集电结反向偏置,满足三极管放大的外部条件,使信号放大从而驱动扬声器产生报警。
电气原理图如图6-5所示。
本系统软件部分主要包含定时中断函数、延时函数、显示函数、蜂鸣器启动函数、外部中断o函数、按键函数等。
下面一一进行介绍。
1..软件开发流程
篮球比赛中,得分可分为1分、2分、3分三种情况,系统在这设置加1分功能和加2分功能,得2分可按一下加2分功能键,得3分可先后按一下加2分功能键和加1分功能键。
主函数中调用显示函数,可显示时间、比分。
中断函数及按键扫描函数配合实现篮球比分和时间显示及修改功能。
其中,用1片4位数码管显示时间,2片2位数码管显示比分,均采用动态扫描方式显示;
时间启停、分数累加,均通
过接入键盘电路实现。
2..代码分析
(1)函数声明及变景定义
为方便程序的编写,把部分常用的变量进行伪定义。
#include<
reg52.h>
#include<
intrins.h>
#defineuintunsignedint#defineucharunsignedchar
ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchardisbuffer[8]={0};
ucharminute=0,second=0;
//定义全局变量
ucharAscore=03score=0,temp=0;
//
ucharflagel=0;
//定义标志位
ucharflage=0;
uintcounty,z;
sbitbizz=P3A7;
//蜂鸣器
sbitadd1=PlA0;
//加一分
sbitadd2=PlAl;
//加两分
sbitminus1=P1A2;
//减一分
sbitexchange=PlA3;
//上下半场换场时加分
sbitbstop=PlA4;
//全场结束关闭蜂鸣器
sbitstart=PlA5;
//开始
sbitstopagain=PlA6;
//暂停开始
sbittum=PlA7;
//切换加分
sbittimeadd=P3A2;
//加时间设定时间
(2)定时中断函数
产生一个Is的计时单元
VoidininterruptOinterrupt1
{
TH0=(65536-50000y256;
TLO=(65536-50000)%256;
count++;
if(count==20)
Count=0;
If(second==0&
&
minute==0;
{
Et0=0;
}
elseif(second==0&
minute!
=0)
{
second=59;
minute--;
}
elseif(second!
=0)
second--;
}
(3)延时函数
voiddelay()函数用于显示延时,voiddelayl()函数用于延时消抖。
voiddelay()//显不延时函数
uintx,y;
for(x=10;
x>
0;
x-)
for(y=10;
y>
y-);
//延时消抖函数16ms
voiddelay1()
foi<
x=10;
0pc-)
for(y=360;
}
(4)显示函数
//显示函数
功能是将数码管的码值进行处理送到端口,使得数码管显示时间和分数。
VoiddinplayQ
ucharij;
uchartemp;
disbuffer[3]=second%10;
disbuffer[2]=second/l0;
disbuffer[1]=minute%10;
disbufifer[0]=minute/10;
disbuflfer[5]=Ascore%10;
disbuffer[4]=Ascore/10;
disbufFer[7]=Bscore%10;
disbuffer[6]=Bscore/l0;
temp=Oxfe;
P2=temp;
for(i=0;
i<
8;
i++)
j=disbuffer[i];
P0=tableD];
delayO;
temp=_crol_(temp,1);
P2=temp;
(5)蜂鸣器启动函数
功能是等比赛结束后,启动蜂鸣器提示比赛结束
voidbizzerQ"
蜂鸣器函数
while(minute=0&
sec(md=0)判断时间结
(6)外部中断0函数
voidexinterrupt()interrupt0//中断
delay1();
if(!
timeadd)//按键设置比赛时间
{
while(!
timeadd);
minute++;
}
(7)按键函数
功能有实现A队加1分、加2分,A队减1分,B队加1分、加2分,B队减1分,下半场切换比分,暂停继续等
voidbutton()//按键函数
if(!
turn)
//延时消抖以下用delay1的都是延时消抖
turn);
flage+=1;
//标志位
}
if(flage%2==0)
add1)
delay1();
if(!
while(!
add1);
//按键时松手检测
Ascore+=1;
//A加1分
add2)
add2);
Ascore+=2;
if(!
minus1)
minus1);
Ascore-=1;
else
Bscore+=1;
Bscore+=2;
delay1();
if(!
{
while(!
Bscore-=1;
}
exchange)//下半场换场切换比分按键
exchange)
exchange);
temp=Ascore;
Ascore=Bscore;
Bscore=temp;
stopagain)//暂停继续按键
stopagain)
stopagain);
flage1+=1;
if(flage1%2==1)
TR0=0;
TR0=1;
bstop==1)
bstop==1);
bizz=0;
(8)主程序
voidmain()
while
(1)
display();
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TMOD=0x01;
EA=1;
ET0=1;
EX0=1;
IT0=1;
start)
start);
TR0=1;
while(minute!
=0||second!
display();
button();
bizzer();
}
4.本章小结
本例中系统电路简单,重点介绍了篮球计时计分器的硬件设计和软件编程方法。
本设计最大的特点是对设定时间的记忆功能。
基于篮球比赛是分节进行的,每节有固定的时间。
本设计可事先设定一节比赛的时间,一节比赛结束后,比分保持不变,再次开始后,是从上次设定的时间开始计时。
本设计采用AT89C51单片机作为核心部件,整个系统结构简单、实用性强、操作简便,具有低功耗、可靠性、安全性以及低成本等特点。