单片机课程设计—篮球计时计分器_第1页
单片机课程设计—篮球计时计分器_第2页
单片机课程设计—篮球计时计分器_第3页
单片机课程设计—篮球计时计分器_第4页
单片机课程设计—篮球计时计分器_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、篮球比赛计时计分器设计 2009年 6月18日摘要 本设计是采用at89c52单片机为核心设计的一个用于赛场的篮球计时计分器。本设计采用定时器t0中断计时,显示部分分为计时和计分显示两部分,均采用共阴极led显示。计时部分计时范围宽,而且可定时设定与小时、分钟调整;计分部分调整灵活,显示范围宽,足以满足各种规模赛程需要。两个显示模块均采用动态扫描方式显示。 在本设计中p3口(p3.0p3.3)是计时计分显示共用的扫描口,p0口是计时数据输出口,p2口是计分数据输出口,计时计分均设有显示缓冲区(40h43h计分显示缓冲区,30h33h计时显示缓冲区)。本设计共有k1k5六个设置按键,k1是甲加分

2、建(按一次加一分),k2是乙加分键(按一次加一分),k3是定时切换键(定时设置与计时调时切换),k4是分钟调整键(计时与定时分钟调整),k5是分数位置交换键(交换甲、乙两队比分的位置)。按键与p1口相接,低电平输入有效.。报警部分由扬声器组成,当计时时间到时,输出低电平有效,由p1.3口输出脉冲信号驱动扬声器发出声音。计时定时的原理与定时闹钟相同,为定时设置定时分钟计数单元,通过比较定时与计时的分计数单元判断比赛是否结束是否报警,定时与计时共用一个显示缓冲去,通过k3(定时切换键)进行显示切换,本设计可通过定时显示的秒位判断定时是否有效,如果秒位显示00说明无效(上次用过的定时),显示11说明

3、有效(本次定时)。定时时间到,扬声器报警,比赛结束,按k3键可停止报警(否则一直报警)。关键词:单片机 篮球计时计分器 数码管 按键 报警器目录1 概述31.1单片机简介31.2课程设计的意义41.3任务与要求42 系统总体方案及硬件设计52.1、系统总体方案设计52.2、硬件系统设计52.2.1单片机的选择52.2.2、时钟电路模块62.2.3、复位电路模块72.2.4、按键控制模块82.2.5、数码管显示原理82.2.6、定时报警模块93、软件设计103.1、程序流程图103.2、程序分析114 proteus软件仿真124.1、简介124.2、仿真过程125、调试分析156、课程设计心得

4、体会16参考文献:16附1、源程序代码17附2、系统原理图241 概述1.1单片机简介 单片机是指一个集成在一块芯片上的完整计算机系统。尽管他的大部分功能集成在一块小芯片上,但是它具有一个完整计算机所需要的大部分部件:cpu、内存、内部和外部总线系统,目前大部分还会具有外存。同时集成诸如通讯接口、定时器,实时时钟等外围设备。而现在最强大的单片机系统甚至可以将声音、图像、网络、复杂的输入输出系统集成在一块芯片上。单片机也被称为微控制器(microcontroller),是因为它最早被用在工业控制领域。单片机由芯片内仅有cpu的专用处理器发展而来。最早的设计理念是通过将大量外围设备和cpu集成在一

5、个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中。intel的z80是最早按照这种思想设计出的处理器,从此以后,单片机和专用处理器的发展便分道扬镳。早期的单片机都是8位或4位的。其中最成功的是intel的8031,因为简单可靠而性能不错获得了很大的好评。此后在8031上发展出了mcs51系列单片机系统。基于这一系统的单片机系统直到现在还在广泛使用。随着工业控制领域要求的提高,开始出现了16位单片机,但因为性价比不理想并未得到很广泛的应用。90年代后随着消费电子产品大发展,单片机技术得到了巨大的提高。随着intel i960系列特别是后来的arm系列的广泛应用,32位

6、单片机迅速取代16位单片机的高端地位,并且进入主流市场。而传统的8位单片机的性能也得到了飞速提高,处理能力比起80年代提高了数百倍。目前,高端的32位单片机主频已经超过300mhz,性能直追90年代中期的专用处理器,而普通的型号出厂价格跌落至1美元,最高端的型号也只有10美元。当代单片机系统已经不再只在裸机环境下开发和使用,大量专用的嵌入式操作系统被广泛应用在全系列的单片机上。而在作为掌上电脑和手机核心处理的高端单片机甚至可以直接使用专用的windows和linux操作系统。1.2课程设计的意义 课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学

