篮球计时计分器系统设计报告.docx
《篮球计时计分器系统设计报告.docx》由会员分享,可在线阅读,更多相关《篮球计时计分器系统设计报告.docx(18页珍藏版)》请在冰豆网上搜索。
篮球计时计分器系统设计报告
篮球计时计分系统
设计报告
电信131魏荣根
电信132李卓壮郑浩
1.系统设计要求及设计思路
2.硬件电路设计
2.1主控电路
2.2按键控制模块
2.3显示模块
2.4定时报警模块
3.软件开发流程及代码分析
4.实验总结
引言
•篮球计时计分器硬件电路设计
•篮球计时计分器软件设计
篮球计时计分器系统以AT89C51单片机为核心,系统显示部分包括
计时显示和计分显示两部分,均采用共阳极LED动态扫描方式显
示。
系统采用单片机定时器TO中断计时,计时范围宽,可进行定
时设定,也可以调整小时、分钟、秒等值;计分部分调整灵活,显
示范围宽,足以满足各种规糢赛程需要。
1.系统设计要求及设计思路
1.系统设计要求
为实现篮球计时计分器系统的设计,本系统应该满足以下几点要求:
•能设置整个赛程的比赛时间,在比赛过程中能根据需要暂停和开始计时。
•能根据比赛情况刷新比赛双方的比分。
•中场交换比赛场地时,能交换甲、乙两队比分的位置。
•比赛结束时,能发出报警声。
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所示。
3.软件开发流程及代码分析
本系统软件部分主要包含定时中断函数、延时函数、显示函数、蜂鸣器启动函数、外部中断o函数、按键函数等。
下面一一进行介绍。
1..软件开发流程
篮球比赛中,得分可分为1分、2分、3分三种情况,系统在这设置加1分功能和加2分功能,得2分可按一下加2分功能键,得3分可先后按一下加2分功能键和加1分功能键。
主函数中调用显示函数,可显示时间、比分。
中断函数及按键扫描函数配合实现篮球比分和时间显示及修改功能。
其中,用1片4位数码管显示时间,2片2位数码管显示比分,均采用动态扫描方式显示;时间启停、分数累加,均通
过接入键盘电路实现。
2..代码分析
(1)函数声明及变景定义
为方便程序的编写,把部分常用的变量进行伪定义。
#include
#include
#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>0;y-);
//延时消抖函数16ms
voiddelay1()
{
uintx,y;
foi0pc-)
for(y=360;y>0;y-);
}
(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();//延时消抖以下用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;
}
}
(8)主程序
voidmain()
{
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();
}
}
}
}
}
4.本章小结
本例中系统电路简单,重点介绍了篮球计时计分器的硬件设计和软件编程方法。
本设计最大的特点是对设定时间的记忆功能。
基于篮球比赛是分节进行的,每节有固定的时间。
本设计可事先设定一节比赛的时间,一节比赛结束后,比分保持不变,再次开始后,是从上次设定的时间开始计时。
本设计采用AT89C51单片机作为核心部件,整个系统结构简单、实用性强、操作简便,具有低功耗、可靠性、安全性以及低成本等特点。
WelcomeTo
Download
欢迎您的下载,资料仅供参考!