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

下载本文档

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

文档简介

单片机课程设计报告篮球比赛计时计分器设计2009年6月摘要本设计是采用AT89C52单片机为核心设计的一个用于赛场的篮球计时计分器。本设计采用定时器T0中断计时,显示局部分为计时和计分显示两局部,均采用共阴极LED显示。计时局部计时范围宽,而且可定时设定与小时、分钟调整;计分局部调整灵活,显示范围宽,足以满足各种规模赛程需要。两个显示模块均采用动态扫描方式显示。在本设计中P3口〔P3.0——P3.3〕是计时计分显示共用的扫描口,P0口是计时数据输出口,P2口是计分数据输出口,计时计分均设有显示缓冲区〔40H——43H计分显示缓冲区,30H——33H计时显示缓冲区〕。本设计共有K1——K5六个设置按键,K1是甲加分建〔按一次加一分〕,K2是乙加分键〔按一次加一分〕,K3是定时切换键〔定时设置与计时调时切换〕,K4是分钟调整键〔计时与定时分钟调整〕,K5是分数位置交换键〔交换甲、乙两队比分的位置〕。按键与P1口相接,低电平输入有效.。报警局部由扬声器组成,当计时时间到时,输出低电平有效,由P1.3口输出脉冲信号驱动扬声器发出声音。计时定时的原理与定时闹钟相同,为定时设置定时分钟计数单元,通过比拟定时与计时的分计数单元判断比赛是否结束是否报警,定时与计时共用一个显示缓冲去,通过K3〔定时切换键〕进行显示切换,本设计可通过定时显示的秒位判断定时是否有效,如果秒位显示00说明无效〔上次用过的定时〕,显示11说明有效〔本次定时〕。定时时间到,扬声器报警,比赛结束,按K3键可停止报警〔否则一直报警〕。关键词:单片机篮球计时计分器数码管按键报警器目录1概述 31.1单片机简介 31.2课程设计的意义 41.3任务与要求 42系统总体方案与硬件设计 52.1、系统总体方案设计 52.2、硬件系统设计 5单片机的选择 5、时钟电路模块 6、复位电路模块 7、按键控制模块 8、数码管显示原理 8、定时报警模块 93、软件设计 103.1、程序流程图 103.2、程序分析 114PROTEUS软件仿真 124.1、简介 124.2、仿真过程 125、调试分析 156、课程设计心得体会 16参考文献: 16附1、源程序代码 17附2、系统原理图 241概述1.1单片机简介单片机是指一个集成在一块芯片上的完整计算机系统。尽管他的大局部功能集成在一块小芯片上,但是它具有一个完整计算机所需要的大局部部件:CPU、内存、内部和外部总线系统,目前大局部还会具有外存。同时集成诸如通讯接口、定时器,实时时钟等外围设备。而现在最强大的单片机系统甚至可以将声音、图像、网络、复杂的输入输出系统集成在一块芯片上。单片机也被称为微控制器〔Microcontroller〕,是因为它最早被用在工业控制领域。单片机由芯片内仅有CPU的专用处理器开展而来。最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中。INTEL的Z80是最早按照这种思想设计出的处理器,从此以后,单片机和专用处理器的开展便分道扬镳。早期的单片机都是8位或4位的。其中最成功的是INTEL的8031,因为简单可靠而性能不错获得了很大的好评。此后在8031上开展出了MCS51系列单片机系统。基于这一系统的单片机系统直到现在还在广泛使用。随着工业控制领域要求的提高,开始出现了16位单片机,但因为性价比不理想并未得到很广泛的应用。90年代后随着消费电子产品大开展,单片机技术得到了巨大的提高。随着INTELi960系列特别是后来的ARM系列的广泛应用,32位单片机迅速取代16位单片机的高端地位,并且进入主流市场。而传统的8位单片机的性能也得到了飞速提高,处理能力比起80年代提高了数百倍。目前,高端的32位单片机主频已经超过300MHz,性能直追90年代中期的专用处理器,而普通的型号出厂价格跌落至1美元,最高端的型号也只有10美元。当代单片机系统已经不再只在裸机环境下开发和使用,大量专用的嵌入式操作系统被广泛应用在全系列的单片机上。而在作为掌上电脑和核心处理的高端单片机甚至可以直接使用专用的Windows和Linux操作系统。1.2课程设计的意义课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术开展的日新日异,单片机已经成为当今计算机应用中空前活泼的领域,在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。1.3任务与要求设计一个单片机系统用于篮球比赛计时计分,满足以下功能要求:〔1〕能记录整个赛程的比赛时间,并能修改比赛时间。〔2〕能随时刷新甲、乙两队在整个比赛过程中的比分。〔3〕中场交换比赛场地时,能交换甲、乙两队比分的位置。〔4〕比赛结束时,能发出报警声。2系统总体方案与硬件设计2.1、系统总体方案设计本设计是采用AT89C52单片机为核心设计的一个用于赛场的篮球计时计分器。本设计采用定时器T0中断计时,显示局部分为计时和计分显示两局部,均采用共阴极LED显示。单片机P3口〔P3.0——P3.5〕是计时计分显示共用的扫描口,P0口是计时数据输出口,P2口是计分数据输出口。计时局部计时范围宽,而且可定时设定与小时、分钟调整;计分局部调整灵活,显示范围宽,足以满足各种规模赛程需要。两个显示模块均采用动态扫描方式显示。2.2、硬件系统设计单片机的选择AT89C52单片机是美国ATMEL公司生产的低功耗,高性能CMOS8位单片机,片内含4Kbytes的可系统编程的Flash只读程序存储器,器件采用ATMEL公司的高密度,非易失性存储技术生产,兼容标准8051指令系统与引脚。具有如下特点:40个引脚,4kBytesFlash片内程序存储器,128bytes的随机存取数据存储器〔RAM〕,32个外部双向输入/输出〔I/O〕口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗〔WDT〕电路,片内时钟振荡器.。它集Flash程序存储器,既可在线编程〔ISP〕也可用传统方法进行编程与通用8位微处理器于单片芯片中,ATMEL公司的功能强大,低价单片机可为您提供许多高性价比的应用场合,可灵活应用于各种控制领域。由于AT89C52的上述优点,结合本设计的功能要求和降低本钱,故本设计采用单片机AT89C5AT89C52管脚图、时钟电路模块MCS-51内部有一个用于构成振荡器的高增益反相放大器,此放大器的输入和输出端分别是引脚XTAL1和XTAL2,在XTAL1和XTAL2上外接时钟源即可构成时钟电路。有内部和外部两种时钟产生方式。本设计采用的是外部方式,原理图如下图:参数选择:C1、C2对频率有微调作用,当外接晶振时,C1和C2通常选择10——30pF;当外接陶瓷谐振器时,C1和C2的典型值约为40+/-10pF,在设计印刷电路板时,晶体或陶瓷谐振器和电容应尽可能安装在单片机芯片附近,以减少寄生电容,保证振荡器稳定和可靠的工作。为提高稳定性,应采用NPO电容。本设计采用的震荡频率是12MH、复位电路模块复位电路的根本功能是:系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源插头分-合过程中引起的抖动而影响复位。MCS-51单片机通常采用上电自动复位、按钮电平复位、外部脉冲复位、上电+按钮电平复位、程序运行监视复位等方式。上电复位设利用电容充电来实现的,即上电瞬间RST/Vpd端的电位与Vcc相同,随着充电电流的减少,RST/Vpd的电位下降,最后被嵌位在0V。按钮电平复位是当按下按钮后,电源Vcc通过电阻R施加在单片机复位端RST/Vpd上,实现单片机复位。本设计采用的是上电+按钮电平复位电路,是上电自动复位与按钮电平复位电路的组合,当振荡频率选11.0592MH时。电容C取10uF,R取10K,Rs取1K。电路如下列图:、按键控制模块本设计采用的是用查询方式的,也就是把按键接在P1口,用程序查询方式查询那个按键按下,执行相应的操作。图如下:、数码管显示原理数码管实际上是由7个发光管组成8字形构成的,加上小数点就是8个。我们分别把他命名为A,B,C,D,E,F,G,H。图2.2数码管内部结构图假设我们要显示一个数字2,那么A、B、G、E、D这5个段的发光管亮就可以了,C、F、H不亮,同时由于接法为共阳接法,那么为低电平是亮,为高电平是灭。从高往低排列,P1.7-P1.0写成二进制为01111110,把他转化为16进制则为A2H。我们可以根据硬件的接线把数码管显示数字编制成一个表格,见下表,以后直接调用就行了。数码管的接口有静态接口和动态接口两种。静态接口为固定显示方式,无闪烁,其电路可采用一个并行口接一个数码管,数码管的公共端按共阳接VCC,本次课程设计由于所需数码管较少,故可用些种方法接线。这种接法占用接口多,仅能接少量数码管。动态接口采用各数码管循环轮流显示的方法,当循环显示的频率较高时,利用人眼的暂留特性,看不出闪烁显示现象,这种显示需要一个接口完成字形码的输出,另一接口完成各数码管的轮流点亮。本设计采用的是数码管动态显示。、定时报警模块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。用于选择和控制定时/计数器的工作。篮球比赛计分器利用单片机的计数器进行工作,计数器对外部脉冲的下降沿进行加1计数,直至计满回零。作为可编程器件,单片机中的定时/计数器初始化编程步骤如下:根据定时时间要求或计数要求计算计数器初值;将工作方式控制字写入TMOD存放器;将计数初值写入THX和TLX存放器;启动定时器/计数器,即将TRX置位。如果工作于中断方式,需置位EA〔中断总开关〕与ET〔允许定时/计数器中断〕,并编写中断效劳程序。其设计中断子程序图如下:4PROTEUS软件仿真4.1、简介Proteus软件是英国Labcenterelectronics公司出版的EDA工具软件。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机与外围器件。它是目前最好的仿真单片机与外围器件的工具。Protues提供了丰富的资源:仿真元器件资源:仿真数字和模拟、交流和直流等数千种元器件,有30多个元件库。仿真仪表资源:示波器、逻辑分析仪、虚拟终端、SPI调试器、I2C调试器、信号发生器、模式发生器、交直流电压表、交直流电流表。理论上同一种仪器可以在一个电路中随意的调用。Proteus还提供了一个图形显示功能,可以将线路上变化的信号,以图形的方式实时地显示出来,其作用与示波器相似,但功能更多。这些虚拟仪器仪表具有理想的参数指标。另外Proteus还提供了比拟丰富的测试信号用于电路的测试。这些测试信号包括模拟信号和数字信号。在Protues中进行电路仿真时,先绘制好原理图,再调入已编译好的目标代码文件:*.HEX,随后便可在PROTEUS的原理图中模拟的实物运行状态和过程,进行观察从而改进自己的设计方案。操作简单,非常适合初学者进行单片机的仿真,进而了解其原理,增强实践。4.2、仿真过程在计算机中翻开PROTEUS软件,建立新的工程,在元件库中选择相应的元件,放在编辑窗口中,依次连线,组成仿真原理图。在用Protues进行仿真之前,先要用WAVE软件将我们编写好的汇编程序编译。具体方法是在WAVE中先新建一工程,之后输入编写的程序,输入完成后保存然后执行工程、编译,在目标文件夹内生成编译好的程序文件,其中*.HEX文件就是我们所需要的,在之后电路设计好后用于放入AT89S51中执行其功能。检查连接好的电路,确保无误后,在电路连接好的PROTEUS窗口中双击AT89S51,在弹出的对话框中选择单片机中要输入的程序。用鼠标点击仿真键进行仿真,在仿真过程中点击按键,观察数码管的显示情况,看是否符合设计的要求,假设与要求不符,检查电路是否连线正确,实在找不出错误所在,可以请教老师或请同学帮助检查,直到正确为止。计时工作仿真状态图:甲乙两队计分工作仿真状态图:计时计分工作状态图:5、调试分析在仿真成功之后,便可进行实践了。实物和仿真还是有一定的差异的,制作实物时要考虑的方面比仿真多的多。做实物时,不仅要考虑到电路正确同时也要注意版面的设计,不仅设计功能要求实现,版面的美观也是必不可少的一方面,这就要注意尽量少的接线。在电路板刚刚焊好后,与以前制作的单片机板连接在一起,接好电路,烤入程序后发现第一个数码管的C段一直处于亮的状态,经检查后确定不是硬件出现的问题,但在仿真时能正确显示也证明程序也是正确的,找不到问题所在让我非常郁闷。想着原因可能程序读入时出现错误,试着重新将程序烤入单片机中,显示结果果然变得正常,实践成功。6、课程设计心得体会这次课程设计历时二个星期左右,通过这两个星期的学习,发现了自己的很多缺乏,自己知识的很多漏洞,看到了自己的实践经验还是比拟缺乏,理论联系实际的能力还急需提高。回忆起此次单片机课程设计,我仍感慨颇多,确实,从选题到定稿,从理论到实践,在接近两星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以稳固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会效劳,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的缺乏之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比方说不懂一些元器件的使用方法,对单片机汇编语言掌握得不好……通过这次课程设计之后,一定把以前所学过的知识重新温故。这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在XXX、XXX、XXX老师的辛勤指导下,终于游逆而解。同时,在XXX、XXX、XXX老师那里我学得到很多实用的知识,在次我表示感谢!同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!参考文献:[1]余发山.单片机原理与应用技术.徐州:中国矿业大学出版社,2003.[2]佟云峰,等.单片机原理与其应用.重庆:重庆大学出版社,2004,1.[3]吴金戌,等.8051单片机实践与应用.北京:清华大学出版社,2001,8.[4]刘瑞新.单片机原理与应用教程.北京:机械工业出版社,2005.[5]聂毅.宏汇编语言程序设计教程.北京:电子工业出版社,1998.[6]周航慈.单片机应用程序设计技术.北京:北京航空航天大学出版社,2002.附1、源程序代码scoreDisplayBufferequ40h;设置计分显示缓冲区的地址为40h-45hascoreequ47h;设置甲队的计分地址bscoreequ49h;设置乙队的计分地址akeybitp1.0;设置甲加分键〔按一次加一分〕bkeybitp1.1;设置乙加分键〔按一次加一分〕abkeybitp1.6;设置分数位置交换键〔交换比分位置〕DisplayBufferequ30h;设置计、定时显示缓冲区地址30h-35hOneSecondCounterequ39h;设置1秒计数地址Minuteequ3bh;设置分钟计数地址Secondequ3ch;设置秒计数地址ClockModeequ20h.0;设置模式〔计时/定时〕存放器地址AlarmOnOffequ20h.1;设置报警开启/关闭标志AlarmTimeOnequ20h.2;设置计时时间到标志DispMinuteequ22h;设置分钟显示存放器的地址DispSecondequ23h;设置秒显示存放器的地址AlarmMinuteequ2fh;设置定时分钟计数地址AlarmSetKeybitp1.2;定义设置定时设置切换键MinuteKeybitp1.5;定义分设置键RelayOutequp1.3;定义报警发声输出引脚;@@@@@@@@@@@@@@中断入口程序@@@@@@@@@org00hajmpReset;程序开始org0bh;T0中断地址ajmpTimeInt;调到中断效劳程序;@@@@@@@@@@@@@@程序开始@@@@@@@@@@@org0020hReset:movsp,#70h;工作状态\地址初始化setbRelayOutmovOneSecondCounter,#125movMinute,#00movSecond,#00movAlarmMinute,#00movascore,#00movbscore,#00clrAlarmOnOffclrClockModeclrAlarmTimeOnsetbRelayOutmovtmod,#00000001bmovth0,#0E0hmovtl0,#0C0hmovie,#82h;开全局中断setbtr0;定时器T0开始工作;@@@@@@@@@@@@@@@以下为主程序@@@@@@@@@@@@@@@@@MainLoop:jnbakey,bbb1;如甲加分键按下,执行bbb1后的语句,完成甲分数加一jnbbkey,bbb2;如乙加分键按下,执行bbb2后的语句,完成乙分数加一jnbabkey,bbb3;如显示交换键按下,执行bbb3后的语句,交换显示ajmpxxx;如果没有分数设置键按下,跳到xxx语句bbb1:jnbakey,bbb1;等待按键释放mova,ascoreadda,#1;完成甲分数加一movascore,acallConvertoBuffer;调用转换到显示缓冲区子程序ajmpxxx;跳到xxx语句bbb2:jnbbkey,bbb2;与bbb1的功能类似,完成乙分数加一mova,bscoreadda,#1movbscore,acallConvertoBufferajmpxxxbbb3:jnbabkey,bbb3;完成显示交换mova,ascoremov48h,amova,bscoremovascore,amova,48hmovbscore,acallConvertoBuffer;调用转换到显示缓冲区子程序xxx:jbAlarmSetKey,CheckMinuteKey;定时设置键按下了吗?没有则检测分钟设置键callDelayjbAlarmSetKey,CheckMinuteKey;延时去抖动setbClockModecallAlarmSetCheckMinuteKey:jbMinuteKey,CheckAlarm;分设置键按下了吗?没有则转去检测小时设置键mova,Minuteadda,#1movMinute,acjnea,#3ch,NotOver1;到60分钟了吗?movMinute,#0;到60分钟则将分钟清0NotOver1:jnbMinuteKey,$CheckAlarm:jnbAlarmTimeOn,ToReturncallAlarmProcessToReturn:ajmpMainLoop;跳回主程序;@@@@@@@@@@@@@定时器Timer0中断效劳程序@@@@@@@@@@@TimeInt:movth0,#0E0h;重新加载定时参数movtl0,#0C0hpushaccpushpswsetbrs0clrrs1djnzOneSecondCounter,NotoneSecond;即够1秒了吗?movOneSecondCounter,#125;如够1秒则重新设置"OneSecondCounter"计数器callClock;调用将时钟内容加1秒的子程序callConvertoBuffer;调用转换到显示缓冲区子程序NotoneSecond:callScanDisplay;调用扫描显示子程序poppswpopaccreti;中断返回;@@@@@@@@@@@@扫描显示子程序@@@@@@@@@@@@@@@@@@ScanDisplay:MOVR1,#DisplayBuffer;指向计(定)时显示数据首址MOVR0,#scoreDisplayBuffer;指向分数显示数据首址MOVR4,#11111110b;扫描控制字初值PLAY:MOVA,R4;扫描字放入AMOVp3,A;从p3口输出MOVA,@R1;取计时显示数据到AMOVDPTR,#TAB;取段码表地址MOVCA,@A+DPTR;查显示数据对应段码MOVP0,A;段码放入P0口MOVA,@R0;取计分显示数据到AMOVDPTR,#TAB;取段码表地址MOVCA,@A+DPTR;查显示数据对应段码MOVP2,A;段码放入P2口LCALLDelayINCR1;指向下一地址INCR0MOVA,R4;扫描控制字放入AJNBACC.4,ENDOUT;扫到第六位时结束RLA;A中数据循环左移MOVR4,A;放回R4内AJMPPLAYENDOUT:SETBp3.7MOVP0,#0FFHMOVP2,#0FFHRET;子程序返回TAB:DB3FH,06H,5BH,4FH,66HDB6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H,40H,80H,00H;@@@@@@@@@@@@@计时加1秒的子程序@@@@@@@@@@@@@@Clock:mova,Second;将原秒值送入asuba,#1;加1秒movSecond,acjnea,#00H,NotOverFlow;够60秒了吗?movSecond,#59;够了则将秒值清0mova,Minutesuba,#1movMinute,a;分钟加1cjnea,#00H,NotOverFlow;够60分了吗?movMinute,#59;够了则将分值清0NotOverFlow:jnbAlarmOnOff,NotAlarmmova,SecondjnzNotAlarm;秒为零吗?mova,Minutecjnea,AlarmMinute,NotAlarm;计时分钟值和定时设置分钟值相等吗?setbAlarmTimeOn;到了闹时时间则将“闹时时间到〞标志设为1NotAlarm:ret;@@@@@@@计时定时值与计分转换到显示缓冲区子程序@@@@@@@@@@ConvertoBuffer:movr1,#DisplayBuffer;将计(定)时缓冲区地址赋给r1movR0,#scoreDisplayBuffer;将计分缓冲区地址赋给r0jnbakey,Convert1jnbbkey,Convert1jbabkey,zzz1ajmpConvert1zzz1:jbClockMode,DispAlarmSet;判断计时模式,以决定是显示计时时间还是定时时间mova,Second;将计时数据转到显示存放器movDispSecond,amova,MinutemovDispminute,aajmpConvertDispAlarmSet:jbAlarmOnOff,AlarmOn;将定时数据转到显示存放器movDispSecond,#00h;秒位显示00说明无效〔上次用过的定时〕ajmpNextAlarmOn:movDispSecond,#11;显示11说明有效〔本次定时〕Next:mova,AlarmMinutemovDispminute,aConvert:mova,DispSecond;将计(定)时显示存放器中的内容赋值给amovb,#10;令b=10divab;a/b商〔十位〕放a中,余数〔个位〕放b中mov@r1,b;将b中的个位赋值给〔〔r1〕〕incr1;r1自加1mov@

温馨提示

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

评论

0/150

提交评论