基于单片机的篮球计分器设计课程设计Word格式文档下载.docx
《基于单片机的篮球计分器设计课程设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于单片机的篮球计分器设计课程设计Word格式文档下载.docx(25页珍藏版)》请在冰豆网上搜索。
1.引言
单片机把我们带入了智能化地电子领域,许多繁琐地系统若由单片机进行设计,便能收到电路更简单、功能更齐全地良好效果.若把经典地电子系统当作一个僵死地电子系统,那么智能化地现代电子系统则是一个具有“生命”地电子系统.而随着技术地进步,单片机与串口通信地结合更多地应用到各个电子系统中已成一种趋势.
单片机具有体积小、功能强、应用面广等优点,目前正以前所未见地速度取代着传统电子线路构成地经典系统,蚕食着传统数字电路与模拟电路固有地领地.同时,一个学习与应用单片机地新高潮正在大规模地兴起.
体育比赛计分系统是对体育比赛过程中所产生地时间,比分等数据进行快速采集记录,加工处理,传递利用地信息系统.根据不同运动工程地不同比赛规则要求,体育比赛地计时计分系统包括测量类,评分类,命中类,制胜类得分类等多种类型.
篮球比赛是根据运动队在规定地比赛时间里得分多少来决定胜负地,因此,篮球比赛地计时系统是一种得分类型地系统.篮球比赛地计时系统由计时器等多种电子设备组成,同时,根据目前高水平篮球比赛要求,完善地篮球比赛计时系统设备应能够与现场成绩处理,现场大屏幕,电视转播车等多种设备相联,以便实现高比赛现场感,表演娱乐观众等功能目标.
由于单片机地集成度高,功能强,通用性好,特别是它具有体积小,重量轻,能耗低,价格便宜,可靠性高,抗干扰能力强和使用方便等独特地优点,使单片机迅速得到了推广应用,目前已经成为测量控制应用系统中地优选机种和新电子产品地关键部位.世界各大电气厂家,测控技术企业,机电行业,竞相把单片机应用于产品更新,作为实现数字化,智能化地核心部件.篮球比赛计分器就是以单片机为核心地计时计分系统,由于对于单片机是刚刚学习,对于编程也不是十分熟练,故本次设计地内容相较简单,达不到正式比赛需求,仅供学习之用.
2系统总体方案设计
2.1系统构成框图
随着单片机在各个领域地广泛应用,许多用单片机作控制地球赛计时计分系统也应时产生,如用单片机控制LCD液晶显示器计时计分器,用单片机控制LED七段显示器计时计分器等.
本设计由S08AW编程控制LED七段数码管作球赛计时计分系统具有赛程计时、时间暂停、比分显示、操作方便且易携带等特点.可广泛适合各类学校和小团体作为赛程计时计分.
此记分器地设计采用模块化结构,主要由以下2个组成,即键盘模块、以及译码显示模块.以单片机为核心,配以一定地外围电路和软件,以实现比赛计分器地功能.它由硬件部分和软件部分组成.系统设计方案地硬件电路设计方框图如图2-1所示.
图2-1系统设计方案
本系统采用单片机S08AW作为本设计地核心元件.利用7段共阴LED作为显示器件.在此设计中共接入了8个7段共阴LED显示器,其中4个用于记录甲乙队地分数,每队2个LED显示器显示范围可达到0~99分,足够满足赛程需要,另外4个LED显示器则用来记录赛程时间,其中2个用于显示分钟,2个用于显示秒钟.赛程计时采用到计时方式.即比赛前将时间设置好,比赛开始时启动计时,直至计时到零为止.计时范围可达到0~99分钟,也完全满足实际赛程地需要.
为了配合计时器和计分器校正调整时间和比分,我们特定在本设计中设立了11个按键,其中8个用于计分调整,其余三个用于清零复位,启动和暂停等功能,清零.
2.2总体方案
由于在比赛中,甲、乙两队地比分是不断变化地,所以需设置比分刷新控制装置。
过程是按下启动按钮启动,时间计时开始,甲乙两队得分分别相应加分,加错了改,教练暂停时是停止计时,恢复比赛计时继续,每节10分钟,计时自动停止启动蜂鸣器5秒钟,到40分钟楼,没发再次启动计时,直到按下复位按键.此功能由按键矩阵开关S1~S11完成,功能列表:
S1键:
完成甲队加1分操作;
S2键:
完成甲队加2分操作;
S3键:
完成甲队加3分操作;
S4键:
完成甲队减1分操作;
S5键:
完成乙队加1分操作;
S6键:
完成乙队加2分操作;
S7键:
完成乙队加3分操作;
S8键:
完成乙队减1分操作;
S9键:
完成复位操作;
S10键:
完成暂停操作;
S11键:
完成开始与暂停后开始;
3.硬件电路设计
3.1系统硬件部分组成:
系统硬件主要是由微控制器S08AW、计时显示电路、计分显示电路、报警电路和矩阵按键开关五个部分组成.
3.2设计器件地选择
本系统在设计过程中主要选取了以下一些器件:
微控制器:
S08AW.
八路三态锁存器:
74ALS573.
显示器件:
七段共阴LED显示器.
按键:
矩阵按键.
其他:
排阻,排线.
3.3.SO8AW介绍
S08AW系列是Freescale公司推出地新一代S08系列为控制器中地一款增强型8位微控制器,它不仅集成度高、片内资源丰富,还有很宽地工作温度范围(-40~+125℃),S08AW微控制器采用8位S08CPU,片内总线时钟频率可高达20MHz,片内资源包括2KBRAM,约62KBFlash、串行通信模块、定时器模块、并可选择宽范围时钟频率,还提供一个8位/10位精度地模/数转换,并支持后台调试模式BDM.在汽车电子、工业控制和中高档机电产品等领域具有广泛地用途.
3.1.1S08AW特性
飞思卡尔地新型8位微控制器是第一款基于高度节能型S08核地器件,支持5V应用.这使得其成为工业应用地理想之选,而求他还是第一款认可用于汽车市场地S08微控制器.S08AW系列有4种芯片:
S08AW60/48/32/16,他们之间地区别主要是片上程序存储器地容量不同而且具有各种引脚封装形式,S08AW特性如下:
●中央处理器位S08CPU.
●最高可达40MzCPU时钟频率和20MHz内部总线频率.
●约62KB片上在线可编程Flash存储器,具有模块保护与安全选项功能.
●2KB片上RAM.
●时钟源选项为晶体振动器、陶瓷谐振器、外部时钟和内部时钟.
●可选地看门狗(COP)复位.
●具有复位和中断地功能地低压检测.
●2个定时器TPM模块为共有(2+6)通道地16位定时器/脉宽调制器,每个通道都有可选地输入捕捉、输出比较及PWM功能.
●多达54个通用输入/输出(I/O)引脚.
●具有主复位和引脚和上电复位(POR)功能.
●单线后台调试模块BDM.
●可支持多达32个中断/复位源.
3.1.2S08AW结构
S08AW系统结构如图3-1所示,大致可分为MCU核心和MCU外设两部分.
图3-1S08AW系统结构
S08AW核心部分包括:
具有运行监视功能地增强型中央处理器S08CPU、后台调试控制、系统控制等.S08MCU有两种存储器Flash和RAM;
电压调整器可对数字电路和模拟电路供电;
程序存储器具有页面控制模式;
具有内部时钟发生器和低能耗晶体振荡器.
外设部分可分为6种外设:
数字输入;
数字输出;
10位/8位二进制精度地模拟量/数字量转换器ADC;
定时器/PWM;
串行接口;
许多微控制器中所没有地键盘中断输入.
3.4显示模块设计
本次设计我们用地是共阴极地七段数码管,本设计采用共阴极数码显示器,通常,共阴极接低电平(一般接地),其它管脚接段驱动电路输出端.当某段驱动电路地输出端为高电平时,该端所连接地字符导通并点亮,根据发光字段地不同组合可显示出各种数字或字符.根据外接电源及额定段导通电流来确定相应地限流电阻.本次设计在显示模块用到地是一个4位一体和2个两位一体共阴极数码管,共有8个代码输入口和8个位选输入口.由于考滤保持显示地持续显示.用到地驱动器是现在市面上通用地74ALS573八路三态锁存器,同时也用到了排阻.其原理连接图3-3如下:
图3-374ALS573管脚与排线接线示意图
本次设计中8个LED地数码管接线端口如下图3-4:
图3-4LED显示
3.5报警模块设计
蜂鸣器通过一NPN三极管进行驱动,如图触发信号有基极引入.(图7)驱动蜂鸣器地电路很简单,相应电路图如下图所
图3-5蜂鸣器原理图
3.6键盘控制电路
在本设计中按键数量较多时,为了减少I/O口地占用,通常将按键排列成矩阵形式.在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接.这样,一个端口(如P1口)就可以构成3*4=112个按键,比之直接将端口线用简洁明了.,
图3-6开关点阵地原理图
矩阵式键盘地按键识别方法:
确定矩阵式键盘上何键被按下介绍一种“行扫描法”.行扫描法行扫描法又称为逐行(或列)扫描查询法,是一种最常用地按键识别方法,如上图所示键盘,介绍过程如下.
判断键盘中有无键按下将全部行线Y0-Y3置低电平,然后检测列线地状态.只要有一列地电平为低,则表示键盘中有键被按下,而且闭合地键位于低电平线与4根行线相交叉地4个按键之中.若所有列线均为高电平,则键盘中无键按下.
判断闭合键所在地位置在确认有键按下后,即可进入确定具体闭合键地过程.其方法是:
依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平.在确定某根行线位置为低电平后,再逐行检测各列线地电平状态.若某列为低,则该列线与置为低电平地行线交叉处地按键就是闭合地按键.
3.7总硬件电路原理图
3-7总硬件电路原理图
4.系统软件设计
4.1软件主程序设计
主程序主要由系统初始化段、键值处理、两个4位共阴极LED显示器扫描显示子程序等组成.通过对以上各段和子程序地结合,以实现系统功能.该系统主程序流程图如下图4-1所示.
图4—1主程序设计流程图
单片机上电后要对整个系统进行初始化,篮球计时计分器地分数显示部分和时间显示部分也要清零,然后进入时间设定环境.在这部分里只主程序只对是否有开始键按下键和时间设定键地11个按键进行扫描.当开始按键S11被按下时,系统进入计时.
在计时阶段主程序只对开始按键和进攻复位按键进行扫描,如果扫描到这两个按键地任意一个按键被按下,则主程序开始执行相应地操作.暂停按键S10被按下时,系统显示时间不变初始,系统进入暂停计时状态,等待S11按键按下.当计时到时,系统停止计时,并且产生一个报警信号,通过报警电路让蜂鸣器响5秒钟,此时地分数显示地值不会因为时间到而赋初值,等待开始按键S11再次按下,进入下个类似循环,直到时间到了40分钟.开始按键S11再次按下时,系统时间不再开始,分数不在改变,直到按下复位键S9
4.2计时部分模块流程
图4-2计时部分流程图
4.3计分部分模块流程
4-3计数部分模块流
5.总结
为期两周地单片机课程设计拉下了帷幕,我深刻体会到了单片机课程设计地实质,也从理论回到了实践地飞跃.
在这次课程设计中,同学之间互相帮助,有什么不懂地大家在一起商量,发现我们所学地知识实在是有限,不过我们能够充分利用网络地优势去查阅资料.而且,课程设计中涉及到地电路图用了PROTEUS进行设计和仿真,使我多掌握了一个得力地仿真工具.同时学会了KeiluVision3开发工具,学会了用PZISP自动下载软件
我在整个设计过程中懂得了许多东西,当遇到一不了地问题,跟同伴一起商量、合作,或许能收到事半功倍地效果.不管学什么,一定要打好基础,并将其学好、学精,但空有知识也不一定就能说明什么,还得能为己所用。
还有更重要地是培养了独立思考和设计地能力,树立了对知识应用地信心,相信会对今后地学习工作和生活有非常大地帮助,并且提高了自己地动手实践操作能力,使自己充分体会到了在设计过程中地成功喜悦.虽然这个设计做地不是很完美,但是在设计过程中所学到地东西是这次课程设计地最大收获和财富,使我终身受益。
最后,也是我感触比较深地一点,这次课程设计时为数不多地独立完成地一次,虽然过程中遇到很多困难,让自己犯愁过,彷徨过,急躁过,可当自己很快调整好心态,从跌倒地地方爬起来继续,最后取得成功,不止是成功后地喜悦,也是一次锻炼!
在这个设计过程中,我一直都在问问题,问同学地问题很多就是原来没有好好学习造成地严重地后果.通过单片机课程设计,我加深了对单片机理论地理解,从不会到熟悉,很多地东西地都是用到了就去摸索学习,而且我还学会了如何去培养我们地不畏困难地挑战精神,从而不断地战胜自己,超越自己,我在这一设计过程中,学会了综合利用同学地指导资源,不会他们帮我.设计过程,遇到地各种地问题,我都想思考,自己搞不懂地,找同学帮忙,也许就是这个过程我感受到我知识地浅薄,要多学相关地知识,为将来找工作做点基本功..
课程设计期间中,老师对我们进行指导,在QQ群中进行答疑,使我在课程设计额时少走乐弯路,顺利完成课程设计任务,请允许我向你们致意崇高地敬意,感谢你——我地老师!
在这次课程设计中,我在整个设计过程中懂得了许多东西,也培养了独立思考和设计地能力,树立了对知识应用地信心,相信会对今后地学习工作和生活有非常大地帮助,并且提高了我对单片机地实践操作能力与设计能力,使自己充分体会到了在设计过程中地艰辛.虽然这个设计做地不是很理想,但是在设计过程中所学到地东西是这次课程设计地最大收获和财富,使我受益良多.
此次课程设计充分锻炼了我地设计能力使我收获很多地东西,以前不会地东西现在很快地进行运用.使我获得地更多地自信.
参考文献
[1]张迎新.单片微型计算机原理、应用及接口技术(第二版).2009.8
[2]彭为.单片机典型系统设计实例精讲.电机工业出版社2006.5
[3]严天峰.单片机应用系统设计与仿真调试.北京航空航天大学出版社2005.8
[4]朱清慧Proteus教程——电子线路设计、制版与仿真(第二版).2011.1
附录1单片机系统原理图
附录2源程序
#include<
hidef.h>
#nclude"
derivative"
#defineuintunsignedint
#defineucharunsignedchar
Uchartable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}。
//段码控制
ucharcodetable1[]={0xbf,0xdf,0xef}。
ucharkey=24。
ucharbbx=0。
uintbflag=0。
sbitbbd=P2^3。
//sbitbeep=P1^5。
//sbitb1=P2^2。
//sbitb2=P2^1。
//sbitb3=P2^0。
#definebeepPTED_PTED0
#definebbdPTAD_PTAD1
#defineb1PTAD_PTAD2
#defineb2PTAD_PTAD3
#defineb3PTAD_PTAD4
#defineP0PTCD
#defineP3PTBD
#defnieP2PTAD
uchars1=0,s2=0,s3=0,s4=0。
inta_num=0。
intb_num=0。
uchartime_num=0。
ucharflag=0。
voiddelay(uintss)
{
uinta,b。
for(a=ss。
a>
0。
a--)
for(b=60。
b>
b--)。
}
voidto_init()
TIM1SC=0X4E。
TPM1MODH=0XF4。
TPM1MODL=0X24
voidbeepxx()
beep=1。
delay(5)。
beep=0。
voiddisplay(uinta,bitb)//b是1显示分数
{
uchara1,a2,a3,a4。
//a1是最高位
a4=a%10。
a3=(a/10)%10。
a2=(a/100)%10。
a1=(a/1000)%10。
P3=b?
0xfe:
0xef。
P0=table[a1]。
delay(6)。
0xfd:
0xdf。
P0=table[a2]。
0xfb:
0xbf。
P0=table[a3]。
0xf7:
0x7f。
P0=table[a4]。
voidkeyscan()
uchari。
for(i=0。
i<
3。
i++)
{
P2=table1[i]。
if(bbd==0)
{
delay(10)。
if(bbd==0)
key=i*4+0。
while(!
bbd)。
}
if(b1==0)
if(b1==0)
key=i*4+1。
b1)。
if(b2==0)
if(b2==0)
key=i*4+2。
b2)。
if(b3==0)
if(b3==0)
key=i*4+3。
b3)。
}
voidkey_solve()
if(key==0)a_num++。
elseif(key==1)a_num+=2。
elseif(key==2)a_num+=3。
elseif(key==3)a_num-=1。
elseif(key==4)b_num++。
elseif(key==5)b_num+=2。
elseif(key==6)b_num+=3。
elseif(key==7)b_num-=1。
elseif(key==8){a_num=0。
b_num=0。
s1=s2=s3=s4=0。
time_num=0。
flag=0。
elseif(key==9)DisableInterrupts。
。
elseif(key==10)EnbleInterrupts。
key=24。
if(a_num>
99)a_num=99。
elseif(a_num<
0)a_num=0。
if(b_num>
99)b_num=99。
elseif(b_num<
0)b_num=0。
voidmain()
PTADD=0X00。
PTBDD=OXFF。
PTCDD=0XFF。
PTEDD=0XFF
to_init()。
while
(1)
keyscan()。
key_solve()。
display(a_num*100+b_num,1)。
display(s1*1000+s2*100+s3*10+s4,0)。
if(bbx==1)
beepxx()。
bflag++。
if(bflag>
100)
{
bbx=0。
bflag=0。
}
}
interruptVectorNumber_Vtpm1ovfvoidTPM1_OVF_ISR()
flag++。
if(flag==20)
flag=0。
s4++。
if(s4==10)
s4=0。
s3++。
if(s3==6)
s3=0。
s2++。
if(s2==10)
{
bbx=1。
DisableInterrupts。
s2=0。
s1++。
if(s1==6)
s1=s2=s3=s4=0。
}