篮球计时计分器课程设计.docx
- 文档编号:13997532
- 上传时间:2023-06-19
- 格式:DOCX
- 页数:37
- 大小:247.44KB
篮球计时计分器课程设计.docx
《篮球计时计分器课程设计.docx》由会员分享,可在线阅读,更多相关《篮球计时计分器课程设计.docx(37页珍藏版)》请在冰点文库上搜索。
篮球计时计分器课程设计
1、绪论
现如今,随着科学技术的发达,人类越来越依靠科技的力量。
对于体育比赛计时计分系统是对体育比赛过程中所产生的时间,比分等数据进行快速采集记录,加工处理,传递利用的信息系统,他大大的减少了人的工作量,同时更加迅速精确的对比赛进行统计,也增加了比赛的公正公平性。
根据不同运动项目的不同比赛规则要求。
然而篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统。
篮球比赛的计时计分系统由计时器,计分器等多种电子设备组成,同时,根据目前高水平篮球比赛要求,完善的篮球比赛计时计分系统设备应能够与现场成绩处理,现场大屏幕,电视转播等多种设备相联,以便实现高比赛现场感,表演娱乐观众等功能目标。
因此,计时计分系统在篮球比猜中发挥着非常重要的作用。
1.2设计计任务和要求
任务:
设计一个用于赛场的篮球计时计分器。
要求:
1、能记录整个赛程的比赛时间,并能随时实现暂停。
2、能随时刷新甲、乙两队在整个过程中的比分。
3、中场交换比赛场地时,能自动交换甲、乙两队比分的位置。
4、比赛中场和结束时,能发出报警声。
5、通过指示灯指示上下半场。
6、当比赛时间需要回倒时,能通过按键实现回表。
7、加分有误时可通过按键实现减分调整。
1.3实验简介和方案设计
本设计是基于AT89S52单片机的篮球计时计分器,利用7段共阴LED作为显示器件。
在此设计中共接入了1个四位一体7段共阴LED显示器,2个两位一体7段共阴LED显示器,前者用来记录赛程时间,其中2位用于显示分钟,2位用于显示秒钟,后者用于记录甲乙队的分数,每队2个LED显示器显示范围可达到0~99分。
赛程计时采用倒计时方式,比赛开始时启动计时,直至计时到零为止。
其次,为了配合计时器和计分器校正调整时间和比分,我们特定在本设计中设立了7个按键,用于设置,调整时间,启动,调整分数和暂停等功能。
采用单片机控制是这个系统按键操作使用简洁,LED显示,安装方便。
篮球计时计分器主要包括单片机控制系统、计时显示模块、计分显示模块、定时报警,按键控制键盘模块。
通过这几个模块的协调工作就可以完成相应的计时计分控制和显示功能。
这四个模块的相互连接如下图(图1)所示
图
(1)
2、系统总体设计
2.1实验器材及模块
3.2.1、元件清单
元件
类型
数量
Proteus符号
AT89C52
1
AT89C51
7段数码管
四位一体共阴
1
7SEG-MPX4-CC
7段数码管
两位一体共阴
2
7SEG-MPX2-CC
电阻
1K10K
2
RES
电容
30PF10µF
3
CAPACITOR
晶振
12M
1
CRYSTAL
三极管
1
NPN
排组
8插头
1
RESPACK-8
喇叭
5V
1
BUZZER
按钮
8
BUTTON
发光二极管
2
LED-RED
3.2.2、单片机AT89S52简介
AT89S52是一个低功耗,高性能CMOS8位单片机,片内含8kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,功能强大的微型计算机的AT89S52可为许多嵌入式控制应用系统提供高性价比的解决方案。
AT89S52(如图2)具有如下特点:
40个引脚,8kBytesFlash片内程序存储器,256bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器.
图2AT89S52单片机引脚图
3.2.3时钟电路模块
时钟电路在单片机系统中起着非常重要的作用,是保证系统正常工作的基础。
在一个单片机应用系统中,时钟是保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢。
为达到振荡周期是12MHZ的要求,这里要采用12MHZ的晶振,另外有两个22P的电容,两晶振引脚分别连到XTAL1和XTAL2振荡脉冲输入引脚。
具体连接图如
图3所示:
图3晶振电路
复位电路模块
复位是单片微机的初始化操作,其主要功能是把PC初始化为0000H,使单片微机从0000H单元开始执行程序。
除进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,可以按复位键以重新启动,也可以通过监视定时器来强迫复位。
RST引脚是复位信号的输入端。
复位电路在这里采用的是上电+按钮复位电路形式,具体连接电路如图4
图4复位电路
本设计是基于AT89S52单片机的篮球计时计分器,利用7段共阴LED作为显示器件。
在此设计中共接入了1个四位一体7段共阴LED显示器,2个两位一体7段共阴LED显示器,前者用来记录赛程时间,其中2位用于显示分钟,2位用于显示秒钟,后者用于记录甲乙队的分数,每队2个LED显示器显示范围可达到0~99分。
赛程计时采用倒计时方式,比赛开始时启动计时,直至计时到零为止。
显示模块
本设计采用共阴极数码显示器,通常,共阴极接低电平(一般接地),其它管脚接段驱动电路输出端。
当某段驱动电路的输出端为高电平时,该端所连接的字符导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。
同样,要求段驱动电路能提供额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。
本次设计在显示模块用到的是一个4位一体和2个两位一体共阴极数码管,共有8个代码输入口和8个位选输入口,采用排阻提供上拉电流数码管,以保证有足够大的电流点亮数码管,采用动态驱动,使各位数码管逐个轮流受控显示,这就是动态驱动,由于扫描速度极快,显示效果与静态驱动相同,其具体图形如下图5图6所示
图5
图6
报警模块
蜂鸣器通过一NPN三极管进行驱动,如图触发信号有基极引入。
(图7)
图7
总硬件电路设计
4、软件设计
在设计程序之前,我们首先要对单片机应用系统预完成的任务进行深入的分析,明确系统的设计任务、功能要求和技术指标。
其次,要对系统的硬件资源和工作环境进行分析。
这是单片机应用系统程序设计的基础和条件。
软件总体设计方案
本次单片机课程设计软件设计部分采用模块化程序设计,程序部分由主程序、T0中断程序、扫描显示子程序、计时加(减)1秒的子程序、暂停子程序、快表和回表子程序、延时子程序等组成.其程序流程图如图9图10。
图9主程序流程图
图10扫描刷新显示子程序流程图
4.2软件设计具体过程
软件设计部分采用模块化程序设计,用C语言编写。
Keil是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。
KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。
另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。
在开发大型软件时更能体现高级语言的优势。
程序部分由主程序、T0中断程序、扫描显示子程序、计时加(减)1秒的子程序、暂停子程序、快表和回表子程序、延时子程序等组成。
4.
voiddelay(uintt)//延时子程序通过参数t,可以调整暂停时间
{
while(t--)
{
uinti;
for(i=0;i<200;i++);
}
}
4.2.2数码管动态刷新显示程序
voiddisplay(uinti,uintj,uintx,uinty)//数码管动态刷新显示程序
{
if(shang==1&&xia!
=2)//中间变量shang==1时,为上半场,对P1赋值
P1=0xbf;//点亮对应上半场指示灯
P2=0xfe;//数码管动态刷新显示程序i为分钟
P0=table[i%100/10];//刷新显示时间显示分钟十位
delay
(1);//延时数码管的点亮
P2=0xff;
P0=0;
P2=0xfd;//同理,动态刷新时分钟个位并延时点亮
P0=table[i%10];
delay
(1);
P0=0;
P2=0xff;
P2=0xfb;//同理,动态刷新时秒钟十位并延时点亮
P0=table[j%100/10];
delay
(1);
P0=0;
P2=0xff;
P2=0xf7;//同理,动态刷新时秒钟个位并延时点亮
P0=table[j%10];
delay
(1);
P0=0;
P2=0xff;
P2=0xef;//同理,动态刷新甲队分数十位并延时点亮
P0=table[x%100/10];
delay
(1);
P2=0xff;
P0=0;
P2=0xdf;//同理,动态刷新甲队分数个位并延时点亮
P0=table[x%10];
delay
(1);
P2=0xff;
P0=0;
P2=0xbf;//同理,动态刷新乙队分数十位并延时点亮
P0=table[y%100/10];
delay
(1);
P0=0;
P2=0xff;
P2=0x7f;//同理,动态刷新乙队分数十位并延时点亮
P0=table[y%10];
delay
(1);
P0=0;
P2=0xff;
}
本设计中各个数码管采用动态驱动,使各位数码管逐个轮流受控显示,由于扫描速度极快(本实验中大约每20毫秒刷新一次),所以显示效果与静态驱动相同。
4.2.3T0中断程序
voidt0(void)interrupt1//调用定时器T0
{
TH0=0xb1;
TL0=0x10;//定时器定时单位为20毫秒
if(n==0)
{//分钟与秒时间调整
n=60;m--;
}
i++;
if(i==50)
{//利用中间变量i令i值为5050*20毫秒=1秒
n--;//以实现一秒计时
i=0;
}
display(m,n-1,x,y);//调用动态刷新显示程序
}
voidjiafen()//加分按键子程序,在主程序中不断调用该子程序
{
if(RXD==0)//当检测到甲队加分按键按下时,对应加分
{
delay
(1);
if(RXD==0)
{//调用延时子程序实现按键抖
while(RXD==0);
x++;
}
}
if(TXD==0)//同理,检测乙队加分按键时候按下,并加分
{
delay
(1);
if(TXD==0)
{
while(TXD==0);
y++;
}
}
}
4.2.4加分子程序
voidjiafen()//加分按键子程序,在主程序中不断调用该子程序
{
if(RXD==0)//当检测到甲队加分按键按下时,对应加分
{
delay
(1);
if(RXD==0)
{//调用延时子程序实现按键抖
while(RXD==0);
x++;
}
}
if(TXD==0)//同理,检测乙队加分按键时候按下,并加分
{
delay
(1);
if(TXD==0)
{
while(TXD==0);
y++;
}
}
}
4
voidjianfen()//减分按键检测子程序
{
if(WR==0)
{
delay
(1);
if(WR==0)
{
while(WR==0);
x--;
}
}
if(RD==0)
{
delay
(1);
if(RD==0)
{
while(RD==0);
y--;
}
}
}
4.2.6调整时间子程序
调整时间子程序,使时间快速倒退或快进,实现回表功能,同时回表之后能自动暂停
voidtiaoshi()//显示时间调整程序
{
if(INT0==0)
{
delay(10);
if(INT0==0)//回表子程序,检测到INT0按下时,使时间回倒
{
zanting=1;//松开时,表暂停
n++;
if(n==60)
{
m++;
n=1;
}
}
}
if(INT1==0)//快表子程序,检测到INT1按下时,使倒计加快,
{
delay(10);
if(INT1==0)
{
zanting=1;
n--;
}
}
}
voidshijian()//该程序使回表和快表按键松开时候能自动暂停
{
if(zanting==1&&INT0==1&&INT1==1)
{
EA=0;
zanting=0;
while
(1)//按键松开时候仍能调用暂停程序
{
display(m,n,x,y);
if(P1_0==0)//检测暂停键按下,开中断,跳出暂停
{
delay
(1);
if(P1_0==0)
{
while(P1_0==0);
EA=1;
break;
}
}
}
}
}
4.2.7半场交换比分子程序
voidchange()//半场交换场地时自动交换双方比赛分数子程序
{
uinttemp;//定义中间变量temp,检测到有按键按下时候,交换甲队,乙队比赛分数
if(zidong==1&&shang==1)
{
temp=x;
x=y;
y=temp;
display(m,n,x,y);
zidong=0;
xia=0;
}
}
4.2.8比赛暂停子程序
voidtingzhi()//比赛暂停子程序
{
if(P1_0==0)//检测到暂停按键按下时候,关闭中断
{
delay
(1);
if(P1_0==0)
{//按键消抖
while(P1_0==0);
EA=0;
while
(1)
{
display(m,n,x,y);
if(P1_0==0)
{//当暂停键再次按下时候开中断
delay
(1);
if(P1_0==0)
{
while(P1_0==0);
EA=1;
break;
}
}
}
}
}
}
4.2.9中场指示灯程序
voidover()//比赛结束及及点亮下半场指示灯程序
{
if((m==0)&&(n==0))//当m,n均为0的时候,通过变量shang的值判断比赛是否结束
{
if(shang>1)//如果shang>1,说明半场到了,比赛没有结束
{//shang--,关中断,再次按下暂停键时候继续倒计时
m=2;
n=0;
EA=0;
T1=1;
delay(400);
T1=0;
while
(1)
{
display(m,n,x,y);
if(P1_0==0)
{
delay
(1);
if(P1_0==0)
{
while(P1_0==0);
EA=1;
break;
}
}
}
shang--;
}
if(shang==1&&xia==2)
{
m=0;
n=0;
EA=0;//关闭中断,比赛秒表不再走动,同时不短刷新数码管
T1=1;//全场比赛结束蜂鸣器开始报警
delay(400);
T1=0;
P1=0x3f;//P1=0x3f上下半场指示灯同时点亮,比赛结束
while
(1)
display(m,n,x,y);//不断刷新数码管
}
}
}
4.2.10主程序
voidmain()//主程序
{TMOD=0x01;//设置定时器工作方式
EA=1;
ET0=1;
TH0=0xb1;//定时器送计数初值,EA=1,开中断,P3口电平拉高
TL0=0x10;//P1=0x7f,上半场指示灯点亮
TR0=1;
P3=0xff;
P1=0x7f;
T1=0;
while
(1)
{//通过while
(1),反复调用循环体内的子程序
jiafen();//执行相应的功能
jianfen();
tiaoshi();
if(zidong==1)//zidong==1为key3()执行条件仅当半场结束时候执行
change();
if(xia==0)
{
xia=2;//修改变量bujin的值,设定over()中第二个if语句的执行条件
}
shijian();
tingzhi();
over();
}
}
5.PROTEUS仿真
5.1PROTEUS简介
Proteus是英国Labcenter公司开发的电路分析与实物仿真软件。
它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是:
①实现了单片机仿真和SPICE电路仿真相结合。
具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。
②支持主流单片机系统的仿真。
目前支持的单片机类型有:
ARM7(LPC21xx)、8051/52系列、AVR系列、PIC10/12/16/18系列、HC11系列以及多种外围芯片。
③提供软件调试功能。
在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如KeilC51uVision2、MPLAB等软件。
④具有强大的原理图绘制功能。
总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。
5.2仿真过程
按键从上到下依次为:
A队加分B队加分时间回倒时间前进A队减分B队减分
接通电源,计时显示即开始倒计时工作,上半场指示灯亮,计时初始设计为2分钟,按下A+1键实现对A的加分,每按下一次加1分,如图11.
图11
同样可实现A和B的加减分,按下暂停/启动键可实现暂停和启动。
图12
图13
上半场结束后,停止计时,蜂鸣器报警,按下暂停\启动按键启动下半场计时,同时可实现甲队和乙队交换分数,下半场指示灯亮。
下半场结束时,停止计时,蜂鸣器报警,上半场和下半场指示灯全部点亮。
比赛结束。
6、总结与体会
在这几天的单片机的学习中,对理论的基础上更深刻的掌握了单片机的深层内容及实际生活中的应用,实训锻炼了自己动手能力和思维能力,还有在软件方面的编程能力,让我受益匪浅,同时也暴露出一些平时学习上的问题,让我深刻反思。
这些问题的发现将为我以后的学习和工作找明道路,查漏补缺为进一步学习作好准备。
通过实训,让我更熟悉掌握了KeiluVision34proteusISIS这些应用程序的运用,让我懂得了如何编写一些简单的程序,学会了如何制作单片机应用程序,还有程序下载。
另外就是其中出现的问题, 这些问题的发现,有助于提高我在以后的工作和学习中对此类问题的认识,确保不在同一问题上再次犯错。
严谨求实、踏实务实,是我这次实训的深刻总结。
做课程设计的这几天翻阅了很多书,也上了很多网站去寻找自己需要的资料。
这种寻找有很强的目的性,只是为了自己选定的课题内容而查阅,所以除了自己课题以外的其他方面几乎还是一无所知。
这让我深刻的认识到了自己专业知识的贫乏。
为我对自己大四生活的规划敲响了警钟。
我对单片机的学习不会因为课程设计的结束而结束,在接触的众多资料里,做设计只是走马观花般的点到。
通过单片机课程设计,我加深了对单片机理论的理解,学回了怎样将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的不畏困难的挑战精神,从而不断地战胜自己,超越自己,我在这一设计过程中,学会了坚持不懈,不轻易言弃。
设计过程,也好比是我们人类成长的历程,常有一些不如意,也许这就是在对我们提出了挑战,勇敢过,也战胜了,胜利的钟声也就一定会为我们而敲响。
7、参考文献
【1】余发山,单片机原理及应用技术:
中国矿业大学出社,2003
【2】河南理工大学电气学院:
单片机实验报告指导册,2008
【3】刘法治,常用电子器件及典型芯片应用技术:
机械工业出版社,2007
【4】何立民,MSC--51系列单片应用系统设计:
北京航空航天大学出版社,1993
8、附件
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitP1_0=P1^0;
ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//数码管显示的字形0到9
uintm=1,n=60,x=0,y=0,i=0,shang=2,zidong=1,xia=1,zanting=0;//定义全局变量并初始化,其中m,n分别表示分钟与秒计时,x,y分别表示甲乙//两队的分数,其余中间变量
voiddelay(uintt)//延时子程序通过参数t,可以调整暂停时间
{
while(t--)
{
uinti;
for(i=0;i<200;i++);
}
}
voiddisplay(uinti,uintj,uintx,uinty)//数码管动态刷新显示程序
{
if(shang==1&&xia!
=2)//中间变量shang==1时,为上半场,对P1赋值
P1=0xbf;//点亮对应上半场指示灯
P2=0xfe;//数码管动态刷新显示程序i为分钟
P0=table[i%100/10];//刷新显示时间显示分钟十位
delay
(1);//延时数码管的点亮
P2=0xff;
P0=0;
P2=0xfd;//同理,动态刷新时分钟个位并延时点亮
P0=table[i%10];
delay
(1);
P0=0;
P2=0xff;
P2=0xfb;//同理,动态刷新时秒钟十位并延时点亮
P0=table[j%100/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 篮球 计时 计分 课程设计