7、生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域, 在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。1.3任务与要求 设计一个单片机系统用于篮球比赛计时计分,满足以下功能要求: (1) 能记录整个赛程的比赛时间,并能修改比赛时间。(2)能随时刷新甲、乙两队在整个比赛过程中的比分。(3)中场交换比赛场地时,能交换甲、乙两队比分的位置。(4)比赛结束时,能发出报警声。2 系统总体方案及硬件设计2.1、系统总体方案设计 本设计是采用at89c52单片机为核心设计的一个用于赛场的篮球计时计分器。本设计

8、采用定时器t0中断计时,显示部分分为计时和计分显示两部分,均采用共阴极led显示。单片机p3口(p3.0p3.5)是计时计分显示共用的扫描口,p0口是计时数据输出口,p2口是计分数据输出口。计时部分计时范围宽,而且可定时设定与小时、分钟调整;计分部分调整灵活,显示范围宽,足以满足各种规模赛程需要。两个显示模块均采用动态扫描方式显示。2.2、硬件系统设计2.2.1单片机的选择 at89c52单片机是美国atmel公司生产的低功耗,高性能cmos 8位单片机,片内含4k bytes的可系统编程的flash只读程序存储器,器件采用atmel公司的高密度,非易失性存储技术生产,兼容标准8051指令系统

9、及引脚。具有如下特点:40个引脚,4k bytes flash片内程序存储器,128 bytes的随机存取数据存储器(ram),32个外部双向输入/输出(i/o)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(wdt)电路,片内时钟振荡器.。它集flash程序存储器,既可在线编程(isp)也可用传统方法进行编程及通用8位微处理器于单片芯片中,atmel公司的功能强大,低价单片机可为您提供许多高性价比的应用场合,可灵活应用于各种控制领域。 由于at89c52的上述优点,结合本设计的功能要求和降低成本,故本设计采用单片机at89c52。 at89c52

10、管脚图2.2.2、时钟电路模块 mcs-51内部有一个用于构成振荡器的高增益反相放大器,此放大器的输入和输出端分别是引脚xtal1和xtal2,在xtal1和xtal2上外接时钟源即可构成时钟电路。有内部和外部两种时钟产生方式。 本设计采用的是外部方式,原理图如图所示:参数选择:c1、c2对频率有微调作用,当外接晶振时,c1和c2通常选择1030pf;当外接陶瓷谐振器时,c1和c2的典型值约为40+/-10pf,在设计印刷电路板时,晶体或陶瓷谐振器和电容应尽可能安装在单片机芯片附近,以减少寄生电容,保证振荡器稳定和可靠的工作。为提高稳定性,应采用npo电容。本设计采用的震荡频率是12mh2.2

11、.3、复位电路模块 复位电路的基本功能是:系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源插头分-合过程中引起的抖动而影响复位。 mcs单片机通常采用上电自动复位、按钮电平复位、外部脉冲复位、上电按钮电平复位、程序运行监视复位等方式。上电复位设利用电容充电来实现的,即上电瞬间rst/vpd端的电位与vcc相同,随着充电电流的减少,rst/vpd的电位下降,最后被嵌位在0v。按钮电平复位是当按下按钮后,电源vcc通过电阻r施加在单片机复位端rst/vpd上,实现单片机复位。本设计采用的是上电+按钮电平复位电路,是上

12、电自动复位与按钮电平复位电路的组合,当振荡频率选11.0592mh时。电容c取10u,r取10k,rs取1k。电路如下图: 2.2.4、按键控制模块本设计采用的是用查询方式的,也就是把按键接在p1口,用程序查询方式查询那个按键按下,执行相应的操作。图如下: 2.2.5、数码管显示原理 数码管实际上是由7个发光管组成8字形构成的,加上小数点就是8个。我们分别把他命名为a,b,c,d,e,f,g,h。 图2.2 数码管内部结构图假设我们要显示一个数字2, 那么 a、b、g、e、d这5个段的发光管亮就可以了,c、f、h不亮,同时由于接法为共阳接法,那么为低电平是亮,为高电平是灭。从高往低排列, p1

