基于AT89C51单片机的篮球赛计时计分器设计.docx
《基于AT89C51单片机的篮球赛计时计分器设计.docx》由会员分享,可在线阅读,更多相关《基于AT89C51单片机的篮球赛计时计分器设计.docx(37页珍藏版)》请在冰豆网上搜索。
![基于AT89C51单片机的篮球赛计时计分器设计.docx](https://file1.bdocx.com/fileroot1/2023-5/29/57b38df2-2439-4acb-bcd2-cd6f109e2cd9/57b38df2-2439-4acb-bcd2-cd6f109e2cd91.gif)
基于AT89C51单片机的篮球赛计时计分器设计
新疆农业大学科学技术学院
本科生毕业设计(论文)
题目
基于单片机的篮球赛计分计时软件系统
班级
农电082
姓名
XXX
学号085XXXX
时间20XX年XX月
新疆农业大学科学技术学院
基于单片机的篮球赛计分计时软件系统
作者:
XXX指导教师:
XXX
摘要:
篮球比赛计时计分器是为了解决篮球比赛时计分与计时准确的问题。
在此设计中共接入了1个四位一体7段共阴LED数码管,2个两位一体7段共阴LED数码管,前者用来记录赛程时间,后者用于记录甲乙队的分数,赛程计时采用倒计时方式,比赛开始时启动计时,直至计时到零为止。
本设计采用C语言进行编程,编程后利用KeiluVision来进行编译,再生成的HEX文件装入芯片中,采用proteus软件来仿真,检验功能是否能够正常实现。
并且详细地介绍了仿真过程中遇到的问题和问题怎么得到解决。
关键词:
计时计分器单片机
Basedonthesinglechipmicrocomputersystemoftimingandscoringinbasketballmatch
Author:
LiYulongTutor:
LiYongwei
Abstract:
Timebasketballscoringdeviceistosolveabasketballgamewhenscoringandtimingaccuracyissues.Inthisdesigntheaccess1fourinoneofatotalof7vaginaldigitaltubeLED,2oftwoinoneofatotalof7negativeLEDdigitaltube,theformerisusedtorecordtheracetime,thelatterisusedforrecordingtheBteamscores,scheduleatimewiththecountdown,matchtostartthebeginningoftime,untilthetimetozero.ThedesignusingClanguageprogramming,programmingwithKeiluVisiontocompile,generatingHEXfilesintochip,usingProteusSoftwaretosimulation,testingwhetherthenormalimplementationoffunction.Simulationanddescribesindetailtheproblemsmetintheprocessandtheproblemhowtobesolved.
Keyword:
TimescoringdeviceSCM
1引言
工程技术的电子化、集成化和系统化促进了电子工程技术的发展,同时也促进了电子工程技术在社会各行业中的广泛应用。
随着单片机在各个领域的广泛应用,许多单片机作控制的球赛及时计分系统也就应运而生,例如用单片机控制LCD液晶显示器计时计分器,用单片机控制LED七段显示器计时计分等[1]。
同时单片机在此领域的广泛应运,也大大提高了比赛中计时计分的稳定性和准确性。
设计意义
篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时计分系统是一种得分类型的系统。
篮球比赛的计时计分系统由计时器,计分器等多种电子设备组成,同时,根据目前高水平篮球比赛要求,完善的篮球比赛计时计分系统设备应能够与现场成绩处理,现场大屏幕,电视转播车等多种设备相联,以便实现高比赛现场感,表演娱乐观众等功能目标。
由于单片机的集成度高,功能强,通用性好,特别是它具有体积小,重量轻,能耗低,价格便宜,可靠性高,抗干扰能力强和使用方便等独特的优点,使单片机迅速得到了推广应用。
从而基于单片机的球赛计时计分系统同样具有使用便捷,计时计分准确等特点。
必然是比赛中的主要计时计分工具。
设计任务以及要求
任务:
设计一个用于赛场的篮球计时计分软件系统。
要求:
1、能记录整个赛程的比赛时间,并能随时实现暂停。
2、能随时更新甲、乙两队在整个过程中的比分。
3、中场交换比赛场地时,能够交换甲、乙两队比分的位置。
4、比赛结束时,能发出报警声。
5、能够实现对时间的调整。
6、加分有误时可通过按键实现减分调整。
7、计时延时可通过回表按键来实现时间的调整。
2总体方案设计
系统框图
篮球计时计分器主要包括单片机控制系统、计时显示模块、计分显示模块、定时报警,按键控制键盘模块。
通过这几个模块的协调工作就可以完成相应的计时计分控制和显示功能。
这四个模块的相互连接如图2-1。
图2-1系统框图
软件总体设计
软件设计主要分为3个部分:
信息输入、信息处理、显示输出。
主要函数包括:
显示函数,按键获取函数,按键处理函数,进制转换函数。
信息输入时采用8按键来实现,所以需要检测键盘有无按键的子程序;信息处理需要对用户通过键盘输入的不同信息进行辨别并执行相应的处理。
3元器件的简单介绍
MCS-51系列单片机
单片机的简介
本课题中用到的芯片就是AT系列中的AT89C52单片机芯片。
AT89C52是一个低电压,高性能CMOS8位单片机,片内含4kbytes的可反复擦写的Flash只读程序存储器和128bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,内置功能强大的微型计算机的AT89C52提供了高性价比的解决方案[2]。
AT89C52具有PDIP、PQFP/TQFP及PLCC等三种封装形式,以适应不同产品的需求[3]。
它是一个低功耗高性能单片机,40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口,AT89C52可以按照常规方法进行编程,也可以在线编程。
其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
如图所示,图3-1为AT89C52单片机基本构造。
图3-1AT89C52引脚图
主要特性
AT89C52的主要特性如下表所示[4]:
·兼容MCS—51指令系统
·4k可反复擦写(>1000次)FlashROM
·32个双向I/O口
·可编程UARL通道
·两个16位可编程定时/计数器
·全静态操作0-24MHz
·1个串行中断
·128x8bit内部RAM
·两个外部中断源
·共6个中断源
·可直接驱动LED
·3级加密位
·低功耗空闲和掉电模式
·软件设置睡眠和唤醒功能
表3-1AT89C52主要功能描述
显示器及其接口
数码管显示
显示器是最常用的输出设备,其种类繁多,但在单片机系统设计中最常用的是发光二极管显示器(LED)和液晶显示器(LCD)两种。
由于这两种显示器结构简单,价格便宜,接口容易实现,因而得到广泛的应用[5]。
发光二极管LED,组成的显示屏,每个点都是一个或多个发光二极管,通过控制电路控制二极管的亮与灭来控制点的发光,从而使整个大屏幕显示图案。
液晶显示器LCD最常见的就是TFT类型的,它是由光源,液晶光栅,和控制芯片组成,他的光源是常亮的白色强光,当光线通过液晶光栅(液晶屏)的时候,通过电压改变液晶颗粒滤光方向,从而改变每个点的颜色和强度来显示图案。
液晶显示器分很多种类,按显示方式可分为段式,行点阵式和全点阵式。
段式与数码管类似,行点阵式一般是英文字符,全点阵式可显示任何信息,如汉字、图形、图表等。
数码管的结构与原理
图3-2为典型的数码管:
图3-27段LED数码管
如上图,LED显示器又称为数码管,LED显示器由8个发光二极管组成。
中7个长条形的发光管排列成“日”字形,另一个点形状的发光管,在显示器的右下角作为显示小数点用,它能显示各种数字及部份英文字母。
LED显示器有两种不同的形式:
一种是8个发光二极管的阳极都连在一起的,称之为共阳极LED显示器;另一种是8个发光二极管的阴极都连在一起的,称之为共阴极LED显示器。
如图3-3所示。
图3-3共阴与共阳极LED显示器
LED显示器可分为共阳和共阴两种结构,如上图所示。
图上为共阴结构。
即把8个发光二极管阴极连在一起。
这时如果需要点亮a到g中的任何一盏灯,只需要在相应的端口输入高电平即可;输入低电平则截止。
比如我们现在要显示数字“3”,则只要在对应的a、b、c、d、g段送入高电平,在其他端送入低电平即可,点亮为“3”。
共阴和共阳结构的LED显示器各笔划段名和安排位置是相同的。
当二极管导通时,相应的笔划段发亮,由发亮的笔划段组合而显示的各种字符。
在本设计中我采用的共阴级数码管。
蜂鸣器
蜂鸣器的分类
蜂鸣器有两类3大品种。
一类是压电式,一类是电磁式,电磁式又有两大品种,铁振膜式和动圈式,二者原理一样只是结构不同。
所有蜂鸣器都有两种类型:
纯蜂鸣器和带驱动的蜂鸣器,蜂鸣器都是用音频信号驱动的,都是交流驱动[6]。
蜂鸣器的工作原理
本次设计采用的是电磁式蜂鸣器作为报警器。
电磁式蜂鸣器由振荡器、电磁线圈、磁铁、震动膜片以及外壳等组成。
接通电源后,振荡器产生的音频信号通过电磁线圈,使得电磁线圈产生了一个磁场。
振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。
74LS138工作原理
74LS138为3线-8线译码器,共有54/74S138和54/74LS138两种线路结构型式,其74LS138工作原理如下:
当一个选通端(E1)为高电平,另两个选通端((/E2))和/(E3))为低电平时,可将地址端(A0、A1、A2)的二进制编码在Y0至Y7对应的输出端以低电平译出。
比如:
A2A1A0=110时,则Y6输出端输出低电平信号。
如图3-4。
图3-474LS138
译码器74LS138的功能如下表3-2。
表3-274LS功能表
4软件编程及仿真
软件总体设计方案
在设计程序之前,我首先对单片机应用系统预完成的任务进行深入的分析,明确系统的设计任务、功能要求和技术指标。
其次,要对系统的硬件资源和工作环境进行分析。
这是单片机应用系统程序设计的基础和条件。
本次毕业设计的软件部分采用模块化设计,以倒计时为主线,甲乙两队比赛成绩的加减以及回表暂停等为计时过程中的可发生事件。
依照此逻辑,我做了以下流程图。
其流程图如图4-1所示。
图4-1主程序流程图
keilC的简介以及程序的编写
KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。
另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。
在开发大型软件时更能体现高级语言的优势[7]。
C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。
用过汇编语言后再使用C来开发,体会更加深刻。
KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面操作。
工程的建立
首先安装KeiluVision我用的是KeiluVision4,建立自己需要的目标文件夹,其文件名为‘计分计时设计程序部分’(空文件夹),然后打开软件进入Keil的主界面,点击工程新建工程。
如下图4-2所示。
图4-2
点击新建工程后会弹出下图的对话框,在文件名下拉框中选择先前建立好的目标文件夹,双击打开目标文件夹,随后设置文件名为‘程序’并保存。
如图4-3。
图4-3
保存后会自动出现选择单片的对话框,我的设计是用AT89C52。
在Atmel中选择AT89C52点击确定后在‘文件’中选择‘新建’就可以进行程序的编写了。
程序写完后保存在之前建立好的目标文件夹里,一般的keil可以用汇编和C语言来进行编程,如果是用汇编的话,保存文件的后缀应为而C语言则为我用的是C语言保存文件名为‘程序.c’。
如图4-4。
图4-4
程序代码
主程序主要包括、T0中断程序、计时加的子程序、暂停子程序、延时子程序等11个子程序组成。
在这里主要说明两方加减分子程序,暂停子程序,回表子程序,10秒倒计时子程序和两方交换比分子程序。
(1)甲方分数加分子程序
在程序中jf是甲方的分数则jup和jdown分别为甲方分数加1和甲方分数减1。
同样的乙方也是上术的定义方式。
另外jup2jup3分别为甲方分数加2分和加3分的按键定义。
同理乙方也照此方式分别为yupyup2yup3和ydown。
voidj_up()加1分
{
if(jup==0)
{
delay(5);
while(jup==0);
jf++;
}
}
voidj_up2()加2分
{
if(jup2==0)
{
delay(5);
while(jup2==0);
jf+=2;
}
}
voidj_up3()加3分
{
if(jup3==0)
{
delay(5);
while(jup3==0);
jf+=3;
}
}
(2)甲方分数减1子程序
voidj_down()
{
if(jdown==0)
{
delay(5);
while(jdown==0);
jf--;
}
}
(3)乙方分数加分子程序
voidy_up()乙方加1分
{
if(yup==0)
{
delay(5);
while(yup==0);
yf++;
}
}
voidy_up2()乙方加2分
{
if(yup2==0)
{
delay(5);
while(yup2==0);
yf+=2;
}
}
voidy_up3()乙方加3分
{
if(yup3==0)
{
delay(5);
while(yup3==0);
yf+=3;
}
}
(4)乙方分数减1子程序
voidy_down()
{
if(ydown==0)
{
delay(5);
while(ydown==0);
yf--;
}
}
(5)比赛暂停子程序
暂停的按键是zanting当判断暂停按键按下则计时停止,如果暂停按键再次按下则计时继续进行。
voidstop()
{
if(zanting==0)
{
delay(5);
while(zanting==0);
TR0=~TR0;
baojing_enable=~baojing_enable;
}
}
(6)调节比赛时间以及回表子程序
先说明下回表的意思,在篮球比赛中会有比赛时间计时超秒的情况出现,例如当比赛需要暂停时,没有及时的暂停比赛时间,此时计时器回多流逝几秒的时间,这个时候就需要将计时器的秒部分往回调整。
程序中的fen即为分部的调整按键,miao则为秒部的调整按键,huibiao为回表加秒的调整按键。
voidtsj()
{
if(fen==0)
{
delay(5);
while(fen==0);
temp=temp-100;
}
if(miao==0)
{
delay(5);
while(miao==0);
temp--;
}
}
回表程序
voidhui()
{
if(huibiao==0)
{
delay(5);
while(huibiao==0);
temp++;
}
}
(7)倒数10秒报警提示子程序
当比赛结束时有10秒倒计时的提示,利用if语句进行逻辑判断,当时间显示小于等于10时开始报警提示
voidbaojing()
{
if(temp<=10&&temp>0&&baojing_enable==1)
{
sound=0;
led=1;
delay(20);
display();
led=0;
sound=1;
delay(20);
display();
}
}
(8)交换比分子程序
篮球赛分小节来进行的,当小节结束,两队要交换场地,而计分器是固定的,交换两队比分的功能方便了比赛的继续进行。
当换份的按键按下,两队比分交换,并且将比赛时间重新设置为每节的总时间。
voidhuan_fen()
{
if(huanfen==0)
{
delay(5);
while(huanfen==0);
sub=jf;
jf=yf;
yf=sub;
temp=1000;
}
}
程序写好后,对程序进行了编译、翻译,在工程菜单栏里为工程设置选项中选择了输出HEX文件,生成HEX以便输入单片机进行仿真。
图示如图4-5。
图4-5HEX文件的生成
Protues的简介以及仿真
Protues软件是英国Labcenterelectronics公司出版的EDA工具软件[8]。
它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。
它是目前最好的仿真单片机及外围器件的工具。
虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。
Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计[9]。
是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC/DsPIC33、AVR、ARM、8086和MSP430等,2010年即将增加Cortex和DSP系列处理器,并持续增加其他系列处理器模型。
在编译方面,它也支持IAR、Keil和MPLAB等多种编译。
元器件的选择
在protues仿真本设计需要AT89C52,74LS138译码器,4位7段数码管,2为7段数码管,数码管均为共阴极。
12MHz晶振,电阻、排阻,LED等。
在protues工作界面中选择‘元件选择’在关键词中输入AT89C52选择我需要的单片机AT89C52,其他元器件与此方法一样分别找到了我需要的器件。
示例图如下4-6。
图4-6元器件的查找
Protues仿真
时间及比分显示模块
按照任务要求,我用一个4位7段共阴级数码管来显示时间,两个2位7段共阴级数码管分别显示甲乙两队的比分。
用一块74ls138译码器来驱动数码管。
13个按键来实现数据的出入以及时间的暂停等。
显示模块如图4-7。
图4-7显示模块
时钟电路模块
时钟电路在单片机系统中起着非常重要的作用,是保证系统正常工作的基础。
在一个单片机应用系统中,时钟是保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢。
为达到振荡周期是12MHZ的要求,这里要采用12MHZ的晶振,另外有两个33P的电容,两晶振引脚分别连到XTAL1和XTAL2振荡脉冲输入引脚。
具体连接图如图4-8。
图4-8时钟电路
复位电路模块
复位是单片微机的初始化操作,其主要功能是把PC初始化为0000H,使单片微机从0000H单元开始执行程序。
除进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,可以按复位键以重新启动,也可以通过监视定时器来强迫复位。
RST引脚是复位信号的输入端。
复位电路在这里采用的是上电+按钮复位电路形式,具体连接电路如图4-9。
图4-9复位电路
终场蜂鸣器提示电路模块
终场提示是在比赛将要结束的最后10秒,蜂鸣器发出报警提示音来提示比赛结束。
蜂鸣器通过一NPN三极管进行驱动,如图触发信号有基极引入。
具体连接图如下4-10。
图4-10蜂鸣器报警电路
按键模块
我采用的是13按键的设计,按键可以实现甲乙两队比赛成绩的加减时间的局部调整比赛时间的暂停等。
按键可以实现甲乙两方比分的加减,甲方加分按键设立了3个分别可以实现加1、2、3。
分减分按键只设立了一个,最初本想同加分一样设立3个,但据比赛是的具体情况,设立一个减1分的按键即可。
同样乙方的加减分按键的设立同甲方相同。
按键模块如图4-11。
图4-11按键模块
总接线图
最终的总接线图如图4-12。
图4-12总接线图
电路图全部画好后,我将之前写好的程序(生存的HEX文件)输入到AT89C52当中,进行仿真,仿真成功。
仿真结果如图4-13。
图4-13仿真图
5结束语
通过这次单片机的毕业设计,我在理论的基础上更深刻的掌握了单片机的深层内容及实际生活中的应用,实训锻炼了自己动手能力和思维能力,还有在软件方面的编程能力,让我受益匪浅,同时也暴露出一些平时学习上的问题,让我深刻反思。
这些问题的发现将为我以后的学习和工作找明道路,查漏补缺为进一步学习作好准备。
通过实训,让我更熟悉掌握了KeiluVision4,proteusISIS这些应用程序的运用,让我懂得了如何编写一些简单的程序,学会了如何制作单片机应用程序,还有焊接和程序下载,。
但在中间暴露出很多问题:
对平时上课讲的理论知识没有完全掌握消化,到了实际操作中还得请教同学,在焊接中焊接的基本工夫掌握不到家,手上工夫还是很欠缺的,使得电路板不是很美观。
这些问题的发现,有助于提高我在以后的工作和学习中对此类问题的认识,确保不在同一问题上再次犯错。
严谨求实、踏实务实,是我这次实训的深刻总结。
毕业设计期间翻阅了很多书,也上了很多网站去寻找自己需要的资料。
这种寻找有很强的目的性,只是为了自己选定的课题内容而查阅,所以除了自己课题以外的其他方面几乎还是一无所知。
这让我深刻的认识到了自己专业知识的贫乏。
我对单片机的学习不会因为毕业设计的结束而结束,在接触的众多资料里,做设计只是走马观花般的点到。
通过单片机毕业设计,我加深了对单片机理论的理解,学会了怎样将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的不畏困难的挑战精神,从而不断地战胜自己,超越自己,我在这一设计过程中,学会了坚持不懈,不轻易言弃。
设计过程,也好比是我们人类成长的历程,常有一些不如意,也许这就是在对我们提出了挑战,勇敢过,也战胜了,胜利的钟声也就一定会为我们而敲响。
参考文献:
[1]徐惠民,安德宁.单片微型计算机原理、接口及应用.第二版.北京:
北京邮电大学出版社.2000
[2]王福瑞.单片微机测控系统设计大全[M].北京:
北京航空航天大学出版社,1998
[3]彭为,黄科,雷道仲.单片机典型系统设计实例精讲.北京:
电子工业出版社.2006
[4]孙俊逸,盛秋林,张静.单片机原理及应用:
清华大学出版社.2005
[5]何立民.MSC--51系列单片机应用系统设计:
北京航空航天大学出版社.1993
[6