基于51单片机的篮球记分牌设计.docx
- 文档编号:3894169
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:34
- 大小:312.62KB
基于51单片机的篮球记分牌设计.docx
《基于51单片机的篮球记分牌设计.docx》由会员分享,可在线阅读,更多相关《基于51单片机的篮球记分牌设计.docx(34页珍藏版)》请在冰点文库上搜索。
基于51单片机的篮球记分牌设计
摘要
单片机,亦称单片微电脑或单片微型计算机。
它是把中央处理器(CPU)、随机存取存储器(RAM)、只读存储器(ROM)、输入/输出端口(I/0)等主要计算机功能部件都集成在一块集成电路芯片上的微型计算机。
本设计是基于AT89S52单片机的篮球计时计分器,利用7段共阴LED作为显示器件。
在此设计中共接入了1个四位一体7段共阴LED显示器,2个两位一体7段共阴LED显示器,前者用来记录赛程时间,其中2位用于显示分钟,2位用于显示秒钟,后者用于记录甲乙队的分数,每队2个LED显示器显示范围可达到0~99分。
赛程计时采用倒计时方式,比赛开始时启动计时,直至计时到零为止。
其次,为了配合计时器和计分器校正调整时间和比分,我们特定在本设计中设立了7个按键,用于设置,调整时间,启动,调整分数和暂停等功能。
采用单片机控制是这个系统按键操作使用简洁,LED显示,安装方便。
主控芯片采用AT89S52单片机,采用C语言进行编程,编程后利用KeiluVision3来进行编译,再生成的HEX文件装入芯片中,采用proteus软件来仿真,检验功能是否能够正常实现。
仿真成功后,焊接硬件电路,通过ISP下载器将hex文件烧制到单片机。
关键词:
计时,计分;LED;AT89C52
1.绪论
1.1技术概述
体育比赛计时计分系统是对体育比赛过程中所产生的时间,比分等数据进行快速采集记录,加工处理,传递利用的信息系统。
根据不同运动项目的不同比赛规则要求,体育比赛的计时计分系统包括测量类,评分类,命中类,制胜类得分类等多种类型。
篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统。
篮球比赛的计时计分系统由计时器,计分器等多种电子设备组成,同时,根据目前高水平篮球比赛要求,完善的篮球比赛计时计分系统设备应能够与现场成绩处理,现场大屏幕,电视转播车等多种设备相联,以便实现高比赛现场感,表演娱乐观众等功能目标。
由于单片机的集成度高,功能强,通用性好,特别是它具有体积小,重量轻,能耗低,价格便宜,可靠性高,抗干扰能力强和使用方便等独特的优点,使单片机迅速得到了推广应用,目前已经成为测量控制应用系统中的优选机种和新电子产品的关键部位。
世界各大电气厂家,测控技术企业,机电行业,竞相把单片机应用于产品更新,作为实现数字化,智能化的核心部件。
篮球计时计分器就是以单片机为核心的计时计分系统,由计时器,计分器,综合控制器和24秒控制器等组成。
1.2本课题的背景和意义
本设计是基于AT89S52单片机的篮球计时计分器,利用7段共阴LED作为显示器件。
在此设计中共接入了1个四位一体7段共阴LED显示器,2个两位一体7段共阴LED显示器,前者用来记录赛程时间,其中2位用于显示分钟,2位用于显示秒钟,后者用于记录甲乙队的分数,每队2个LED显示器显示范围可达到0~99分。
赛程计时采用倒计时方式,比赛开始时启动计时,直至计时到零为止。
其次,为了配合计时器和计分器校正调整时间和比分,我们特定在本设计中设立了7个按键,用于设置,调整时间,启动,调整分数和暂停等功能。
采用单片机控制是这个系统按键操作使用简洁,LED显示,安装方便。
任务:
设计一个用于赛场的篮球计时计分器。
要求:
1、能记录整个赛程的比赛时间,并能随时实现暂停。
2、能随时刷新甲、乙两队在整个过程中的比分。
3、中场交换比赛场地时,能自动交换甲、乙两队比分的位置。
4、比赛中场和结束时,能发出报警声。
5、通过指示灯指示上下半场。
6、当比赛时间需要回倒时,能通过按键实现回表。
7、加分有误时可通过按键实现减分调整。
课程设计使我们进一步熟悉和掌握了单片机的内部结构和工作原理,了解了单片机应用系统设计的基本方法和步骤,掌握了单片机仿真软件Proteus的使用方法,键盘和显示器在的单片机控制系统中的应用以及撰写课程设计报告的方法。
此次设计很好的将书本上的理论知识和实践有机的联系了起来,是我们对理论知识有了更进一步的掌握,锻炼了我们的动手能力,同时也让我们懂得了理论与实际相结合的意义。
为以后的工作和学习提供了宝贵的经验。
2.系统设计简介
2.1系统总体方案设计
篮球计时计分器主要包括单片机控制系统、计时显示模块、计分显示模块、定时报警,按键控制键盘模块。
通过这几个模块的协调工作就可以完成相应的计时计分控制和显示功能。
这四个模块的相互连接如下图1所示:
图1模块连接图
本设计是基于AT89S52单片机的篮球计时计分器,利用7段共阴LED作为显示器件。
在此设计中共接入了1个四位一体7段共阴LED显示器,2个两位一体7段共阴LED显示器,前者用来记录赛程时间,其中2位用于显示分钟,2位用于显示秒钟,后者用于记录甲乙队的分数,每队2个LED显示器显示范围可达到0~99分。
赛程计时采用倒计时方式,比赛开始时启动计时,直至计时到零为止。
2.2硬件电路设计
单片机AT89S52简介
AT89S52是一个低功耗,高性能CMOS8位单片机,片内含8kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,功能强大的微型计算机的AT89S52可为许多嵌入式控制应用系统提供高性价比的解决方案。
AT89S52单片机引脚图具有如下特点:
40个引脚,8kBytesFlash片内程序存储器,256bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器.如图2所示:
图2AT89S52单片机引脚图
此模块电路包括时钟电路模块,复位电路模块及报警显示模块。
2.2.1时钟电路模块
时钟电路在单片机系统中起着非常重要的作用,是保证系统正常工作的基础。
在一个单片机应用系统中,时钟是保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢。
为达到振荡周期是12MHZ的要求,这里要采用12MHZ的晶振,另外有两个22P的电容,两晶振引脚分别连到XTAL1和XTAL2振荡脉冲输入引脚。
具体连接图如图3所示:
图3晶振电路
2.2.2复位电路模块
复位是单片微机的初始化操作,其主要功能是把PC初始化为0000H,使单片微机从0000H单元开始执行程序。
除进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,可以按复位键以重新启动,也可以通过监视定时器来强迫复位。
RST引脚是复位信号的输入端。
复位电路在这里采用的是上电+按钮复位电路形式,具体连接电路如图4所示:
图4复位电路
2.2.3显示模块
本设计采用共阴极数码显示器,通常,共阴极接低电平(一般接地),其它管脚接段驱动电路输出端。
当某段驱动电路的输出端为高电平时,该端所连接的字符导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。
同样,要求段驱动电路能提供额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。
本次设计在显示模块用到的是一个4位一体和2个两位一体共阴极数码管,共有8个代码输入口和8个位选输入口,采用排阻提供上拉电流数码管,以保证有足够大的电流点亮数码管,采用动态驱动,使各位数码管逐个轮流受控显示,这就是动态驱动,由于扫描速度极快,显示效果与静态驱动相同,其具体图形如下图5图6所示:
图5计时显示
图6计分显示
2.2.4报警模块
蜂鸣器通过一NPN三极管进行驱动,触发信号有基极引入。
如图7所示:
图7蜂鸣器设计部分
2.2.5总硬件电路设计
本设计的总硬件电路设计图如图8所示:
图8总体硬件设计
3设计语言及软件介绍
3.1C语言介绍
C语言的发展过程C语言是在70年代初问世的。
一九七八年由美国电话电报公司(AT&T)贝尔实验室正式发表了C语言。
同时由B.W.Kernighan和D.M.Ritchit合著了著名的“THECPROGRAMMINGLANGUAGE”一书。
通常简称为《K&R》,也有人称之为《K&R》标准。
但是,在《K&R》中并没有定义一个完整的标准C语言,后来由美国国家标准学会在此基础上制定了一个C语言标准,于一九八三年发表。
通常称之为ANSIC。
当代最优秀的程序设计语言早期的C语言主要是用于UNIX系统。
由于C语言的强大功能和各方面的优点逐渐为人们认识,到了八十年代,C开始进入其它操作系统,并很快在各类大、中、小和微型计算机上得到了广泛的使用。
成为当代最优秀的程序设计语言之一。
C语言的特点C语言是一种结构化语言。
它层次清晰,便于按模块化方式组织程序,易于调试和维护。
C语言的表现能力和处理能力极强。
它不仅具有丰富的运算符和数据类型,便于实现各类复杂的数据结构。
它还可以直接访问内存的物理地址,进行位(bit)一级的操作。
由于C语言实现了对硬件的编程操作,因此C语言集高级语言和低级语言的功能于一体。
既可用于系统软件的开发,也适合于应用软件的开发。
此外,C语言还具有效率高,可移植性强等特点。
因此广泛地移植到了各类各型计算机上,从而形成了多种版本的C语言。
C语言版本目前最流行的C语言有以下几种:
·MicrosoftC或称MSC·BorlandTurboC或称TurboC·AT&TC这些C语言版本不仅实现了ANSIC标准,而且在此基础上各自作了一些扩充,使之更加方便、完美。
面向对象的程序设计语言在C的基础上,一九八三年又由贝尔实验室的BjarneStrou-strup推出了C++。
C++进一步扩充和完善了C语言,成为一种面向对象的程序设计语言。
C++目前流行的最新版本是BorlandC++4.5,SymantecC++6.1,和MicrosoftVisualC++2.0。
C++提出了一些更为深入的概念,它所支持的这些面向对象的概念容易将问题空间直接地映射到程序空间,为程序员提供了一种与传统结构程序设计不同的思维方式和编程方法。
因而也增加了整个语言的复杂性,掌握起来有一定难度。
C和C++但是,C是C++的基础,C++语言和C语言在很多方面是兼容的。
因此,掌握了C语言,再进一步学习C++就能以一种熟悉的语法来学习面向对象的语言,从而达到事半功倍的目的。
C源程序的结构特点为了说明C语言源程序结构的特点,先看以下几个程序。
这几个程序由简到难,表现了C语言源程序在组成结构上的特点。
虽然有关内容还未介绍,但可从这些例子中了解到组成一个C源程序的基本部分和书写格式。
main(){printf("C语言世界,您好!
\n");}main是主函数的函数名,表示这是一个主函数。
每一个C源程序都必须有,且只能有一个主函数(main函数)。
函数调用语句,printf函数的功能是把要输出的内容送到显示器去显示。
printf函数是一个由系统定义的标准函数,可在程序中直接调用。
3.2PROTEUS简介
Proteus是英国Labcenter公司开发的电路分析与实物仿真软件。
它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是:
①实现了单片机仿真和SPICE电路仿真相结合。
具有模拟电路仿真、数字电路
仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。
②支持主流单片机系统的仿真。
目前支持的单片机类型有:
ARM7(LPC21xx)、8051/52系列、AVR系列、PIC10/12/16/18系列、HC11系列以及多种外围芯片。
③提供软件调试功能。
在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如KeilC51uVision2、MPLAB等软件。
④具有强大的原理图绘制功能。
总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。
在设计程序之前,我们首先要对单片机应用系统预完成的任务进行深入的分析,明确系统的设计任务、功能要求和技术指标。
其次,要对系统的硬件资源和工作环境进行分析。
这是单片机应用系统程序设计的基础和条件。
4软件设计
4.1概述
本次单片机课程设计软件设计部分采用模块化程序设计,程序部分由主程序、T0中断程序、扫描显示子程序、计时加(减)1秒的子程序、暂停子程序、快表和回表子程序、延时子程序等组成.其主程序流程图如图9所示:
图9主程序流程图
扫描刷新显示子程序流程图如图10所示:
图10扫描刷新显示子程序流程图
4.2软件设计具体过程
软件设计部分采用模块化程序设计,用C语言编写。
Keil是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。
KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。
另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。
在开发大型软件时更能体现高级语言的优势。
程序部分由主程序、T0中断程序、扫描显示子程序、计时加(减)1秒的子程序、暂停子程序、快表和回表子程序、延时子程序等组成。
4.2.1延时模块设计
voiddelay(intt)调用该子程序能实现延时功能
{通过参数t,可以调成延时时间
while(t--)
{
unsignedinti;设置变量i的变化范围,能调整延时的单位时间
for(i=0;i<200;i++);长度,i越小,延时的单位时间越短,精度越高
}
}
4.2.2数码管动态刷新显示程序
voiddisplay(inti,intj,intx,inty)变量i,j,x,y分别为分,秒,A分数,B分数
{
if(jie==1&&bujin!
=2)当中间变量jie==1时,为上半场,此时对P1赋值
P1=0xbf;使P1=0xbf,即P1=10111111B,上半场指示灯对应点亮
P2=0xfe;数码管动态刷新显示程序P2=11111110,i为分钟
P0=seg[i%100/10];P2=0xfe,所以刷新显示时间的分钟十位,调用延时程序,
delay
(1);延时数码管的点亮
P2=0xff;
P0=0;
P2=0xfd;同理,动态刷新时分钟个位并延时点亮
P0=seg[i%10];
delay
(1);
P2=0xff;
P0=0;
P2=0xfb;同理,动态刷新时秒钟十位并延时点亮
P0=seg[j%100/10];
delay
(1);
P0=0;
P2=0xff;
P2=0xf7;同理,动态刷新时秒钟个位并延时点亮
P0=seg[j%10];
delay
(1);
P0=0;
P2=0xff;
P2=0xef;同理,动态刷新A分数十位并延时点亮
P0=seg[x%100/10];
delay
(1);
P2=0xff;
P0=0;
P2=0xdf;同理,动态刷新A分数个位并延时点亮
P0=seg[x%10];
delay
(1);
P2=0xff;
P0=0;
P2=0xbf;同理,动态刷新B分数十位并延时点亮
P0=seg[y%100/10];
delay
(1);
P0=0;
P2=0xff;
P2=0x7f;同理,动态刷新B分数十位并延时点亮
P0=seg[y%10];
delay
(1);
P0=0;
P2=0xff;
}
本设计中各个数码管采用动态驱动,使各位数码管逐个轮流受控显示,由于扫描速度极快(本实验中大约每20毫秒刷新一次),所以显示效果与静态驱动相同。
4.2.3T0中断程序
voidt0(void)interrupt1本设计调用定时器T0,计时单位为一秒
{
TH0=0xb1;对定时器T0送入计数初值,由于TH0=0xb;
TL0=0x10;TL0=0x10故定时器定时为20毫秒,即每
if(n==0)20毫秒调用一次voidt0(void)interrupt1
{
n=60;
m--;
}
i++;
if(i==50)
{令i值为5050*20毫秒=1秒,来实现计时
n--;单位为一秒
i=0;
}
display(m,n-1,x,y);调用动态刷新显示程序,即每20毫秒刷新一
}次数码管
4.2.4加分子程序
voidkeyjiafen1()
{当检测到RXD按键按下时,调用延时子程序if(RXD==0)实现消除按键抖动功能,即,当
delay
(1);,
{检测到按键按下时候,延时,按键仍按下,说明
if(RXD==0)按键确实按下,非抖动,A对应加分
{
while(RXD==0);
x++;
}
}
if(TXD==0)检测TXD加分按键时候按下,B加分
{
delay
(1);
if(TXD==0)
{
while(TXD==0);
y++;
}
}
}
4.2.5减分子程序
voidkeyjianfen1()减分按键检测子程序,其基本算法及功能与加分相同
{
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调整时间子程序
调整时间子程序,使时间快速倒退或快进,实现回表功能,同时回表之后能自动暂停,程序如下:
voidkey2()
{
if(INT0==0)
{
delay(10);
if(INT0==0)回表子程序,检测到INT0按下时,使时间回倒
{
chuzanting==0;chuzanting==0;zanting=1;为附加变量,当回表按键
zanting=1;松开时,表暂停,这两个变量用来调用暂停
n++;
if(n==60)
{
m++;
n=1;
}
}
}
if(INT1==0)快表子程序,检测到INT1按下时,使倒计加快,
{通常情况下与回表子程序配合使用,即当回表
回过的时候,按此键调整时间
delay(10);chuzanting==0;zanting=1;作用同上
if(INT1==0)
{
chuzanting==0;
zanting=1;
n--;
}
}
}
voidshijian()该程序使回表和快表按键松开时候能自动暂停
{
if(zanting==1&&INT0==1&&INT1==1&&chuzanting==0)
{
EA=0;zanting==1&&INT0==1&&INT1==1&&chuzanting==0作用为
zanting=0;当按键松开的时候,调用暂停程序条件
huzanting=0;zanting=0;chuzanting=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半场交换比分子程序
voidkey3()
{
inttemp;定义中间变量temp,检测到有按键按下时候
if(zidong==1&&jie==1)通过temp交换甲队,乙队两队比赛分数
{
temp=x;zidong==1&&jie==1是判断半场的条件
y=temp;
display(m,n,x,y);刷新数码管
zidong=0;
bujin=0;
}
}
4.2.8比赛暂停子程序
voidkey4()
{
if(P1_0==0)检测到暂停按键按下时候,令EA=0关闭中断
{
delay
(1);同通过死循环程序while
(1),不断刷新数码管
if(P1_0==0)当暂停键再次按下时候,开中断,以使比赛时间
{继续倒计时,由于在暂停的时候,程序处于死循
while(P1_0==0);
EA=0;无法回到主程序,暂停时,除了暂停键
while
(1)其他按键按下均无效
{
display(m,n,x,y);
if(P1_0==0)
{当暂停键再次按下时候,EA=1开中断,计时数码管
delay
(1);继续倒计时,同时通过break语句,跳出死循环
if(P1_0==0)
{
while(P1_0==0);
EA=1;
break;
}
}
}
}
}
}
4.2.9中场指示灯程序
voidover()
{
if((m==0)&&(n==0))当m,n均为0的时候,通过变量jie的值判断比赛是否结束
{
if(jie>1)如果jie>1,说明半场到了,比赛没有结束,
{令m=2,n=0,关中断,再次按下暂停键时候继续倒计时
m=2;同是T1=1;delay(400);delay(400);,是蜂鸣器
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;
}
}
}
jie--;
}
if(jie==1&&bujin==2)如果jie==1&&bujin==2,说明比赛结束了,{关闭中断,比赛秒表不再走动,同时不短刷新数码管,EA=0;
m=0;
n=0;
T1=1;全场比赛结束蜂鸣器开始报警
delay(400);
T1=0;
P1=0x3f;P
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 篮球 记分牌 设计