13、.7-p1.0写成二进制为01111110, 把他转化为16进制则为a2h。我们可以根据硬件的接线把数码管显示数字编制成一个表格,见下表,以后直接调用就行了。 数码管的接口有静态接口和动态接口两种。静态接口为固定显示方式,无闪烁,其电路可采用一个并行口接一个数码管,数码管的公共端按共阳接vcc,本次课程设计由于所需数码管较少,故可用些种方法接线。这种接法占用接口多,仅能接少量数码管。动态接口采用各数码管循环轮流显示的方法,当循环显示的频率较高时,利用人眼的暂留特性,看不出闪烁显示现象,这种显示需要一个接口完成字形码的输出,另一接口完成各数码管的轮流点亮。本设计采用的是数码管动态显示。2.2.6

14、、定时报警模块3、软件设计3.1、程序流程图篮球比赛中,得分可分为1分、2分、3分三种情况,但为了方便我们在这只设置加1分,得2分、3分的情况可用按2次、3次加1分得到。还设置了定是报警键。根据这样的设计要求,结合数码管的显示以及52单片机中计数器的工作实现方式、接口应用、中断控制等可设计出程序流程图如下:3.2、程序分析本设计采用at89s52单片机中的一个16位的定时/计数器t0,分别由th0和tl0组成,它们均是8位寄存器,在特殊功能寄存器中占地址8ah-8dh。它们用于存放定时或计数的初始值。此外,内部还有一个8位的方式寄存器tmod和一个8位的控制寄存器tcon。用于选择和控制定时/

15、计数器的工作。篮球比赛计分器利用单片机的计数器进行工作,计数器对外部脉冲的下降沿进行加1计数,直至计满回零。作为可编程器件,单片机中的定时/计数器初始化编程步骤如下:根据定时时间要求或计数要求计算计数器初值;将工作方式控制字写入tmod寄存器;将计数初值写入thx和tlx寄存器;启动定时器/计数器,即将trx置位。如果工作于中断方式,需置位ea(中断总开关)及et(允许定时/计数器中断),并编写中断服务程序。其设计中断子程序图如下:4 proteus软件仿真4.1、简介proteus软件是英国labcenter electronics公司出版的eda工具软件。它不仅具有其它eda工具软件的仿真

16、功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。protues提供了丰富的资源: 仿真元器件资源:仿真数字和模拟、交流和直流等数千种元器件,有30多个元件库。仿真仪表资源 :示波器、逻辑分析仪、虚拟终端、spi调试器、i2c调试器、信号发生器、模式发生器、交直流电压表、交直流电流表。理论上同一种仪器可以在一个电路中随意的调用。proteus还提供了一个图形显示功能,可以将线路上变化的信号,以图形的方式实时地显示出来,其作用与示波器相似,但功能更多。这些虚拟仪器仪表具有理想的参数指标。另外proteus还提供了比较丰富的测试信号用于电路的测试。这些测试信号包括模拟信号和

17、数字信号。在protues中进行电路仿真时,先绘制好原理图,再调入已编译好的目标代码文件:*.hex,随后便可在proteus的原理图中模拟的实物运行状态和过程,进行观察从而改良自己的设计方案。操作简单,非常适合初学者进行单片机的仿真,进而了解其原理,增强实践。4.2、仿真过程 在计算机中打开proteus软件,建立新的项目,在元件库中选择相应的元件,放在编辑窗口中,依次连线,组成仿真原理图。在用protues进行仿真之前,先要用wave软件将我们编写好的汇编程序编译。具体方法是在wave中先新建一项目,之后输入编写的程序,输入完成后保存然后执行项目、编译,在目标文件夹内生成编译好的程序文件,

18、其中*.hex文件就是我们所需要的,在之后电路设计好后用于放入at89s51中执行其功能。检查连接好的电路,确保无误后,在电路连接好的proteus窗口中双击at89s51,在弹出的对话框中选择单片机中要输入的程序。用鼠标点击仿真键进行仿真,在仿真过程中点击按键,观察数码管的显示情况,看是否符合设计的要求,若与要求不符,检查电路是否连线正确,实在找不出错误所在,可以请教老师或请同学帮忙检查,直到正确为止。计时工作仿真状态图: 甲乙两队计分工作仿真状态图:计时计分工作状态图:5、调试分析在仿真成功之后,便可进行实践了。实物和仿真还是有一定的差别的,制作实物时要考虑的方面比仿真多的多。做实物时,不

