1、时钟计时器课程设计 课程设计报告微机原理与单片机课程设计微机原理与单片机课程设计单片机课程设计时钟计时器的设计 专业电气工程及其自动化 班级133521 姓名刘合琛 尹锥 丁大胜 学号133521016 133521017 133521026 指导教师万青2015年 12月时钟计时器的设计1.引 言1.1.设计意义随着时代的进步和发展,单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为一种比较成熟的技术,本文将介绍一种基于单片机控制的数字时钟计时器,本数字时钟计时器,可以显示时、分、秒,以24小时计时方式运行,能整点提醒(短蜂鸣,次数代表整点时间),使用按键开关可实现时、分调整,秒表
2、/时钟功能转换,省电(关闭显示)及定时设定提醒(蜂鸣器)等功能。人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字时钟计时器就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从单片机技术入手,一切向着数字化控制,智能化控制方向发展。本设计所介绍的数字时钟计时器与传统的计时器相比,具有读数方便,操作简单,计时精准,还能实现整点提醒,定时提醒等功能。其输出时间采用数字显示,主要用于对时间要求精度高的场所,或科研实验室使用,该设计控制器使用单片机AT89C52,用6位共阳极LED数码管以串口传送数
3、据,实现数字显示功能,能准确达到以上要求。1.2.系统功能要求用单片机及6位LED数码管显示时、分、秒,以24小时计时方式运行,能整点提醒(短蜂鸣,次数代表整点时间),使用按键开关可实现时、分调整,秒表/时钟功能转换,省电(关闭显示)及定时设定提醒(蜂鸣器)等功能。2.方案设计1.3.数字时钟计时器设计方案论证为了实现LED显示器的数字显示,可以采用静态显示法和动态显示法。由于静态显示法需要数据锁存器等硬件,接口复杂一些,又考虑到时钟显示只有6位,且系统没有其他复杂的处理任务,所以决定采用动态扫描法实现LED的显示。单片机采用易购的AT89C52系列,这种单片机具有足够的空余硬件资源,可以实现
4、其他的扩充功能。如果考虑使用电池供电,则可采用LV系列单片机。1.4.硬件系统的总体设计框图时钟计时器硬件系统的总体设计方框图如图2-1所示,控制器采用单片机AT89C52,数字输出采用6位共阳极LED数码管以动态扫描法实现数字显示。图2-1 硬件系统的总体设计方框图3硬件设计时钟计时器的硬件电路如图2.2所示。该电路采用AT89C52单片机最小化应用设计,采用共阳7段LED显示器,P0口段码数据,P2.0P2.5口作列扫描输出,P1.0,P1.1,P1.2,P1.3口接4个按钮开关,用于调时及功能设置,P1.7端口接5V的小蜂鸣器,用于按键发音及定时提醒、整点到时提醒等,为了提供共阳LED数
5、码管的列扫描驱动电压,用三极管9012做电源驱动输出,采用12MHZ晶振,可提高秒计时的精确性。图3-1 时钟计时器的硬件电路2.软件设计1.5.主程序本设计中计时采用定时器T0中断完成,秒表使用定时器T1中断完成。主程序循环调用显示子程序和查键子程序,当端口有开关按下时,转入相应功能程序。其主程序执行流程如图2.3所示。图4-1 主程序流程图1.6.显示子程序时间显示子程序每次显示6个连续内存单元的十进制BCD码数据,首地址在调用显示程序时先指定。内存中50H55H为闹钟定时单元,60H66H为秒表计时单元,70H75H为时钟显示单元。由于采用7段共阳极LED数码管动态扫描实现数据显示,所以
6、显示用十进制BCD码数据的对应段码存放在ROM表中。显示时,先取出内存地址中的数据,然后查得对应的显示用段码从P0口输出,P2口将对应的数码管选中供电,就能显示该地址单元的数据值。为了显示小数点及“”、“A”等特殊字符,在显示班级和计时时应采用不同的显示子程序。1.7.定时器T0中断服务程序定时器T0用于时间计时。定时溢出中断周期设为50ms,中断进入后先进行定时中断初值校正,当中断累计20次时,对秒计数单元进行加1操作。时钟计数单元地址分别在70H71H(秒)、76H77H(分)、78H79H(时)中,最大计时值为23时59分59秒。7AH单元内存放“熄灭符”数据(#0AH),用于时间调整时
7、的闪烁功能。在计数单元中,采用十进制BCD码计数,满10进位。T0中断计时程序流程图如图2.4所示。图4-2 T0中断计时程序流程图1.8.定时器T1中断服务程序 T1中断程序用于指示时间调整单元数字的闪烁或秒表计数,在时间调整状态下,每过0.3s左右,将对应调整单元的显示数据换成“熄灭符”数据(#0AH).这样,在调整时间时,对应调整单元的显示数据会间隔闪亮。在做秒表计时时,每10ms中断一次,计数单元加1,每100次为1s.秒表计数单元地址在60H61H(10毫秒)、62H63H(秒)、64H65H(分)中,最大计数值为99分59.99秒。T1中断服务程序流程图如图2.5所示。 图4-3
8、T1中断服务程序流程图1.9.调时功能程序调时功能程序的设计方法是:按下P1.0口按键,若按下时间小于1s,则进入省电状态(数码管不亮,时钟不停);否则进入调分状态,等待操作,此时计时器停止走动。当再按下P1.0口按键时,若按下时间小于0.5s,则时间加1分钟;若按下时间大于0.5s,则进入小时状态。按下P1.1口按键时,可进行减1调整。在消失调整状态下,当按键按下的时间大于0.5s时,退出时间调整状态,时钟从0s开始计时。1.10.秒表功能程序在正常时钟状态下,若按下P1.1口按键,则进行时钟/秒表显示功能的转换,秒表中断计时程序启动,显示首地址改为60H,LED将显示秒表计时单元60H-6
9、5H中的数据。按下P1.2口的按键开关,可实现秒表清0、秒表启动、秒表暂停功能;当再按下P1.1口按键时,关闭T1秒表中断计时,显示首址又改为70H,恢复正常时间的显示功能。1.11.闹钟时间设定功能程序在正常时钟状态下,若按下P1.3口的按键开关,则进入这顶闹时调分状态,显示首地址改为50H。LED将显示50H-55H中的闹钟设定时间,显示式样为00:00,其中高2位代表时,低2位代表分,在定时闹铃时精确到分。按P1.2键,分加1;按P1.0键,分减1.若再按P1.3键,则进入时调整状态,显示式样为00:00:,再按P1.2键,时加1,按P1.0键,时减1.按P1.1键,闹铃有效,显示式样变
10、为00:00:-0;再按P1.1键,闹铃无效,显示式样又变为00:00:。再按P1.3键,调整闹钟时间结束,回复正常时间的显示。在闹铃时,可按一下P1.3口的按键开关使蜂鸣停止,不按则蜂鸣器将鸣叫1min后自行停止。在设定闹钟后,若要取消闹时功能,则可按下P1.3键,当听到“滴”的一声时表明已取消了闹铃功能。 2.调试及性能分析1.12.硬件调试在上电前先对照硬件电路原理图检查电路板的焊接情况,看有没有虚焊及漏焊的地方,检查的方式是用万用表欧姆档对照电路原理图一块块的检查,最主要的是对数码管之间连接的检查,这一块接线较多,检查时一定要每一个管脚都对应上,比如a脚对a脚,b脚对b脚,按此顺序一步
11、步检查。接着就是列驱动电路的检查也就是三极管的检查,先要弄清三极管的每个脚对应的是哪个极,然后再按线路检查。最后是单片机的检查,先要检查是否接入正负极,其次要检查晶振是否接上,后再检查其他部位。待所有都检查完后再上电,此时一般都没什么问题,都能得出实验现象。我在调试时主要问题是晶振没有接入,所以刚开始只是显示0而没其他现象,后来接入后就好了。1.13.软件调试 软件调试是在Keil C51编译器下进行的,主要改的地方是日期显示地方。在提供的汇编源程序中,显示日期和学号的子程序中将STAB表,启动时显示2006年12月23日、C04-2-28(学号)用STAB:DB0AH,0AH,0AH,0AH
12、,0AH,0AH,08H,02H,0CH,02H,0CH,04H,00H,0BH,0AH,0AHDB03H,02H,0CH,02H,01H,0CH,06H,00H,00H,02H,0AH,0AH,0AH,0AH,0AH,0AH改为STAB:DB0AH,0AH,0AH,0AH,0AH,01H,05H,00H,02H,02H,05H,03H,08H,00H,0AH,0AHDB00H,02H,0CH,05H,00H,0CH,01H,01H,00H,02H,0AH,0AH,0AH,0AH,0AH,0AH通过编译可以正确显示学号:083522051 日期:2011-5-20,然后通过下载工具将此程序烧到
13、单片机内。1.14. 性能分析根据设计程序的分析可知,LED显示器动态扫描的频率约为167Hz,实际使用观察时完全没有闪烁。由于计时中断中加了中断延时误差处理,所以实际计时精度很高,可满足多种场合要求。根据设计,可以设计一个滚动显示子程序,使制作日期,学号以一定速度滚动显示。2.设计总结通过此次的单片机课程设计,使我学到了很多知识,也提高了动手实践能力。在这次课程设计中,我们首先要进行原理图的设计,然后把所有原件检测和整理好,待所有的元器件配齐后再进行元件的布局,布局的好坏很重要,一方面它会影响到整体的美观性,另一方面也影响焊接的难易程度及用线的数量。接着就是要对原理图进行分析,这是至关重要的
14、环节,原理是否弄懂直接关系到实验能不能成功,原理图的分析主要包括弄懂各芯片、各器件的功能,比如说要清楚74LS244芯片的各引脚图的功能,还要知道6位LED数码管的引脚图以及三极管的各个脚对应的是哪个极等问题。在这些都弄懂后接下来就是焊接了,,焊接时既要要焊的牢,又要焊的美观,这些都需要在焊接过程中十分注意。焊接工作完成后需要进行调试,调试一般情况下都会出现各种各样的问题,幸运的是,我第一次调试就成功了,从而证明了硬件没问题啦。剩下就是软件的调试,软件的调试比较简单,主要看懂程序的每一部分,并正确修改有错误的地方就行啦。本次课程设计时间虽然不是很长,但它是一个很好的实践机会。上学期我们对单片机
15、的理论进行了学习,使我对单片机有了初步的了解,通过本次的课程设计使我对单片机的理解更深刻了,许多的知识动手后掌握的也更好。总之,通本次课程设计,使我收获很大,我也会在今后的学习中加强这方面知识的学习和掌握。2.附 录A:汇编源程序; AT89C52时钟程序 ;*;以下程序能用于24小时计时,能作为秒表使用,能定时闹铃1分钟(也可关).;使用方法:开机后在00:00:00起开始计时,(1)长按P1.0进入调分状态:分单元闪烁;按P1.0加1,按P1.1减1.再长按P1.0进入时调整状态,时单元闪烁,加减调整同调分.;按长按退出调整状态. (2)按下P1.1进入秒表状态:按P1.2暂停,再按P1.
16、2秒表清零,再按;P1.2秒表又启动,按P1.1退出秒表回到时钟状态. (3)按P1.3进入设定闹时状态: 00:00: -,可进;行分设定,按P1.2分加1,再按P1.3为时调整,00:00:- ,按P1.2时加1,按P1.1闹铃有效,显示为00:00:-0,再按;P1.1闹铃无效(显示00:00:- ,),按P1.3调闹钟结束.在闹铃时可按P1.3停闹,不按闹铃1分钟.;定时器T0、T1溢出周期为50MS,T0为秒计数用, T1为调整时闪烁及秒表定时用,;P1.0、P1.1、P1.2、P1.3为调整按钮,P0口为字符输出口,P2为扫描口,P1.7为蜂呜器口,采用共阳显示管。;50H-55H
17、为闹钟定时单元,60H-65H为秒表计时单元,70H-75H为显示时间单元,76H-79H为分时计时单元。;03H标志=0时钟闪烁,=1秒表, 05H=0,不闹铃,=1要闹铃. 07H每秒改变一次,用作间隔呜叫.;*; DISPFIRST EQU 30H ;显示首址存放单元 BELL EQU P1.7 ;小喇叭 CONBS EQU 2FH ;存放报时次数;*; 中断入口程序 ;*; ORG 0000H ;程序执行开始地址 LJMP START ;跳到标号START执行 ORG 0003H ;外中断0中断程序入口 RETI ;外中断0中断返回 ORG 000BH ;定时器T0中断程序入口 LJM
18、P INTT0 ;跳至INTTO执行 ORG 0013H ;外中断1中断程序入口 RETI ;外中断1中断返回 ORG 001BH ;定时器T1中断程序入口 LJMP INTT1 ;跳至INTT1执行 ORG 0023H ;串行中断程序入口地址 RETI ;串行中断程序返回;*; 以下程序开始 ;*;整点报时用QQQQ : MOV A,#10H MOV B,79H MUL AB ADD A,78H MOV CONBS,A BSLOOP: LCALL DS20MS LCALL DL1S LCALL DL1S LCALL DL1S DJNZ CONBS,BSLOOP CLR 08H ;清整点报时标
19、志 AJMP START1;*; 主程序开始 ;*; START: LCALL ST ;上电显示年月日及班级学号 MOV R0,#00H ;清00H-7FH内存单元 MOV R7,#80H ; CLEARDISP: MOV R0,#00H ; INC R0 ; DJNZ R7,CLEARDISP ; MOV 20H,#00H ;清20H(标志用) MOV 7AH,#0AH ;放入熄灭符数据 MOV TMOD,#11H ;设T0、T1为16位定时器 MOV TL0,#0B0H ;50MS定时初值(T0计时用) MOV TH0,#3CH ;50MS定时初值 MOV TL1,#0B0H ;50MS定
20、时初值(T1闪烁定时用) MOV TH1,#3CH ;50MS定时初值 SETB EA ;总中断开放 SETB ET0 ;允许T0中断 SETB TR0 ;开启T0定时器 MOV R4,#14H ;1秒定时用计数值(50MS20) MOV DISPFIRST,#70H ;显示单元为70-75H;以下主程序循环 START1: LCALL DISPLAY ;调用显示子程序 JNB P1.0,SETMM1 ;P1.0口为0时转时间调整程序 JNB P1.1,FUNSS ;秒表功能,P1.1按键调时时作减1加能 JNB P1.2,FUNPT ;秒表STOP,PUSE,CLR JNB P1.3,TSF
21、UN ;定时闹铃设定 JB 08H, QQQQ AJMP START1 ;P1.0口为1时跳回START1; FUNPT: LJMP FUNPTT;以下闹铃时间设定程序,按P1.3进入设定 TSFUN: LCALL DS20MS JB P1.3,START1 ; WAIT113: JNB P1.3,WAIT113 ;等待键释放 JB 05H,CLOSESP ;闹铃已开的话,关闹铃 MOV DISPFIRST,#50H ;进入闹铃设定程序,显示50-55H闹钟定时单元 MOV 50H,#0CH ;- 闹铃设定时显示格式00:00: - MOV 51H,#0AH ;黑; DSWAIT: SETB
22、EA LCALL DISPLAY JNB P1.2,DSFINC ;分加1 JNB P1.0,DSDEC ;分减1 JNB P1.3,DSSFU ;进入时调整 AJMP DSWAIT; CLOSESP: CLR 05H ;关闹铃标志 CLR BELL AJMP START1 DSSFU: LCALL DS20MS ;消抖 JB P1.3, DSWAIT LJMP DSSFUNN ;进入时调整; SETMM1: LJMP SETMM ;转到时间调整程序SETMM; DSFINC : LCALL DS20MS ;消抖 JB P1.2, DSWAIT DSWAIT12: LCALL DISPLAY
23、;等键 释放 JNB P1.2, DSWAIT12 CLR EA MOV R0,#53H ; LCALL ADD1 ;闹铃设定分加1 MOV A,R3 ;分数据放入A CLR C ;清进位标志 CJNE A,#60H,ADDHH22 ; ADDHH22: JC DSWAIT ;小于60分时返回 ACALL CLR0 ;大于或等于60分时分计时单元清0 AJMP DSWAIT DSDEC : LCALL DS20MS ;消抖 JB P1.0, DSWAIT DSWAITEE: LCALL DISPLAY ;等键 释放 JNB P1.0, DSWAITEE CLR EA MOV R0,#53H ;
24、 LCALL sub1 ;闹铃设定分减1 LJMP DSWAIT;以下秒表功能/时钟转换程序;按下P1.1 可进行功能转换 FUNSS: LCALL DS20MS JB P1.1,START11 WAIT11: JNB P1.1,WAIT11 CPL 03H JNB 03H,TIMFUN MOV DISPFIRST,#60H ;显示秒表数据单元 MOV 60H,#00H MOV 61H,#00H MOV 62H,#00H MOV 63H,#00H MOV 64H,#00H MOV 65H,#00H MOV TL1,#0F0H ;10MS定时初值() MOV TH1,#0D8H ;10MS定时初
25、值 SETB TR1 SETB ET1 START11: LJMP START1 TIMFUN:MOV DISPFIRST,#70H ;显示时钟数据单元 CLR ET1 CLR TR1 START12: LJMP START1;以下秒表暂停清零功能程序;按下P1.2暂停或清0,按下P1.1退出秒表回到时钟计时 FUNPTT: LCALL DS20MS JB P1.2,START12 WAIT22: JNB P1.2,WAIT21 CLR ET1 CLR TR1 WAIT33: JNB P1.1,FUNSS JB P1.2,WAIT31 LCALL DS20MS JB P1.2,WAIT33 W
26、AIT66: JNB P1.2,WAIT61 MOV 60H,#00H MOV 61H,#00H MOV 62H,#00H MOV 63H,#00H MOV 64H,#00H MOV 65H,#00H WAIT44: JNB P1.1,FUNSS JB P1.2,WAIT41 LCALL DS20MS JB P1.2,WAIT44 WAIT55: JNB P1.2,WAIT51 SETB ET1 SETB TR1 AJMP START1;以下键等待释放时显示不会熄灭用 WAIT21: LCALL DISPLAY AJMP WAIT22 WAIT31: LCALL DISPLAY AJMP WA
27、IT33 WAIT41: LCALL DISPLAY AJMP WAIT44 WAIT51: LCALL DISPLAY AJMP WAIT55 WAIT61: LCALL DISPLAY AJMP WAIT66; 1秒计时程序 ;T0中断服务程序 INTT0: PUSH ACC ;累加器入栈保护 PUSH PSW ;状态字入栈保护 CLR ET0 ;关T0中断允许 CLR TR0 ;关闭定时器T0 MOV A,#0B7H ;中断响应时间同步修正 ADD A,TL0 ;低8位初值修正 MOV TL0,A ;重装初值(低8位修正值) MOV A,#3CH ;高8位初值修正 ADDC A,TH0
28、; MOV TH0,A ;重装初值(高8位修正值) SETB TR0 ;开启定时器T0 DJNZ R4, OUTT0 ;20次中断未到中断退出 ADDSS: MOV R4,#14H ;20次中断到(1秒)重赋初值 CPL 07H ;闹铃时间隔呜叫用 MOV R0,#71H ;指向秒计时单元(71H-72H) ACALL ADD1 ;调用加1程序(加1秒操作) MOV A,R3 ;秒数据放入A(R3为2位十进制数组合) CLR C ;清进位标志 CJNE A,#60H,ADDMM ; ADDMM: JC OUTT0 ;小于60秒时中断退出 ACALL CLR0 ;大于或等于60秒时对秒计时单元清
29、0 MOV R0,#77H ;指向分计时单元(76H-77H) ACALL ADD1 ;分计时单元加1分钟 MOV A,R3 ;分数据放入A CLR C ;清进位标志 CJNE A,#60H,ADDHH ; ADDHH: JC OUTT0 ;小于60分时中断退出 ACALL CLR0 ;大于或等于60分时分计时单元清0 LCALL DS20MS ;正点报时 SETB 08H MOV R0,#79H ;指向小时计时单元(78H-79H) ACALL ADD1 ;小时计时单元加1小时 MOV A,R3 ;时数据放入A CLR C ;清进位标志 CJNE A,#24H,HOUR ; HOUR: JC OUTT0 ;小于24小
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1