1、单片机完整电子时钟设计报告一作品简介2二单片机系统原理图及工作原理描述2三设计过程中碰到的问题及解决方法4四测试数据及误差分析4五总结5六程序模块框图5七程序清单7单片机的个性化电子钟设计报告一作品简介 该作品是个性化电子钟设计,技术上主要用单片机(AT89S52)主控,4位LED数码显示,分别显示“小时:分钟”。该作品主要用于24小时计时显示,能整时报时,能作为秒表使用,能定时闹铃1分钟。使用方法:开机后显示日期,学号,时钟在00:00:00起开始计时。(1)长按进入调分状态:分单元闪烁,按加1,按减1.再长按进入时调整状态,时单元闪烁,加减调整同调分.按长按退出调整状态。(2)按进入设定闹
2、时状态: 12:00: ,可进行分设定,按分加1,再按为时调 整,按时加1,按调闹钟结束.在闹铃时可按停闹,不按闹铃1分钟。(3)按下进入秒表状态:再按秒表又启动,按暂停,再按秒表清零,按 退出秒表回到时钟状态。二单片机系统原理图及工作原理描述(1)总原理图 如原理图所示,硬件系统主要由单片机最小应用系统、LED数码管显示模块组成。(2)各个模块说明1.单片机最小系统 AT89S52是一款非常适合单片机初学者学习的单片机,它完全兼容传统的8051,8031的指令系统,他的运行速度要比8051快最高支持达33MHz的晶体震荡器,在此系统中使用12MHz的晶振。图正面图AT89S52具有以下标准功
3、能: 8k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。2、显示模块 在实际应用中,用户很少直接设计LCD显示器驱动接口,一般是直接使用专用的LCD显示驱动器和LCD显示模块。其中,LCD显示模块LCM(Liquid Cr
4、ystal Display Module)是把LCD显示器、背景光源、线路板和驱动集成电路等部件构成一个整体,作为一个独立的部件使用,具有功能较强、易于控制、接口简单等优点,在单片机系统中应用较多。其内部结构如图2-8所示。LCD显示模块只留一个接口与外部通信。显示模块通过这个接口接收显示命令和数据,并按指令和数据的要求进行显示。外部电路通过这个接口读出显示模块的工作状态和显示数据。LCD显示模块一般带有内部显示RAM和字符发生器,只要输入ASCII码就可以进行显示。LCD显示模块按功能显示可分为:LCD段式显示模块、LCD字符型显示模块、LCD图形显示块三类。本系统利用4位LED数码管显示时
5、间,共阳极结构。LED数码管由7段发光二极管组成,当要显示某个数字时只要将数字所对应的引脚送入低电平。3.按键模式 本设计中主要有三个控制按键,按键功能为:为调时间模式,长按进入调分状态:分单元闪烁,按加1,按减1.再长按进入时调整状态,时单元闪烁,加减调整同调分.按长按退出调整状态。按进入设定闹时状态: 12:00: ,可进行分设定,按分加1,再按为时调整,按时加1,按调闹钟结束.在闹铃时可按停闹,不按闹铃1分钟。图3.按键引脚图(3)按下进入秒表状态:再按秒表又启动,按暂停,再按秒表清零,按退出秒表回到时钟状态。4.元件器材元器件型号/大小单片机AT89S52译码器74LS164七段数码显
6、示管一位共阳极LED发光二极管蜂鸣器二极管1N4007、1N4148电阻1K、10K、排阻电容10uF、30pF、100uF、220uF晶振12M开关按键USB口其它芯片底槽、导线三设计过程中碰到的问题及解决方法硬件方面:(1)焊接三极管时,由于三个引脚间的距离太近,自己过于急躁,弄了很多锡在上面,造成短路;最后用吸锡器弄干净,重新焊接,有些锡粘在板上,必须用小刀把两引脚间的锡削掉。这里花费了大量时间。(2)LED显示器有一排显示不出来,查明是接口虚焊问题。重新补焊接显示器接口。软件方面:(1)程序编写开始有点混乱,最后重新构思,确定各个按键功能,再根据各个功能编写,这样一步步来,思路比较清晰
7、。(2)程序编写时感觉最难的是按键切换,开始感觉无法下手。最后找了一些按键方面的程序,慢慢看,慢慢了解;然后根据自己设计的特点编写程序。(3)调试时感觉按键声太吵,影响到宿舍其他人,觉得作用不大,就去掉。四测试数据及误差分析 (1)测试数据如下: 实际时间显示时间校准前12:17:0012:17:00校准后20:52:5320:52:50测试总时间长度是8:35:53,设计的时钟误差比实际时间慢3秒。 (2)误差分析 误差由元件的精确度和焊接导致的连接不稳定,以及软件算法上的缺陷而产生。要消除这些误差,首先必须提高焊接电工技术,其次可以通过了解各元器件的特点,针对这些特点编写程序,用软件算法来
8、克服这些误差。本次设计时钟测试时比实际时间慢3秒,可以通过降低T0对机器周期计数时间来提高它的准确率。五总结数字电子钟所有功能都以实现,可以通过按键进行模式切换,并对其数值进行调节。在这基础上还添加了省电模式,开机显示时间和学号,还有秒表,闹铃功能。存在不足是设计的电子钟存在一定的误差,不能在实际中运用。通过本次课程设计,对单片机AT89S52有更深入的了解,同时在对单片机进行软件编程的过程中,学会了单片机编程的流程控制,熟悉了单片机显示按键系统的编程实现。六程序模块框图 硬件框图:时钟调整模式: 秒表模式: 整点报时模式:七程序清单; AT89S52时钟程序 ;*;定时器T0、T1溢出周期为
9、50MS,T0为秒计数用, T1为调整时闪烁及秒表定时用,;、为调整按钮,P0口为字符输出口,P2为扫描口,为蜂呜器口,采;用共阳显示管。;50H-55H为闹钟定时单元,60H-65H为秒表计时单元,72H-75H为显示时间单元,76H-79H;为分时计时单元。;03H标志=0时钟闪烁,=1秒表, 05H=0,不闹铃,=1要闹铃. 07H每秒改变一次,;用作间隔呜叫.;* DISPFIRST EQU 30H ;显示首址存放单元 BELL EQU CONBS EQU 2FH ;存放报时次数 CLOCK EQU 2DH;*; 中断入口程序 ;*; ORG 0000H ;程序执行开始地址 LJMP
10、START ;跳到标号START执行 ORG 0003H ;外中断0中断程序入口 RETI ;外中断0中断返回 ORG 000BH ;定时器T0中断程序入口 LJMP 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 BSLOO
11、P: LCALL DS21MS LCALL DL1S LCALL DL1S LCALL DL1S DJNZ CONBS,BSLOOP CLR 08H ;清整点报时标志 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 55H,#1 MOV 54H,#2 MOV 7AH,#0AH ;放入熄灭符数据
12、 MOV TMOD,#11H ;设T0、T1为16位定时器 MOV TL0,#0B0H ;50MS定时初值(T0计时用) MOV TH0,#3CH ;50MS定时初值 MOV TL1,#0B0H ;50MS定时初值(T1闪烁定时用) MOV TH1,#3CH ;50MS定时初值 SETB EA ;总中断开放 SETB ET0 ;允许T0中断 SETB TR0 ;开启T0定时器 MOV R4,#14H ;1秒定时用计数值(50MS20) MOV DISPFIRST,#72H ;显示单元为72-75H;以下主程序循环 START1: LCALL DISPLAY ;调用显示子程序 JNB ,SETM
13、M1 ;口为0时转时间调整程序 JNB ,TSFUN ;定时闹铃设定 JNB ,FUNPT ;秒表功能(STOP,RUN,CLR) JB 08H, QQQQ AJMP START1 ;口为1时跳回START1 FUNPT: LJMP FUNPTT START12: LJMP START1;以下闹铃时间设定程序,按进入设定 TSFUN: LCALL DS20MS JB ,START1 ; WAIT113: JNB ,WAIT113 ;等待键释放 JB 05H,CLOSESP ;闹铃已开的话,关闹铃 MOV DISPFIRST,#52H ;进入闹铃设定程序,显示52-55H闹钟定时单元; DSWA
14、IT: SETB EA LCALL DISPLAY JNB ,DSFINC ;分加1 JNB ,DSDEC ;分减1 JNB ,DSSFU ;进入时调整 AJMP DSWAIT; CLOSESP: CLR 05H ;关闹铃标志 CLR BELL AJMP START1 DSSFU: LCALL DS20MS ;消抖 JB , DSWAIT LJMP DSSFUNN ;进入时调整; SETMM1: LJMP SETMM ;转到时间调整程序SETMM; DSFINC : LCALL DS20MS ;消抖 JB , DSWAIT DSWAIT12: LCALL DISPLAY ;等键 释放 JNB
15、, 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 , DSWAIT DSWAITEE: LCALL DISPLAY ;等键 释放 JNB , DSWAITEE CLR EA MOV R0,#53H ; LCALL sub1 ;闹铃设定分减1 LJ
16、MP DSWAIT;以下秒表暂停清零功能程序;按下切换秒表功能,再按开始计时,暂停或清0,最后按退出秒表回到时钟计时 FUNPTT: LCALL DS20MS JB ,START12 WAIT22: JNB ,WAIT21 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定时初值 WAIT88:LCA
17、LL DS20MS JB ,WAIT81 WAIT99:JNB ,WAIT99 SETB TR1 ;T1运行控制软件 SETB ET1 ;T1溢出中断允许 WAIT33: LCALL DS20MS JB ,WAIT31 WAIT44: JNB ,WAIT41 CLR ET1 CLR TR1 WAIT55: LCALL DS20MS JB ,WAIT51 WAIT66: JNB ,WAIT61 MOV 60H,#00H MOV 61H,#00H MOV 62H,#00H MOV 63H,#00H MOV 64H,#00H MOV 65H,#00H TIMFUN:MOV DISPFIRST,#72
18、H ;显示时钟数据单元 CLR ET1 CLR TR1 AJMP FUNSS11 FUNSS11: AJMP START1;以下键等待释放时显示不会熄灭用 WAIT21: LCALL DISPLAY AJMP WAIT22 WAIT31: LCALL DISPLAY AJMP WAIT33 WAIT41: LCALL DISPLAY AJMP WAIT44 WAIT51: LCALL DISPLAY AJMP WAIT55 WAIT61: LCALL DISPLAY AJMP WAIT66 WAIT81: LCALL DISPLAY AJMP WAIT88 WAIT91: LCALL DISP
19、LAY AJMP WAIT99; 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 ; MOV TH0,A ;重装初值(高8位修正值) SETB TR0 ;开启定时器T0 DJNZ R4, OUTT0 ;20次中断未到中断退出 ADDSS: MOV R4,#14H
20、;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秒时对秒计时单元清0 MOV R0,#77H ;指向分计时单元(76H-77H) ACALL ADD1 ;分计时单元加1分钟 MOV A,R3 ;分数据放入A CLR C ;清进位标志 CJNE A,
21、#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小时中断退出 ACALL CLR0 ;大于或等于24小时小时计时单元清0 OUTT0: MOV 72H,76H ;中断退出时将分、时计时单元数据移 MOV 7
22、3H,77H ;入对应显示单元 MOV 74H,78H ; MOV 75H,79H ; LCALL BAOJ POP PSW ;恢复状态字(出栈) POP ACC ;恢复累加器 SETB ET0 ;开放T0中断 RETI ;中断返回;*; 闪动调时程序秒表功能程序 ;*;T1中断服务程序,用作时间调整时调整单元闪烁指示或秒表计时INTT1: PUSH ACC ;中断现场保护 PUSH PSW ; JB 03H, MMFUN ;=1时秒表 MOV TL1, #0B0H ;装定时器T1定时初值 MOV TH1, #3CH ; DJNZ R2,INTT1OUT ;秒未到退出中断(50MS中断6次)
23、MOV R2,#06H ;重装秒定时用初值 CPL 02H ;秒定时到对闪烁标志取反 JB 02H,FLASH1 ;02H位为1时显示单元熄灭 MOV 72H,76H ;02H位为0时正常显示 MOV 73H,77H ; MOV 74H,78H ; MOV 75H,79H ;INTT1OUT: POP PSW ;恢复现场 POP ACC ; RETI ;中断退出FLASH1: JB 01H,FLASH2 ;01H位为1时,转小时熄灭控制 MOV 72H,7AH ;01H位为0时,熄灭符数据放入分 MOV 73H,7AH ;显示单元(72H-73H),将不显示分数据 MOV 74H,78H ;
24、MOV 75H,79H ; AJMP INTT1OUT ;转中断退出FLASH2: MOV 72H,76H ;01H位为1时,熄灭符数据放入小时 MOV 73H,77H ;显示单元(74H-75H),小时数据将不显示 MOV 74H,7AH ; MOV 75H,7AH ; AJMP INTT1OUT ;转中断退出;MMFUN : CLR TR1 MOV A,#0F7H ;中断响应时间同步修正,重装初值(10ms) ADD A,TL1 ;低8位初值修正 MOV TL1,A ;重装初值(低8位修正值) MOV A,#0D8H ;高8位初值修正 ADDC A,TH1 ; MOV TH1,A ;重装初
25、值(高8位修正值) SETB TR1 ;开启定时器T1 MOV R0,#61H ;指向秒计时单元(71H-72H) ACALL ADD1 ;调用加1程序(加1秒操作) CLR C ; MOV A,R3 ; JZ FSS1 ;加1后为00,C=0 AJMP OUTT01 ;加1后不为00,C=1 FSS1: ACALL CLR0 ;大于或等于60秒时对秒计时单元清0 MOV R0,#63H ;指向分计时单元(76H-77H) ACALL ADD1 ;分计时单元加1分钟 MOV A,R3 ;分数据放入A CLR C ;清进位标志 CJNE A,#60H,ADDHH1 ; ADDHH1: JC OU
26、TT01 ;小于60分时中断退出 LCALL CLR0 ;大于或等于60分时分计时单元清0 MOV R0,#65H ;指向小时计时单元(78H-79H) ACALL ADD1 ;小时计时单元加1小时 OUTT01: POP PSW ;恢复状态字(出栈) POP ACC ;恢复累加器 RETI ;中断返回 ;*; 加1子 程 序 ;* ADD1: MOV A,R0 ;取当前计时单元数据到A DEC R0 ;指向前一地址 SWAP A ;A中数据高四位与低四位交换 ORL A,R0 ;前一地址中数据放入A中低四位 ADD A,#01H ;A加1操作 DA A ;十进制调整 MOV R3,A ;移入R3寄存器 ANL A,#0FH ;高四位变0 MOV R0,A ;放回前一地址单元 MOV A,R3 ;取回R3中暂存数据 INC R0 ;指向当前地址单元 SWAP A ;A中数据高四位与低四位交换 ANL A,#0FH ;高四位变0 MOV R0,A ;数据放入当削地址单元中 RET ;子程序返回;*; 分减1子 程 序 ;*; SUB1: MOV A,R0 ;取当前计时单元数据到A DEC R0 ;指向前一地址 SWAP A ;A中数据高四位与低四位交换 ORL A,R0 ;前一地址中数据放入A中低四位
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1