19、仅要考虑到电路正确同时也要注意版面的设计,不仅设计功能要求实现,版面的美观也是必不可少的一方面,这就要注意尽量少的接线。在电路板刚刚焊好后,与以前制作的单片机板连接在一起,接好电路,烤入程序后发现第一个数码管的c段一直处于亮的状态,经检查后确定不是硬件出现的问题,但在仿真时能正确显示也证明程序也是正确的,找不到问题所在让我非常郁闷。想着原因可能程序读入时出现错误,试着重新将程序烤入单片机中,显示结果果然变得正常,实践成功。6、课程设计心得体会这次课程设计历时二个星期左右,通过这两个星期的学习,发现了自己的很多不足,自己知识的很多漏洞,看到了自己的实践经验还是比较缺乏,理论联系实际的能力还急需提

20、高。回顾起此次单片机课程设计,我仍感慨颇多,的确,从选题到定稿,从理论到实践,在接近两星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不

21、够牢固,比如说不懂一些元器件的使用方法,对单片机汇编语言掌握得不好通过这次课程设计之后,一定把以前所学过的知识重新温故。这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在xxx、xxx、xxx老师的辛勤指导下,终于游逆而解。同时,在xxx、xxx、xxx老师那里我学得到很多实用的知识,在次我表示感谢!同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!参考文献:1余发山.单片机原理及应用技术.徐州:中国矿业大学出版社,2003.2佟云峰,等.单片机原理及其应用.重庆:重庆大学出版社,2004,13吴金戌,等8051单片机实践与应用北京:清华大学出版社,2001,84刘瑞新

22、.单片机原理及应用教程.北京:机械工业出版社,20055聂毅.宏汇编语言程序设计教程.北京:电子工业出版社,1998.6周航慈.单片机应用程序设计技术.北京:北京航空航天大学出版社,2002附1、源程序代码scoredisplaybuffer equ 40h ;设置计分显示缓冲区的地址为40h-45hascore equ 47h ;设置甲队的计分地址bscore equ 49h ;设置乙队的计分地址akey bit p1.0 ;设置甲加分键(按一次加一分)bkey bit p1.1 ;设置乙加分键(按一次加一分)abkey bit p1.6 ;设置分数位置交换键(交换比分位置)displayb

23、uffer equ 30h ;设置计、定时显示缓冲区地址30h-35honesecondcounter equ 39h ;设置1秒计数地址minute equ 3bh ;设置分钟计数地址second equ 3ch ;设置秒计数地址clockmode equ 20h.0 ;设置模式(计时/定时)寄存器地址alarmonoff equ 20h.1 ;设置报警开启/关闭标志alarmtimeon equ 20h.2 ;设置计时时间到标志dispminute equ 22h ;设置分钟显示寄存器的地址dispsecond equ 23h ;设置秒显示寄存器的地址alarmminute equ 2fh

24、 ;设置定时分钟计数地址alarmsetkey bit p1.2 ;定义设置定时设置切换键minutekey bit p1.5 ;定义分设置键relayout equ p1.3 ;定义报警发声输出引脚;中断入口程序 org 00h ajmp reset ; 程序开始 org 0bh ;t0中断地址 ajmp timeint ;调到中断服务程序;程序开始 org 0020hreset: mov sp,#70h ;工作状态地址初始化 setb relayout mov onesecondcounter,#125 mov minute,#00 mov second,#00 mov alarmminu

25、te,#00 mov ascore,#00 mov bscore,#00 clr alarmonoff clr clockmode clr alarmtimeon setb relayout mov tmod,#00000001b mov th0,#0e0h mov tl0,#0c0h mov ie, #82h ;开全局中断 setb tr0 ;定时器t0开始工作;以下为主程序mainloop: jnb akey,bbb1 ; 如甲加分键按下,执行bbb1后的语句,完成甲分数加一 jnb bkey,bbb2 ; 如乙加分键按下,执行bbb2后的语句,完成乙分数加一 jnb abkey,bbb3

26、 ; 如显示交换键按下,执行bbb3后的语句,交换显示 ajmp xxx ; 如果没有分数设置键按下,跳到xxx语句bbb1: jnb akey,bbb1 ;等待按键释放 mov a, ascore add a,#1 ; 完成甲分数加一 mov ascore,a call convertobuffer ;调用转换到显示缓冲区子程序 ajmp xxx ; 跳到xxx语句bbb2: jnb bkey,bbb2 ;与bbb1的功能类似,完成乙分数加一 mov a,bscore add a,#1 mov bscore,a call convertobuffer ajmp xxxbbb3: jnb ab

