《单片机课程设计数字电子钟 肖惠茜.doc》由会员分享,可在线阅读,更多相关《单片机课程设计数字电子钟 肖惠茜.doc(28页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、目 录1 设计课题任务、功能要求说明及方案介绍11.1 设计课题任务11.2 功能要求说明11.3 设计课题总体方案介绍及工作原理说明12 设计课题硬件系统的设计22.1 设计课题硬件系统各模块功能简要介绍22.2 设计课题电路原理图、PCB图、元器件布局图2 2.3 设计课题元器件清单33 设计课题软件系统的设计43.1 设计课题使用单片机资源的情况43.2 设计课题软件系统个模块功能简要介绍43.3 设计课题软件系统程序流程框图53.4 设计课题软件系统程序清单84 设计结论、仿真结果、误差分析、教学建议94.1 设计课题的设计结论及使用说明9 4.2 设计课题的仿真结果94.3 设计课题
2、的误差分析104.4 设计体会104.5 教学建议10结束语11致 谢12参考文献13附 录141 设计课题任务、功能要求说明及方案介绍1.1 设计课题任务 设计一个具有特定功能的电子钟。具有时间显示、报时等功能。并有时间设定,时间调整功能。1.2 功能要求说明 设计一个具有特定功能的电子钟。该电子钟上电或按键复位后能自动显示系统提示符“P.”, 进入时钟准备状态;第一次按电子钟启动/调整键,电子钟从0时0分0秒开始运行,进入时钟运行状态;再次按电子钟启动/调整键,则电子钟进入时钟调整状态,此时可利用各调整键调整时间,调整结束后可按启动/调整键再次进入时钟运行状态。1.3 设计课题总体方案介绍
3、及工作原理说明 本电子钟主要由单片机、8*1独立键盘、显示接口电路和复位电路构成,设计课题的总体方案如图1所示: 图1 总体设计方案图本电子钟的所有的软件、参数均存放在AT89S52的Flash ROM和内部RAM中,减少了芯片的使用数量简化了整体电路也降低了整机的工作电流。键盘采用动态扫描方式。利用单片机定时器及计数器产生定时效果通过编程形成数字钟效果,再利用数码管动态扫描显示单片机内部处理的数据,同时通过端口读入当前外部控制状态来改变程序的不同状态,实现不同功能。2 设计课题硬件系统的设计 2.1 设计课题硬件系统各模块功能简要介绍 本设计的硬件系统主要采用以下基本模块来实现,单片机最小系
4、统模块,输入模块、输出模块、电源模块。单片机最小系统模块:包括低功耗、高性能CMOS8位微控制器AT89S52;复位电路;晶振电路。本模块AT89S52系统控制核心,单片机系统复位由复位电路完成,单片机内部有一个高增益、反相放大器,其输入端为芯片引脚XTAL1,其输出端位位引脚XTAL2。通过这两个引脚在芯片外并接石英晶体振荡器和两只电容。这样就构成一个稳定的自激振荡器。 输入模块:本模块共用到了5个按键,1个电源开关,一个复位键,单片机运行期间,利用按键完成复位操作。3个按键独立式键盘,S2键控制电子钟的启动调整状态,S3键为加1键,S4键为减1键。且S2、S3、S4任一键都独自连一个I/O
5、(P1.0、P1.1、P1.2)口线,说明它们可以独立实现相应的电子钟功能。 输出模块:本次设计显示为8位,采用两个四位一体数码管(共阳极)作为显示窗口,既可以节约成本又能简化电路。数码管用8个PNP三极管驱动。电源、下载口模块:直接购买了市场上的USB供电及下载器。2.2 设计课题电路原理图、PCB图、元器件布局图电路原理图见附录BPCB图见附录C元器件布局图见附录D2.3 设计课题元器件清单设计课题元器件清单如表1所示。表1 设计所用元器件清单名称数量参数电阻3个1K数码管2个4位一体共阳数码管电阻1个200下载口1个普通插座1个40PIN电阻24个470按键9个三极管9个9012USB供
6、电线1根晶振1个12MHz电容2个33pF极性电容1个22F芯片1块AT89S52发光二极管8个六角开关1个蜂鸣器1个3 设计课题软件系统的设计3.1 设计课题使用单片机资源的情况设计课题使用单片机资源的情况如下: P0口输出数码管段选信号,P2口输出数码管位选信号;晶振12MHz;调整选择键SET_KEY:P1.0;通过选择键选择调整位,选中位闪烁;增加键ADD_KEY:P1.1;按一次使选中位加1;减少键DEC_KEY:P1.2;按一次使选中位减1;P3.1为蜂鸣器发声报时;50H-5FH;16个寄存器单元作为显示单元; 50H 用于控制秒基准时钟源的产生;51H 清零秒寄存器; 52H
7、清零分寄存器;53H 清零时寄存器; 5FH 用于秒个位;5EH 用于秒十位; 5DH 用于分个位;5CH 用于分十位; 5BH 用于时个位;5AH 用于时十位; 54H 用于控制调时闪烁;堆栈栈底:60H。3.2 设计课题软件系统个模块功能简要介绍 本设计的软件系统主要采用以下基本模块来实现,主程序、中断服务程序、键盘输入程序模块、数码管及其驱动模块和延时模块。 主程序:主要是用于对输入信号的处理、输出信号的控制和对各个功能程序模块的运用及其控制。 中断服务程序:主要是用于电子钟的准确运行、数据输入过程中的闪烁。键盘输入程序模块:主要是用于确定按键并得到特定的键码值。数码管及其驱动模块:主要
8、是用于驱动数码管及利用数码管显示时间。延时模块:程序中有两种延时子程序,一种是短延时用于判键按下等,一种是长延时。3.3 设计课题软件系统程序流程框图系统软件采用汇编语言按模块化方式进行设计,然后通过Keil软件开发平台将程序转变成十六进制程序语言,接着使用Proteous 进行仿真,读出显示数据。主程序流程框图如图2所示;加1子程序流程框图如图3所示;中断服务程序流程框图如图4所示;键盘扫描子程序流程框图如图5所示;显示子程序流程框图如图6所示;图2 主程序流程框图图3 加1子程序流程框图图4 中断子程序图5 键盘扫描子程序 图6 显示子程序3.4 设计课题软件系统程序清单程序清单见附录A4
9、 设计结论、仿真结果、误差分析、教学建议4.1 设计课题的设计结论及使用说明本设计为基于单片机的电子钟的设计。刚开始,我有很多地方理不清头绪,无从下手,但通过认真研究设计课题,找书上网查资料买元件,确定基本设计方案,对所用芯片功能进行查找、调试,然后画电路图制PCB板、打孔、溶铜、焊接等,真的经历了许多困难,却积累了很多宝贵的经验,本设计用2个四位一体的共阳数码管做为显示器,它显示时间值;设计中有三个按键,其中S2为启动/选择调整位置,S2为加控制键 S3为减控制键,当整点时间到时,蜂鸣器报警。这样的结果与设计要求完全相符,本设计成功。完成了设计任务。4.2 设计课题的仿真结果在Proteus
10、 ISIS的Debug菜单中选择Execute,运行程序,系统仿真结果如图7和图8所示。 实现功能: 可调整运行的电子钟具有三种工作状态:“P.”状态、运行状态、调整状态。 “P.”状态,依靠上电或按复位键进入,在此状态下,按S3、S4键均无效,按S2键有效,进入运行状态; 运行状态,在此状态下,按S3、S4键均无效,只有按S2键有效,按下S2键后,退出运行状态,进入调整状态; 调整状态,按S2键进入时、分、秒的闪烁,在此状态下,按S3(+1键)、S4(-1键)键均有效;调整结束后必须按S2键,即可退出调整状态,进入运行状态。在调整状态时长按S3、S4时可以连加及连减。 时间显示格式为:时-分
11、-秒; 图7 “P.”运行状态仿真图8 时钟运行状态仿真4.3 设计课题的误差分析该电子钟在运行中存在一定的误差,误差产生有三种可能,首先是采用的计时方案是软件计时的,计时优势利用中断来实现。而当电子钟运行时间1秒时,又得去执行中断程序,这个过程是需要时间的,所以就产生了一定的误差,当然这个误差是避免不了的,其次还有硬件系统也有一定的影响。第三,设计用到12MHz的晶振,计算是满20次为一秒钟,但实际会慢一些。4.4 设计体会本次课程设计,让我受益匪浅,认识到了自己的许多缺点和不足,使我深深的感受到了理论联系实际的必要性及其重要性。在我们以往的学习过程中,我们刻意地去加强理论的基础,对于一个程
12、序我们只求它在运行时没有出错,我们便以为我们的程序成功了,岂不知它能否在硬件结构中得以实现,则是另外一回事,这就要求我们的动手能力,如果无法使软件与硬件实现有机的结合,那么再好的程序也只是一堆废字符。4.5 教学建议经过一个学期王韧老师教导的的单片机的学习,我掌握了很多单片机学习的宝贵经验,尤其在编程的思路和PCB实物的制作上面。编程思路是整个程序的灵魂,没有编程思路,程序就不会编出来,就失去了编程的意义。在开始编程之前,想好编程的思路,画好程序流程图,编程能力才会提高,编程的过程才会顺畅,程序的质量才会提高。在王韧老师的教学过程中,幽默轻松的教学方式常常让课堂气氛很活跃,幽默诙谐,授课内容条
13、理清晰,经常运用各种实例,娓娓道来,给人印象深刻。王老师在课堂上也十分注重和同学们的互动,经常会用一些亲身实践的经验为例,让同学们在基于事实的基础上更好的理解相关理论,充分做到了理论与实际的结合,既形象生动,又丰富有趣。结束语 通过这次对数字电子钟的设计与制作,让我了解了设计电路的程序,也让我了解了关于电子钟的原理与设计理念。在此次的电子钟设计过程中,更进一步地熟悉了51系列单片机芯片的结构及工作原理,提高了自己的自学能力,这对以后的学习生活有很大的帮助。在这次的设计过程中遇到了很多困难,在自己的努力和同学的帮助下得到了解决,使我受益匪浅,最重要的是提高了自己的动手能力。过程是艰辛的,但结果是
14、令人兴奋的,看着自己设计的东西一分一秒的走着,心里觉得非常开心,这段时间的努力没有付诸东流。此次课程设计让我明白不论是做课程设计,做实验还是在今后的学习中,都应该有一种坚定不移的信念,只有坚持不懈才能达到自己的最终目标致 谢 通过不断努力,终于完成了此次单片机的课程设计。在此,首先感谢王韧老师,正是他在万忙之中还抽出宝贵的时间对我们进行精心的指导,才使我顺利完成了此次单片机课程设计。同时也感谢各位同学和老师对我提供的帮助。使我在此次设计中学到了许多宝贵的知识和经验。在此,衷心地感谢你们!参考文献 1张洪润,兰清华.单片机应用技术教程M.北京:清华大学出版社,1997Zhanghong Run,
15、 Lan Qinghua. microcomputer application technology tutorial M. Beijing: Tsinghua University Press, 19972何立民.单片机高级教程M.北京:北京航空航天大学出版社,2000He Limin. microcontroller Advanced Tutorial M. Beijing: Beijing Aerospace University Press, 20003马忠梅.单片机C程序设计M.北京:北京航空航天大学出版社,2007Ma Zhongmei. microcontroller C pro
16、gramming M. Beijing: Beijing Aerospace University Press, 20074李朝青.单片机原理及接口技术M.北京:北京航空航天大学出版社,1998Li Zhaoqing. SCM Theory and Interface Technology M. Beijing: Beijing Aerospace University Press, 1998 5 代启化.基于Proteus的电路设计与仿真J.现代电子技术.2006,第19期. Dai QiHua.Proteus-based circuit design and simulation J. M
17、odern electronic technology.2006,No.19附 录附录A;-;本电子钟实现24小时制,8位数码管显示时分秒,可整点报时;显示格式:00-00-00(设置小时十位为0时,不显示);通过3只按键来调整时间;调整选择键SET_KEY:P1.0;通过选择键选择调整位,选中位闪烁;增加键ADD_KEY:P1.1;按一次使选中位加1;减少键DEC_KEY:P1.2;按一次使选中位减1;如果长按ADD_KEY或DEC_KEY,可进行调时、调分快进快减,并停止闪烁;如果选中位是秒,则按增加键或减少键可实现,但无调时快进和快减功能;P0口输出数码管段选信号,P2口输出数码管位选信
18、号;晶振12MHz;P3.1为蜂鸣器发声报时;编程人:肖惠茜 编写日期:2012年12月18日修改日期(最终):2012年12月23日;-/*程序入口*/ORG0000HLJMPSTARTORG000BHLJMPINTT0ORG0100H /*显P.程序*/START:MOVR6,#2;闪烁次数 MOVA,#0FEH;位选TT:MOVP2,AMOVP0,#0CH;段码“P.”LCALLDELAYMOVP2,#0FFHDJNZR6,TTLCALLDELAYLCALLDELAY1RRAJBP1.0,TT;按键是否按下,没按下则转移LCALLDELAY;延时去抖JNBP1.0,KAI;再次判断按键是
19、否按下KAI:SETBP1.0CLRA;状态恢复MOVP0,#0FFHLCALLDELAY1SETB48H;用于调时闪烁标志SETB47H;用于产生脉冲用于调时快进的脉冲MOVR1,#0;按键功能标志:0计时、1调时、2调 分、3调秒;-;清16位寄存器及初始化;50H用于控制秒基准时钟源的产生;51H 清零秒寄存器;52H 清零分寄存器;53H 清零时寄存器;5FH 用于秒个位;5EH 用于秒十位;5DH 用于分个位;5CH 用于分十位;5BH 用于时个位;5AH 用于时十位;54H 用于控制调时闪烁;-MOVR0,#50H;初始化MOVR6,#10HCQ:MOVR0,#00H ;清寄存器
20、INCR0DJNZR6,CQMOVIP,#02HSETBEASETBET0MOVTMOD,#01H;设定定时器0工作方式1MOVTH0,#3CHMOVTL0,#0B0H;设置定时初值,定时50msSETBTR0;启动定时器0MOVSP,#60H;堆栈初始化/*主程序*/MAIN:LCALLDISPLAYLCALLKEY_SCANJZMAINLCALLSET_KEYJB46H,MAIN ;如果已进行调时快进,则不再执行下 面的调整LCALLADD_KEY ;调用增加按键处理子程序,加一LCALLDEC_KEY ;调用减少按键处理子程序,减一SETBTR0 LJMPMAIN ;返回/*显示处理程序
21、*/DISPLAY:MOVA,51HANLA,#0FHMOV5FH,A ;转换出秒个位,存入5FHMOVA,51HANLA,#0F0HSWAPAMOV5EH,A ;转换出秒十位,存入5EHJB46H,MIN ;如果调时快进则跳过闪烁处理子程序CJNER1,#3,MIN ;如果R1为3,闪烁秒位待调整JB48H,MINMOV5FH,#0AH ;使该位为10,查表得到使该位不显示MOV5EH,#0AHMIN:MOVA,52HANLA,#0FHMOV5DH,A ;转换出分个位,存入5DHMOVA,52HANLA,#0F0HSWAPAMOV5CH,A ;转换出分十位,存入5CHJB46H,HOUR ;
22、如果调时快进则跳过闪烁处理子程序CJNER1,#2,HOUR ;如果R1为2,闪烁分位待调整JB48H,HOURMOV5DH,#0AHMOV5CH,#0AHHOUR:MOVA,53HANLA,#0FHMOV5BH,A;转换出时个位,存入5BHMOVA,53HANLA,#0F0HSWAPAMOV5AH,A;转换出时十位,存入5AHJB46H,DISP;如果调时快进,则跳过闪烁处理子程序CJNER1,#1,DISP ;如果R1为1,则闪烁时位待调整JB48H,DISPMOV5BH,#0AHMOV5AH,#0AH/*数码管动态扫描显示*/DISP:MOVDPTR,#TABMOVA,5FHMOVCA,
23、A+DPTRMOVP0,ACLRP2.0LCALLDELAYSETBP2.0 ;显示秒个位MOVA,5EHMOVCA,A+DPTRMOVP0,ACLRP2.1LCALLDELAYSETBP2.1 ;显示秒十位MOVA,#0BFHMOVP0,ACLRP2.2LCALLDELAYSETBP2.2 ;显示“-”MOVA,5DHMOVCA,A+DPTRMOVP0,ACLRP2.3LCALLDELAYSETBP2.3 ;显示分个位MOVA,5CHMOVCA,A+DPTRMOVP0,ACLRP2.4LCALLDELAYSETBP2.4 ;显示分十位MOVA,#0BFHMOVP0,ACLRP2.5LCALL
24、DELAYSETBP2.5 ;显示“-”MOVA,5BHMOVCA,A+DPTRMOVP0,ACLRP2.6LCALLDELAYSETBP2.6 ;显示时个位MOVA,5AHMOVCA,A+DPTRMOVP0,ACLRP2.7LCALLDELAYSETBP2.7 ;显示时十位RET/*定时中断1s程序*/INTT0:PUSHACC ;保护现场PUSHPSWMOVTH0,#3CHMOVTL0,#0B0HCPL47H ;产生脉冲用于调时快进INC54HMOVA,54HCJNEA,#10H,ADD_TIME ;产生0.5秒,用于调时闪烁CPL48H ;取反调时闪烁标志位MOV54H,#00HADD_
25、TIME:INC50HMOVA,50HCJNEA,#10H,ZD;整点报时时蜂鸣器响延迟时间SETBP3.1 ;关蜂鸣器ZD:CJNEA,#20,RETI1 ;产生1秒时间MOV50H,#00H ;1秒时间到,清零50HMOVA,51HADDA,#01HDAA ;十进制调整MOV51H,ACJNEA,#60H,RETI1MOV51H,#00H ;一分钟时间到MOVA,52HADDA,#01HDAAMOV52H,ACJNEA,#60H,RETI1CLRP3.1MOV52H,#00H ;一小时到,开蜂鸣器,清分显示MOVA,53HADDA,#01HDAAMOV53H,ACJNEA,#24H,RET
26、I1MOV53H,#00H ;24小时到,清时显示RETI1:POPPSW ;恢复现场POPACC ;中断返回RETI/*键盘扫描程序*/;R4设置为00H是为了在进入长按处理前加长延时,以区分长按与短按;-KEY_SCAN:CLR46H ;关闭调时快进标志MOVP1,#0FFH ;将P1口设置成输入状态MOVA,P1CPLAANLA,#07H ;取P1口低3位JZEXITLCALLDELAY ;延时去抖MOVA,P1 ;重新判断CPLAANLA,#07HJZEXITMOVR5,AMOVR4,#00H ;用于控制调时快进速度LOOP:LCALLDISPLAY ;进入长按处理MOVA,P1CPL
27、AJB47H,LOOP1INCR4 ;调时快进间隔时间基准加1LOOP1:CJNER1,#03H,LOOP2 ;如果调秒时长按,则不处理LJMPLOOP3LOOP2:CJNER4,#99H,LOOP3MOVR4,#70H ;确定长按后,加快调时快进速度SETB46HLCALLADD_KEYLCALLDEC_KEYLOOP3:JNZLOOP ;等待按键释放MOVA,R5 ;输出键值EXIT:RET/*延时子程序*/DELAY:MOVR7,#200DJNZR7,$RETDELAY1:MOVR3,#50HMOVTMOD,#00HMOVTH1,#63HMOVTL1,#18HSETBTR1LP1:JBC
28、TF1,LP2LJMPLP1LP2:MOVTH1,#63HMOVTL1,#18HDJNZR3,LP1RET/*选择按键处理子程序*/SET_KEY:CJNER5,#01H,EXIT1 ;选择按键键值INCR1 ;调整选择功能标志加一CJNER1,#4,EXIT1MOVR1,#0MOV54H,#00H ;调时闪烁清零EXIT1:RET/*加1子程序*/ADD_KEY:CJNER5,#02H,EXIT2 ;加1键值CLRTR0CJNER1,#01H,NEXT1 ;选择按键功能标志为1调时, 否则跳出MOVA,53HADDA,#01HDAAMOV53H,ACJNEA,#24H,EXIT2MOV53H
29、,#00HNEXT1:CJNER1,#02H,NEXT2 ;选择按键功能标志为2调分, 否则跳出MOVA,52HADDA,#01HDAAMOV52H,ACJNEA,#60H,EXIT2MOV52H,#00HNEXT2:CJNER1,#03H,EXIT2 ;选择按键功能标志为3调秒, 否则跳出MOVA,51HADDA,#01HDAAMOV51H,ACJNEA,#60H,EXIT2MOV51H,#00HEXIT2:RET/*减1子程序*/DEC_KEY:CJNER5,#04H,EXIT3 ;减1按键键值CLRTR0CJNER1,#01H,NEXT3 ;选择按键功能标志为1调时, 否则跳出MOVA,
30、53HADDA,#99HDAAMOV53H,ACJNEA,#99H,EXIT3MOV53H,#23HNEXT3:CJNER1,#02H,NEXT4 ;选择按键功能标志为2调分, 否则跳出MOVA,52HADDA,#99HDAAMOV52H,ACJNEA,#99H,EXIT3MOV52H,#59HNEXT4:CJNER1,#03H,EXIT3 ;选择按键功能标志为3调秒, 否则跳出MOVA,51HADDA,#99HDAAMOV51H,ACJNEA,#99H,EXIT3MOV51H,#59HEXIT3:RET/*数码管字形编码表*/TAB:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH;0,1,2,3,4,5,6,7,8,9,不显示END附录 B附录 C附录 D附录E:实物图