篮球比赛计分器设计.docx
《篮球比赛计分器设计.docx》由会员分享,可在线阅读,更多相关《篮球比赛计分器设计.docx(20页珍藏版)》请在冰豆网上搜索。
篮球比赛计分器设计
学号:
本科毕业设计
学院
专业
年级
姓名
论文题目篮球比赛计分器设计
指导老师职称
年月日
篮球比赛计分器设计
摘要:
篮球比赛计分器主要由计分器、计时器等多种电子器件组成。
篮球比赛计分器主要实现的根本功能有:
开场和暂停、比赛时间倒计时、24秒倒计时、加分操作、蜂鸣报警、时间和比分显示的根本功能。
本设计具备比赛过程中数据显示的稳定性及准确性;在比赛进入倒计时24秒之后,该系统会有报警声,即该场比赛完毕。
随着单片机在各个领域的应用,篮球比赛积分器系统也应用单片机为主要芯片。
在用单片机控制的LED七段显示器计时计分以便于在比赛中进步稳定性和准确性。
本设计是基于单片机AT89C51的篮球比赛计分系统。
利用三个四位8段数码管作为显示器件,有时间显示,每一次进攻24秒显示,每一节分钟倒计时显示,双方比分显示。
关键词:
篮球比赛;计分器;24秒倒计时
The design of basketball game scoring device
Abstract:
Basketballgamescoringdevicesmainlyincludesscoringdevices,calculagraph,andotherelectronicdevices.Thebasicfunctionsofabasketballgame
are:
startandpause,thegamecountdown,a24-secondcountdown,addingscores,buzzingalarm,displayingtimeandscores.Thisdesignisstableandaccurate.Whenthegameis24secondsleft,thealarmwillring.Thenitmeansgameisover.WiththeapplicationofSCMinvariousfields,thebasketballgamesystemalsoadoptsSCMasthemainchip.ByusingtheLEDseven-segmentdisplaycontrolledbySCM,itwillbemorestableandaccurateinthegame.ThisdesignismainlytalkingaboutthescoringsystemwhichisbasedonSCMAT89c51.Usingthreefoureight-segmentasdisplaydevices,itshowstime,every24seconds,everyminutecountdown,scoresbetweentwosides.
Keywords:
Basketballgame,scoringdevice,24secondscountdown
1绪论
篮球比赛是根据队员在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计分系统是一种得分类型的系统。
篮球比赛的计分系统由计时器、积分器等多种电子设备组成,同时,根据如今篮球比赛要求,完善的篮球比赛计分系统设备应可以与赛场得分处理,赛场大屏幕,电视转播车等多种设备相联,以便于是比赛更容易让观众处于现场的感觉。
同时,随着单片机在各个领域的广泛应用,利用单片机为主要芯片来设计篮球比赛计分系统。
由于单片机的高集成度,控制功能强,电压低,特别是它具有体积不大,质量轻,能量消耗低,价格低廉,高可靠性,容易扩展,便于消费便携式产品等多种优点,使单片机迅速得到了广泛应用,目前已经成为测量控制应用系统中的首选和新电子产品的重要部位[1]。
由于单片机的性能极高,单片机已广泛应用于各大电子产品产业。
篮球比赛计分器就是以单片机为核心的计分系统。
本设计是基于单片机AT89C51的篮球比赛计分系统。
利用三个四位8段数码管作为显示器件。
本设计是简单模拟篮球比赛计时计分器的设计,有时间显示,每一次进攻24秒显示,每一节分钟倒计时显示,双方比分显示。
12个共阳数码管分别是:
前六位为当前时间显示,第七八位是进攻24秒时间显示,第九到十二位是每节比赛倒计时显示,时间准确到秒。
本设计有四种显示形式,00.00.00.24计时形式,000-000计分形式,H000-000给前一个球队加分形式,000-H000给后一个球队加分形式;接通电源后,进入00.00.00.24,12.00形式,等待比赛开场,第三个键按下进入比赛倒计时形式,按第二次进入计分显示形式,按第三次又进入计时等待形式,等待下一轮开场;简单一点说就是:
依次按第三个键分别是:
等待-开场-计分-等待三种形式循环。
在000--000计分形式下,第一个键按下进入H000-000形式,第二个键加分,第三个键减分,再按第一个键进入正常计分形式000-000;在000-000计分形式下,第二个键按下进入000-H000形式,第一个键加分,第三个键减分,再按第二个键进入正常计分形式000-000;24秒定时时间到,报警3秒停,24秒倒计时复位,进入等待状态。
〔1〕可以准确记录整个比赛过程中的分数;
〔2〕可以准确记录整个比赛过程中的时间;
〔3〕在比赛完毕时,可以发出警报声。
2方案选择与论证
篮球比赛主要实现的根本功能有:
开场、比赛时间倒计时、24秒倒计时、加分操作、减分操作、蜂鸣报警、时间和比分显示的根本功能。
因此,必需要有相关的输入模块、控制模块和显示模块等。
对于输入模块,有独立按键输入和矩阵式按键输入。
但是两者相比拟而言,矩阵式按键输入的组建形式灵敏,可用于输入更多的控制对象。
对于控制模块,可以利用数字芯片进展控制,也可以利用单片机进展控制,显然,单片机控制方式是很高效的。
对于显示模块,有LED数码管显示和LCD液晶显示,与LED数码管相比,LCD体积大,能耗大,并且价格高昂,不太合适学生选择使用,所以选择使用LED数码管。
用石英晶体振荡器或555定时器产生稳定的校时信号,555定时芯片是一种中规模集成电路,可以构成多谐振荡器脉冲产生与整形电路,在自动控制、定时、防盗报警器有着广泛的应用,并且操作简单,所以选用555定时器来完成报警电路和1秒脉冲[2]。
运用了74LS157,74LS190,74LS00,74LS20及555定时器根本元件。
此类元件性价比适宜,使用不难,大局部根本功能都可以实现,是工程中的根本元件。
其系统框图如图1所示:
图1系统框图
利用8255A对AT89C51单片机的P0端口扩展来实现。
PA口为计时和计分的段控,PB口为计分的位控,PC口为计时显示的位控、报警、暂停和刷新,单片机的P3口为控制位,控制着开场,P1口为键盘输入端口[3]。
该设计使用8255A经P0口扩展为三个可用的8位端口,经8255A扩展后,可用的端口增多,起到了更好的扩展功能,利用74LS373对段和位分别进展锁存,增强了系统的稳定性,本方案的设计的详细电路如下列图2所示:
图28255A扩展电路图
该方案以单片机为核心,作为控制模块,并以LED数码管作为显示模块,通过单片机自带的时钟电路和相应的定时器来实现计时[4]。
由单片机的P0口接显示器件,P1口接键盘,P2口接译码电路,P3口接中断处理电路,报警电路接在未用的I/O口线上[5]。
基于单片机AT89C51篮球比赛计分器设计的系统构造图如图3:
图3AT89C51设计系统框图
方案一的实现要用到多块数字芯片,数字电路的一个大的缺点就是电路随着信号的改变会产生冲击电流,稳定性相对而言比拟差。
方案二对于电路焊接比拟费事,对于学生来讲不太容易实现。
方案三设计简单,容易操作。
综上所述,三种方案中,方案三对于学生更容易实现,所以选择方案三。
本系统利用单片机AT89C51为该设计的主要芯片。
利用12个7段共阳LED作为显示器件,12个共阳数码管分别是:
前六位当前时间显示,第七八位是进攻24秒时间显示,第九到十二位是每节比赛倒计时显示,时间准确到秒[6]。
进入倒计时24秒之后,蜂鸣器会发出警报声,以表示比赛完毕。
其次,为了配合计时器和计分器同时运用恰当,设置了三个按键,根据案件的特定次数来显示相应的得分情况以及比赛时间[7]。
3单元电路设计
图4是AT89C51的引脚图,引脚说明如下
图451单片机系列引脚图
VCC:
AT89C51电源正极输入,接+5V电压。
GND:
电源接地端。
XTAL1:
接外部晶振的一个引脚。
在单片机内部,它是一反相放大器输入端,这个放大器构成了片内振荡器。
它采用外部振荡器时,些引脚应接地[8]。
XTAL2:
接外部晶振的一个引脚。
在片内接至振荡器的反相放大器输出端和内部时钟发生器输入端[9]。
当采用外部振荡器时,那么此引脚接外部振荡信号的输入。
本次设计要使用到AT89C51单片机的时钟振荡功能。
AT89C51中有一个用于构成内部震荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是该放大器的输入和输出端[10]。
这个放大器与作为反应元件的片外石英晶体或者陶瓷谐振器一起构成自激振荡器。
AT89C51的时钟主要分为两种方式:
第一种是片内时钟振荡,另一种是外部时钟方式。
本次设计采用的是第一种片内时钟振荡方式,通过在18和19端口外接石英晶体和振荡电容组成,这样既可产生本设计所需的时钟[11]。
振荡电路如下列图5所示:
图5振荡电路
控制按键电路如下列图6所示,键S3按下进入比赛倒计时形式,按第二次进入计分显示形式,按第三次又进入计时等待形式,等待下一轮开场;简单一点说就是:
依次按键S3分别是:
等待--开场--计分--等待三种形式循环。
在000-000计分形式下,S1按下进入H000-000形式,S2加分,S3减分,再按S1键进入正常计分形式000-000;在000-000计分形式下,S2键按下进入000-H000形式,S1键加分,S3键减分,再按S2键进入正常计分形式000-000;24秒定时时间到,报警3秒停,24秒倒计时复位,进入等待状态。
图6控制按键电路
本系统采用的复位电路是上电加按钮电平复位,在系统刚接通电路时,可令单片机自动复位;在系统运行中,可以通过开关使单片机复位[12]。
复位电路如下列图7所示:
图7复位电路
报警时钟电路如下列图8所示,当一次进攻在进入24秒倒计时之后,蜂鸣器会发出警报声,扬声器的时间为3秒钟,表示比赛时间完毕。
报警时钟电路如下列图8所示:
图8报警时钟电路
(1)数码管显示原理
数码管实际上是由7个发光管组成8字形构成的,加上小数点就是8个。
我们分别把他命名为A,B,C,D,E,F,G,H。
图9数码管内部构造图
假设我们要显示一个数字2,那么A、B、G、E、D这5个段的发光管亮就可以了,C、F、H不亮,同时由于接法为共阳接法,那么为低电平是亮,高电平是灭。
从高往低排列,-写成二进制为10100010,把他转化为16进制那么为A2H[13]。
数码管的接口有静态接口和动态接口两种。
静态接口为固定显示方式,无闪烁,其电路可采用一个并行口接一个数码管,数码管的公共端按共阳接电源,本次课程设计由于所需数码管不多,故可用些种方法接线。
这种接法占用接口多,仅能接少量数码管[14]。
动态接口采用各数码管循环轮流显示的方法,当循环显示的频率较高时,利用人眼的暂留特性,看不出闪烁显示现象,这种显示需要一个接口完成字形码的输出,另一接口完成各数码管的轮流点亮[15]。
多位一体的数码管原理和单个的差不多。
下表为数码管显示数字的表格:
表1共阳极数码管显示
显示
P0.7
小数点
P0.6
G
F
P0.4
E
P0.3
D
P0.2
C
P0.1
B
P0.0
A
16进制代码
0
1
1
0
0
0
0
0
0
COH
1
1
1
1
1
1
0
0
1
F9H
2
1
0
1
0
0
1
1
0
A2H
3
1
0
1
1
0
0
0
0
B0H
4
1
0
0
1
1
0
0
1
99H
5
1
0
0
1
0
0
1
0
92H
6
1
0
0
0
0
0
1
0
82H
7
1
1
1
1
1
0
0
0
F8H
8
1
0
0
0
0
0
0
0
80H
9
1
0
0
1
0
0
0
0
90H
〔2〕12个共阳数码管分别是:
前六位为当前时间显示,第七八位是进攻24秒时间显示,第九到十二位是每节比赛倒计时显示,时间准确到秒。
有四种显示形式,00.00.00.24计时形式,000-000计分形式,H000-000给前一个球队加分形式,000-H000给后一个球队加分形式。
图10数码管电路连接图
4软件设计
4.1主流程图
图11系统流程图
4.2源程序代码
见附录1
5调试结果及分析
硬件电路图:
图12系统硬件电路图
生成PCB图:
图13系统PCB图
本设计主要实现的根本功能有:
开场和暂停、比赛时间倒计时、24秒倒计时、加减分操作、蜂鸣报警、时间和比分显示的根本功能。
基于理论上,上电之后,LED显示00.00.00.24,12.00形式;等待比赛开场,按下第三个键进入比赛倒计时形式,按第二次进入计分显示形式,按第三次又进入计时等待形式,等待下一轮开场;依次按第三个键分别是:
等待--开场--计分--等待三种形式循环。
在000--000计分形式下,第一个键按下进入H000-000形式,即给A队计分,按下第二个键给A队加分,按下第三个键给A队减分;再按第一个键进入正常计分形式000-000;在000-000计分形式下,第二个键按下进入000-H000形式,即给B队计分,按下第一个键给B队加分,按下第三个键给B队减分,再按第二个键进入正常计分形式000-000;24秒定时时间到,报警3秒停,24秒倒计时复位,进入等待状态。
在调试过程中,可能由于线路的连接问题或者是程序没有设置好,导致LED数字显示不是特别准确,但是在本设计中要求的根本功能:
开场、两队加分减分、比赛时间倒计时、24秒倒计时、蜂鸣报警根本上都可以实现,所以还是根本上到达设计要求的。
6结论
从本次设计中,主要使用AT89C51芯片作为核心元件,结合外部的显示电路及键盘控制电路,构成了一个篮球比赛计分器。
整体电路主要由AT89C51芯片、键盘控制、计分显示器和计时显示器四局部组成。
设计中主要使用keil软件和proteus软件。
Keil软件主要用来对C语言程序进展编译。
Proteus软件主要用来对硬件电路进展仿真。
整个设计可以实现计分显示、计时显示和比赛完毕报警等功能。
此次设计也使我对单片机工作原理、功能有了宏观的理解,并对单片机汇编程序的应用有了新的进一步认识。
在本次设计之前,觉得这个设计是个比拟简单的设计,但是在设计过程中发现自己有很多缺乏,动手才能过差,主要原因是我们没有经常动手设计过电路。
由于设计的方案没有安排好,设计的时间较为仓促,尤其是在硬件的调试过程出现了很大问题。
但是,经过我的不懈努力,结果还是很可观的,篮球比赛计分器的根本功能都可以实现。
对于篮球比赛计分器设计,还有一点改良之处,就是在单节比赛时间小于1分钟时,倒计时显示可以准确到秒,这样可以更直观的看到比赛最后阶段的时间变化,也能使比赛更剧烈,分秒必争。
参考文献
[1][M].北京:
北京航空航天大学出版社,2004:
89-95.
[2]阎石.数字电子技术根底〔第五版〕[M].北京:
高等教育出版社,2005:
477--495.
[3]MtProspect.MCS-51FamilyofMicrocontrollersArchitecturalOverview,September1993:
26-45.
[4]Jonshon.high-speeddigitaldesign[M].PrenticeHall,1993:
178-192.
[5]ChengyingHua.MicroelectronicsCircuitAnalysisandDessign(ThirdEdition)[M].TsinghuaUniversitypress,2007:
185-204.
[6][M].北京:
机械工业出版社,2021:
123-134.
[7][M].合肥:
中国科学技术大学出版社,1995:
156-178.
[8]董凤锦.毕业设计指导〔电类〕[M].西安:
西安电子科技大学出版社,2005:
65-73.
[9][M].北京:
清华大学出版社,2006:
201-234.
[10][M].北京:
北京理工大学出版社,2021:
56-63.
[11][M].北京:
清华大学出版社,2006:
83-103.
[12][M].北京:
电子工业出版社,2021:
147-153.
[13]李东生.Protel99SE电路设计技术入门与应用[M].第一版.北京:
电子工业出版社,2002:
179-192.
[14][M].北京:
电子工业出版社,2021:
69-81.
[15][M].北京:
北京航空航天大学出版社,2002:
56-68.
附录1
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitP3_4=P3^4;//改分钟
sbitP3_5=P3^5;//改小时
sbitP3_6=P3^6;//时间暂停
sbitP3_7=P3^7;//报警
sbitP3_0=P3^0;//条件信号
sbitP3_1=P3^1;//条件信号
sbitP3_2=P3^2;//条件信号
sbitP3_3=P3^3;//条件信号
uchara=0,b=0,c=0,d=0,e=12,f=0,g=0,h=0,k=0,s24=24;
uchardisp[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};//定义12个显示单元
uchardispbit[]={0xef,0xdf,0xbf,0x7f,0xfe,0xfd,0xfb,0xf7,0xfe,0xfd,0xfb,0xf7};//P1、P2口扫描代码
uchardispcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0x89};//共阳数码管显示代码
uchardispcode1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
////////////////////////////////////////////////////////////////
voiddisplay1(void){
uchari,j;
disp[5]=b/10;
disp[4]=b%10;
disp[3]=a/10;
disp[2]=a%10;
disp[1]=s24/10;
disp[0]=s24%10;
disp[7]=d/10;
disp[6]=d%10;
disp[11]=e/10;
disp[10]=e%10;
disp[9]=k/10;
disp[8]=k%10;
for(i=0;i<12;i++){
if(i==2|i==4|i==6|i==10)P0=dispcode1[disp[i]];
elseP0=dispcode[disp[i]];
if(i<8){P1=0xff;P2=dispbit[i];}///////费事可是不少,第一次这样写if(i<8)P2=dispbit[i];elseP1=dispbit[i];得出一个结论,开另一扫描时关掉现用的扫描
else{P2=0xff;P1=dispbit[i];}
for(j=0;j<255;j++);
}
}
//////////////////////////////////////////////////////////////////
voiddisplay2(void){
uchari,j;
disp[7]=f/100;//计分百位
disp[6]=f%100/10;//计分十位
disp[5]=f%100%10;//计分个位
disp[3]=10;//显示为"-"
disp[4]=10;//显示为"-"
disp[2]=g/100;//计分百位
disp[1]=g%100/10;//计分十位
disp[0]=g%100%10;//计分个位
disp[11]=e/10;
disp[10]=e%10;
disp[9]=k/10;
disp[8]=k%10;
for(i=0;i<12;i++){
if(i==10)P0=dispcode1[disp[i]];//个位带小数点显示
elseP0=dispcode[disp[i]];
if(i<8){P1=0xff;P2=dispbit[i];}
else{P2=0xff;P1=dispbit[i];}
for(j=0;j<255;j++);
}
}
//////////////////////////////////////////////////////////////////
voiddisplay3(void){
uchari,j;
disp[7]=f/100;//计分百位
disp[6]=f%100/10;//计分十位
disp[5]=f%100%10;//计分个位
disp[3]=11;//显示为"H"
disp[4]=10;//显示为"-"
disp[2]=g/100;//计分百位
disp[1]=g%100/10;//计分十位
disp[0]=g%100%10;//计分个位
disp[11]=e/10;
disp[10]=e%10;
disp[9]=k/10;
disp[8]=k%10;
for(i=0;i<12;i++){
if(i==10)P0=dispcode1[disp[i]];//个位带小数点显示
elseP0=dispcode[disp[i]];
if(i<8){P1=0xff;P2=dispbit[i];}
else{P2=0xff;P1=dispbit[i];}
for(j=0;j<255;j++);
}
}
///////////////////////////////////////////////////////////