课程设计报告课程名称:单片机原理及应用(1)设计题目:基于51单片机的秒表计时系统成绩:姓名:郑灵莉学号:0907040209专业年级:电信工程09级学院:电气信息学院指导教师:邓魁时间:2012年12月29日基于51单片机的秒表一、摘要:在日常生活中,我们经常为了计时而采用秒表,在一些特殊场合,如体育比赛中,我们更希望计时更加精准。因此,希望我利用所学的知识设计一个计时器可以完成更精确的计时。它是利用51单片机控制LED数码管,实现00.00到99.99秒的计时,在Proteus软件上实现其电路设计和程序设计。它的设计也许比较简单,而且有可能达不到很多人的要求,但我相信通过我们过一步的学习,我们一定会制造出更好的系统,为社会大众服务。关键词:51单片机LED数码显示管二、设计要求1.完成秒/微秒的依次显示并正确计数2.秒/微秒各段个位满10正确进位3.利用四位一体数码管动态扫描完成秒、微秒显示:A:精度达10ms;B:可以启动;C:完成暂停4.秒表暂停记录数据后能在原有基础上继续计时,而不是复位重新开始。即可以随时记时、暂停后记录数据三、功能创新1.在Proteus上实现电路设计,并仿真成功,且在万用板上焊接、调试成功2.通过编程实现直接在LED数码管上显示计数值,并精确到1ms四、硬件电路设计1.系统设计框图根据设计要求与思路,在Proteus软件上设计和仿真该系统的设计方案。硬件电路由5部分组成,即单片机电路,时钟电路,复位电路,显示电路,显示器控制电路图3.12.单片机系统设计电路本次设计采用ATmel生产的AT89C51作为控制芯片。AT89系列与MCS-51系列相比具有两大优势:一,片内程序存储器采用闪速存储器,使程序的写入更加方便;二,提供了更小存储的芯片,使整个电路设计更小。它以较小的体积、良好的性价比备受亲睐。51单片机如下图:输入电压51单片机时钟电路复位电路显示电路显示器控制电路51单片机管脚图3.时钟电路单片机工作的时间基准是由时钟电路提供的,在单片机的XTAL1和XTAL2两个管脚接一只晶振和两只电容就构成了单片机的时钟电路。电路中,电容C1和C2对震荡电路具有微调的作用,通常的取值范围为(30+10)pF。石英晶振选择6MHz或12MHz都可以,其结果只是机器周期时间不同,影响计数器的初值,此设计选择12MHz。时钟电路如下图:时钟电路4.复位电路复位电路时单片机的初始化操作,其主要功能是把单片机从0000H单元开始执行程序。复位电路图如下:复位电路5.LED显示电路LED显示器的驱动是一个非常重要的问题。显示电路有LED显示器、段驱动电路和位驱动电路组成。此设计不采用段驱动芯片和位驱动芯片,直接由单片机的P0口、P2口驱动,实现动态显示。数码管管教图如下:7SEG-MPX4-CA数码管管教图6.按键电路本次设计利用按键电路来完成数码管显示的启动,暂停和恢复。其电路如下:五、软件设计与流程软件整体设计思路是以键盘扫描、中断处理和数码管显示作为三大模块。主程序调用显示扫描子程序,不断循环。采用定时器T1进行定时,外部中断及计数的开启与关闭受控于按键处理。(1)主程序设计流程图(2)定时器中断子程序流程图:中断入口保护现场调用显示子程序恢复现场秒计数加1毫秒计数单元清010ms加1开中断重置定时器初值100次到否?60到否?秒计数单元清0分计数加1调用拆字子程序返回YYNN(3)显示子程序流程图:六、仿真电路图元件规格数量单片机AT89C511按钮\3晶振12MHz1个起振电容33pF瓷片电容2个复位电容30uf25V电解电容1个排阻RESPACK-81个四位一体显示管共阳极1个子程序入口保护现场选通数码管开关数据存入缓冲区R0←#50H,DPTR←#DOT指针加1恢复现场返回判断一帧发送完毕?DIP封装插座40脚集成插座1个排线/若干仿真图P20P21P22P23P23P22P21P20XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C51PROGRAM=..\..\..\..\Users\zhenglinli\Desktop\电压表\SHUZI电压表.HEXC133pfC233pfX1CRYSTALC330uFR110k234567891RP1RESPACK-8R210k七、利用KeiluVision4生成机器码○1点击Project(专案)选单,选择弹出的下拉式选单中的“NewμVisionProject…",接着弹出一个标准Windows档案对话窗口,在“储存于"中选择您要存放的资料夹,一个项目最好存在一个资料夹内,若此资料夹不存在,请先建立它,或按“建立新资料夹”按钮以建立新资料夹。在“档名"中输入您的第二个项目名称,“存档类型"为uvproj,这是KeilμVision4项目档案预设的扩展名,以后只要直接点击此项目文件,即可打开此项目。○2选择所要的单芯片型号,这里仍然选择常用的Ateml公司的AT89S51。在弹出的“Description”方块内,会简单的介绍AT89S51有什么功能及特点。点选OK按钮后,会出现询问你是否需要拷贝标准的8051启动码程式到你的项目资料夹,并且将此档案加入项目“CopyStandard8051StartupCodetoProjectFolderandAddFiletoProject”,点选“否”后,就可以进行程序的编写了。○3然后点选“file”下的“New”建立空白文档。把源程序复制到里面,并点击“file”下的“Save”进行保存,然后取“Optionsfortarget‘Target1’…”,再来切换到Output标签页,只要勾选“CreateHEXFile”关闭即可。○4滑鼠在屏幕左边的SourceGroup1资料夹图示上右键单击,弹出一选单,如图2-8所示,在这裡能做在项目中增加减少档案等操作。选“AddFilestoGroup`SourceGroup1…"弹出档案窗口,选择刚刚储存的档案,按下Add按钮,将此.c档案加入到此专案中。按下close按钮,关闭档案窗口程序已加到此项目中了。八、电路调试与故障排除电路接好后,接上电源发现LED数码管显示很暗,可在数码管位选端接NPN三极管作为驱动,使数码管变亮。九、源程序代码ORG0000HLJMPSTARTORG0003H;外部中断0入口地址LJMPIN0BUTORG0013H;外部中断1入口地址LJMPIN1BUTORG001BH;定时器T1中断入口地址LJMPT1KOUSTART:MOVSP,#60HMOV50H,#00MOV51H,#00MOV52H,#00MOV53H,#00MOVTMOD,#10H;定时器T1初始化MOVTL1,#0F0H;设定初值MOVTH1,#0D8HMOVDPTR,#DOTSETBEA;开中断SETBIT0;开外部中断0控制位SETBEX0;开外部中断0中断SETBIT1;开外部中断1控制位SETBEX1;开外部中断1中断SETBTR1;开定时器T1控制位SETBET1;开定时器T1中断WJ:LCALLDISPLAY;调用显示子程序LJMPWJT1KOU:MOVTL1,#0F0H;重装定时初值MOVTH1,#0DBHLCALLNBCD;调用定时器中断服务程序RETIIN0BUT:SETBTR1;开定时器T1中断RETIIN1BUT:CLRTR1;关定时器T1中断RETINBCD:MOVA,50HMOV50H,AADDA,#1;毫秒加一MOV50H,ACJNEA,#0AH,EXIT;判断毫秒值是否为10MOV50H,#00;毫秒值清零MOVA,51HMOV51H,AADDA,#1MOV51H,ACJNEA,#0AH,EXITMOV51H,#00MOVA,52HMOV52H,AADDA,#1MOV52H,ACJNEA,#0AH,EXITMOV52H,#00MOVA,53HMOV53H,AADDA,#1MOV53H,ACJNEA,#0AH,EXITMOV53H,#00EXIT:RETDISPLAY:MOVR0,#50H;显示数据缓冲区,首选地址送R0MOVR3,#01HMOVA,R3LOOP:CJNER0,#52H,LOOP1MOVP2,AMOVA,@R0;取欲显示数据MOVCA,@A+DPTR;查得字形码SUBBA,#10000000BMOVP0,ALCALLDL1;调用延时子程序INCR0;指向下一个显示数据地址MOVA,R3JBACC.3,ELD1;扫描到第四个显示位否RLA;扫描到扫描位左移一位MOVR3,ASJMPLOOPLOOP1:MOVP2,AMOVA,@R0;取欲显示数据MOVCA,@A+DPTR;查得字形码MOVP0,ALCALLDL1;调用延时子程序INCR0;指向下一个显示数据地址MOVA,R3JBACC.3,ELD1;扫描到第四个显示位否RLA;扫描到扫描位左移一位MOVR3,ASJMPLOOPELD1:RETDOT:DB0C0H,0F9H,0A4H,0B0H,99HDB92H,82H,0F8H,80H,90HDL1:MOVR7,#50;延时子程序DL:MOVR6,#100DL6:DJNZR6,DL6DJNZR7,DLRETEND十、心得体会该设计在单片机系统上采用数码管显示,直观简洁;采用定时器中断,计时准确。可随时启动、停止、清零。设计、调试大型程序时,需先根据要求划分模块,优化结构;再根据各模块特点确定何为主程序,何为子程序,何为中断服务程序,相互间如何调用;再根据各模块性质和功能将各模块细化,设计出程序流程图;最后才根据各模块流程图编制具体程序。调试时应先调主程序,实现最基本最主要的功能,在此基础上再将各模块功能往主程序上堆砌,直至各模块联调、统调,实现全部功能。本例子将整个程序划分为按键扫描程序子程序,显示子程序,定时器中断服务子程序三大模块。三大模块运行协调一致,既保持了动态显示的稳定性,又保持了键盘的可靠性,还保持了秒计时的准确性,较好地实现了全部功能。通过一周的设计学习,让我了解了设计电路的程序,以及电子秒表的原理与设计。同时在软件设计编程上,让我了解到很多编程方面的技巧,并且使我对单片机的各个引脚的功能有更深入的了解,巩固了单片机的书面知识,发现了以往在学习中忽视的东西,明白了在实际的设计工作中只有书面知识是不足的,只有在自己的实践中才能发现问题并解决问题,从而不再犯眼高手低的错误。在此次的设计过程中,更进一步地熟悉了芯片的结构及掌握了各芯片的工作原理和其具体的使用方法。在设计电路中,是先仿真后连接实物图,但有时候仿真和电路连接并不是完全一致的。总的来说,通过这次的设计实验更进一步地增强了实验的动手能力,提高组成系统、编程、调试的动手能力。而且在此次设计中,我了解到了理论与实践相结合的重要性,对以后步入社会积累了很好的经验。十一、参考文献马潮詹卫前耿德根编《Atmel51原理及应用手册》清华大学出版社《单片机原理及应用》李建中西安电子科技大学出版社2008