27、key,bbb3 ; 完成显示交换 mov a,ascore mov 48h,a mov a,bscore mov ascore,a mov a,48h mov bscore,a call convertobuffer ;调用转换到显示缓冲区子程序xxx: jb alarmsetkey,checkminutekey ; 定时设置键按下了吗?没有则检测分钟设置键 call delay jb alarmsetkey,checkminutekey ;延时去抖动 setb clockmode call alarmsetcheckminutekey: jb minutekey,checkalarm ;分

28、设置键按下了吗?没有则转去检测小时设置键 mov a,minute add a,#1 mov minute,a cjne a,#3ch,notover1 ;到60分钟了吗? mov minute,#0 ;到60分钟则将分钟清0notover1: jnb minutekey,$checkalarm: jnb alarmtimeon,toreturn call alarmprocesstoreturn: ajmp mainloop ;跳回主程序;定时器timer0中断服务程序timeint: mov th0,#0e0h ;重新加载定时参数 mov tl0,#0c0h push acc push p

29、sw setb rs0 clr rs1 djnz onesecondcounter,notonesecond ;即够1秒了吗? mov onesecondcounter,#125 ;如够1秒则重新设置onesecondcounter计数器 call clock ;调用将时钟内容加1秒的子程序 call convertobuffer ;调用转换到显示缓冲区子程序notonesecond: call scandisplay ;调用扫描显示子程序 pop psw pop acc reti ;中断返回;扫描显示子程序scandisplay: mov r1,#displaybuffer ;指向计(定)时

30、显示数据首址 mov r0,#scoredisplaybuffer ;指向分数显示数据首址 mov r4,#11111110b ;扫描控制字初值 play: mov a,r4 ;扫描字放入a mov p3,a ;从p3口输出 mov a,r1 ;取计时显示数据到a mov dptr,#tab ;取段码表地址 movc a,a+dptr ;查显示数据对应段码 mov p0,a ;段码放入p0口 mov a,r0 ;取计分显示数据到a mov dptr,#tab ;取段码表地址 movc a,a+dptr ;查显示数据对应段码 mov p2,a ;段码放入p2口 lcall delay inc r

31、1 ;指向下一地址 inc r0 mov a,r4 ;扫描控制字放入a jnb acc.4,endout ;扫到第六位时结束 rl a ;a中数据循环左移 mov r4,a ;放回r4内 ajmp play endout: setb p3.7 mov p0,#0ffh mov p2,#0ffh ret ;子程序返回 tab: db 3fh,06h,5bh,4fh,66h db 6dh,7dh,07h,7fh,6fh,77h,7ch,39h,5eh,79h,71h,40h,80h,00h;计时加1秒的子程序clock: mov a,second ;将原秒值送入a sub a,#1 ;加1秒 mo

32、v second,a cjne a,#00h,notoverflow ;够60秒了吗? mov second,#59 ;够了则将秒值清0 mov a,minute sub a,#1 mov minute,a ;分钟加1 cjne a,#00h,notoverflow ;够60分了吗? mov minute,#59 ;够了则将分值清0notoverflow: jnb alarmonoff,notalarm mov a,second jnz notalarm ;秒为零吗? mov a,minute cjne a,alarmminute,notalarm ;计时分钟值和定时设置分钟值相等吗? set

33、b alarmtimeon ;到了闹时时间则将“闹时时间到”标志设为1notalarm: ret;计时定时值与计分转换到显示缓冲区子程序convertobuffer: mov r1,#displaybuffer ;将计(定)时缓冲区地址赋给r1 mov r0,#scoredisplaybuffer ;将计分缓冲区地址赋给r0 jnb akey,convert1 jnb bkey,convert1 jb abkey,zzz1 ajmp convert1zzz1: jb clockmode,dispalarmset ;判断计时模式,以决定是显示计时时间还是定时时间 mov a,second ;将计时数据转到显示寄存器 mov dispsecond,a mov a,minute mov dispminute,a ajmp convertdispalarmset: jb alarmonoff,alarmon ;将定时数据转到显示寄存器 mov dispsecon

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论