单片机完整电子时钟设计报告_第1页
单片机完整电子时钟设计报告_第2页
单片机完整电子时钟设计报告_第3页
单片机完整电子时钟设计报告_第4页
单片机完整电子时钟设计报告_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

1、精选优质文档-倾情为你奉上目录1 作品简介22 单片机系统原理图及工作原理描述23 设计过程中碰到的问题及解决方法44 测试数据及误差分析45 总结56 程序模块框图5七程序清单7单片机的个性化电子钟设计报告1 作品简介 该作品是个性化电子钟设计,技术上主要用单片机(AT89S52)主控,4位LED数码显示,分别显示“小时:分钟”。该作品主要用于24小时计时显示,能整时报时,能作为秒表使用,能定时闹铃1分钟。使用方法:开机后显示日期,学号,时钟在00:00:00起开始计时。(1) 长按P3.2进入调分状态:分单元闪烁,按P3.2加1,按P3.3减1.再长按P3.2进入时调整状态,时单元闪烁,加

2、减调整同调分.按长按退出调整状态。(2) 按P3.3进入设定闹时状态: 12:00: ,可进行分设定,按P3.4分加1,再按P3.2为时调 整,按P3.4时加1,按P3.3调闹钟结束.在闹铃时可按P3.2停闹,不按闹铃1分钟。(3) 按下P3.4进入秒表状态:再按P3.4秒表又启动,按P3.4暂停,再按P3.4秒表清零,按 P3.4退出秒表回到时钟状态。2 单片机系统原理图及工作原理描述(1)总原理图 如原理图所示,硬件系统主要由单片机最小应用系统、LED数码管显示模块组成。(2)各个模块说明1.单片机最小系统 AT89S52是一款非常适合单片机初学者学习的单片机,它完全兼容传统的8051,8

3、031的指令系统,他的运行速度要比8051快最高支持达33MHz的晶体震荡器,在此系统中使用12MHz的晶振。图1.AT98S52正面图AT89S52具有以下标准功能: 8k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。2

4、、显示模块 在实际应用中,用户很少直接设计LCD显示器驱动接口,一般是直接使用专用的LCD显示驱动器和LCD显示模块。其中,LCD显示模块LCM(Liquid Crystal Display Module)是把LCD显示器、背景光源、线路板和驱动集成电路等部件构成一个整体,作为一个独立的部件使用,具有功能较强、易于控制、接口简单等优点,在单片机系统中应用较多。其内部结构如图2-8所示。LCD显示模块只留一个接口与外部通信。显示模块通过这个接口接收显示命令和数据,并按指令和数据的要求进行显示。外部电路通过这个接口读出显示模块的工作状态和显示数据。LCD显示模块一般带有内部显示RAM和字符发生器,

5、只要输入ASCII码就可以进行显示。LCD显示模块按功能显示可分为:LCD段式显示模块、LCD字符型显示模块、LCD图形显示块三类。本系统利用4位LED数码管显示时间,共阳极结构。LED数码管由7段发光二极管组成,当要显示某个数字时只要将数字所对应的引脚送入低电平。3.按键模式 本设计中主要有三个控制按键,按键功能为:P3.2为调时间模式,长按P3.2进入调分状态:分单元闪烁,按P3.2加1,按P3.3减1.再长按P3.2进入时调整状态,时单元闪烁,加减调整同调分.按长按退出调整状态。按P3.3进入设定闹时状态: 12:00: ,可进行分设定,按P3.4分加1,再按P3.2为时调整,按P3.4

6、时加1,按P3.3调闹钟结束.在闹铃时可按P3.2停闹,不按闹铃1分钟。图3.按键引脚图(3)按下P3.4进入秒表状态:再按P3.4秒表又启动,按P3.4暂停,再按P3.4秒表清零,按P3.4退出秒表回到时钟状态。4.元件器材元器件型号/大小单片机AT89S52译码器74LS164七段数码显示管一位共阳极LED发光二极管蜂鸣器二极管1N4007、1N4148电阻1K、10K、排阻电容10uF、30pF、100uF、220uF晶振12M开关按键USB口其它芯片底槽、导线3 设计过程中碰到的问题及解决方法硬件方面:(1)焊接三极管时,由于三个引脚间的距离太近,自己过于急躁,弄了很多锡在上面,造成短

7、路;最后用吸锡器弄干净,重新焊接,有些锡粘在板上,必须用小刀把两引脚间的锡削掉。这里花费了大量时间。(2)LED显示器有一排显示不出来,查明是接口虚焊问题。重新补焊接显示器接口。软件方面:(1)程序编写开始有点混乱,最后重新构思,确定各个按键功能,再根据各个功能编写,这样一步步来,思路比较清晰。(2)程序编写时感觉最难的是按键切换,开始感觉无法下手。最后找了一些按键方面的程序,慢慢看,慢慢了解;然后根据自己设计的特点编写程序。(3)调试时感觉按键声太吵,影响到宿舍其他人,觉得作用不大,就去掉。4 测试数据及误差分析 (1)测试数据如下: 实际时间显示时间校准前12:17:0012:17:00校

8、准后20:52:5320:52:50测试总时间长度是8:35:53,设计的时钟误差比实际时间慢3秒。 (2)误差分析 误差由元件的精确度和焊接导致的连接不稳定,以及软件算法上的缺陷而产生。要消除这些误差,首先必须提高焊接电工技术,其次可以通过了解各元器件的特点,针对这些特点编写程序,用软件算法来克服这些误差。本次设计时钟测试时比实际时间慢3秒,可以通过降低T0对机器周期计数时间来提高它的准确率。5 总结数字电子钟所有功能都以实现,可以通过按键进行模式切换,并对其数值进行调节。在这基础上还添加了省电模式,开机显示时间和学号,还有秒表,闹铃功能。存在不足是设计的电子钟存在一定的误差,不能在实际中运

9、用。通过本次课程设计,对单片机AT89S52有更深入的了解,同时在对单片机进行软件编程的过程中,学会了单片机编程的流程控制,熟悉了单片机显示按键系统的编程实现。6 程序模块框图 硬件框图:AT89S52蜂鸣器LDE显示器DOWNLOAD时钟调整模式:YNNNYY开始系统初始化是否按下设置键时间调整模式是否退出调整模式是否跟闹钟时间一致启动闹铃显示时间 秒表模式:YYYYNNNN开始是否按功能切换键系统初始化是否按秒表暂停键是否按秒表启动键是否按秒表清零键切换秒表秒表计时暂停秒表显示时间 整点报时模式:YYNN开始显示时间分钟是否为00蜂鸣器响一次K=0?退出7 程序清单; AT89S52时钟程

10、序 ;*;定时器T0、T1溢出周期为50MS,T0为秒计数用, T1为调整时闪烁及秒表定时用,;P3.2、P3.3、P3.4为调整按钮,P0口为字符输出口,P2为扫描口,P1.2为蜂呜器口,采;用共阳显示管。;50H-55H为闹钟定时单元,60H-65H为秒表计时单元,72H-75H为显示时间单元,76H-79H;为分时计时单元。;03H标志=0时钟闪烁,=1秒表, 05H=0,不闹铃,=1要闹铃. 07H每秒改变一次,;用作间隔呜叫.;* DISPFIRST EQU 30H ;显示首址存放单元 BELL EQU P1.2 CONBS EQU 2FH ;存放报时次数 CLOCK EQU 2DH

11、;*; 中断入口程序 ;*; ORG 0000H ;程序执行开始地址 LJMP 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

12、B,79H MUL AB ADD A,78H MOV CONBS,A BSLOOP: 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

13、 55H,#1 MOV 54H,#2 MOV 7AH,#0AH ;放入熄灭符数据 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;以下主程序循环

14、START1: LCALL DISPLAY ;调用显示子程序 JNB P3.2,SETMM1 ;P3.2口为0时转时间调整程序 JNB P3.3,TSFUN ;定时闹铃设定 JNB P3.4,FUNPT ;秒表功能(STOP,RUN,CLR) JB 08H, QQQQ AJMP START1 ;P3.2口为1时跳回START1 FUNPT: LJMP FUNPTT START12: LJMP START1;以下闹铃时间设定程序,按P3.3进入设定 TSFUN: LCALL DS20MS JB P3.3,START1 ; WAIT113: JNB P3.3,WAIT113 ;等待键释放 JB 0

15、5H,CLOSESP ;闹铃已开的话,关闹铃 MOV DISPFIRST,#52H ;进入闹铃设定程序,显示52-55H闹钟定时单元; DSWAIT: SETB EA LCALL DISPLAY JNB P3.4,DSFINC ;分加1 JNB P3.2,DSDEC ;分减1 JNB P3.3,DSSFU ;进入时调整 AJMP DSWAIT; CLOSESP: CLR 05H ;关闹铃标志 CLR BELL AJMP START1 DSSFU: LCALL DS20MS ;消抖 JB P3.3, DSWAIT LJMP DSSFUNN ;进入时调整; SETMM1: LJMP SETMM ;

16、转到时间调整程序SETMM; DSFINC : LCALL DS20MS ;消抖 JB P3.4, DSWAIT DSWAIT12: LCALL DISPLAY ;等键 释放 JNB P3.4, 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 P3

17、.2, DSWAIT DSWAITEE: LCALL DISPLAY ;等键 释放 JNB P3.2, DSWAITEE CLR EA MOV R0,#53H ; LCALL sub1 ;闹铃设定分减1 LJMP DSWAIT;以下秒表暂停清零功能程序;按下P3.4切换秒表功能,再按开始计时,暂停或清0,最后按P3.4退出秒表回到时钟计时 FUNPTT: LCALL DS20MS JB P3.4,START12 WAIT22: JNB P3.4,WAIT21 CPL 03H JNB 03H,TIMFUN MOV DISPFIRST,#60H ;显示秒表数据单元 MOV 60H,#00H MOV

18、 61H,#00H MOV 62H,#00H MOV 63H,#00H MOV 64H,#00H MOV 65H,#00H MOV TL1,#0F0H ;10MS定时初值 MOV TH1,#0D8H ;10MS定时初值 WAIT88:LCALL DS20MS JB P3.4,WAIT81 WAIT99:JNB P3.4,WAIT99 SETB TR1 ;T1运行控制软件 SETB ET1 ;T1溢出中断允许 WAIT33: LCALL DS20MS JB P3.4,WAIT31 WAIT44: JNB P3.4,WAIT41 CLR ET1 CLR TR1 WAIT55: LCALL DS20

19、MS JB P3.4,WAIT51 WAIT66: JNB P3.4,WAIT61 MOV 60H,#00H MOV 61H,#00H MOV 62H,#00H MOV 63H,#00H MOV 64H,#00H MOV 65H,#00H TIMFUN:MOV DISPFIRST,#72H ;显示时钟数据单元 CLR ET1 CLR TR1 AJMP FUNSS11 FUNSS11: AJMP START1;以下键等待释放时显示不会熄灭用 WAIT21: LCALL DISPLAY AJMP WAIT22 WAIT31: LCALL DISPLAY AJMP WAIT33 WAIT41: LC

20、ALL DISPLAY AJMP WAIT44 WAIT51: LCALL DISPLAY AJMP WAIT55 WAIT61: LCALL DISPLAY AJMP WAIT66 WAIT81: LCALL DISPLAY AJMP WAIT88 WAIT91: LCALL DISPLAY AJMP WAIT99; 1秒计时程序 ;T0中断服务程序 INTT0: PUSH ACC ;累加器入栈保护 PUSH PSW ;状态字入栈保护 CLR ET0 ;关T0中断允许 CLR TR0 ;关闭定时器T0 MOV A,#0B7H ;中断响应时间同步修正 ADD A,TL0 ;低8位初值修正 MO

21、V 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次中断到(1秒)重赋初值 CPL 07H ;闹铃时间隔呜叫用 MOV R0,#71H ;指向秒计时单元(71H-72H) ACALL ADD1 ;调用加1程序(加1秒操作) MOV A,R3 ;秒数据放入A(R3为2位十进制数组合) CLR C ;清进位标志 CJNE A,#60H,ADDMM ; ADD

22、MM: JC OUTT0 ;小于60秒时中断退出 ACALL CLR0 ;大于或等于60秒时对秒计时单元清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

23、A,R3 ;时数据放入A CLR C ;清进位标志 CJNE A,#24H,HOUR ; HOUR: JC OUTT0 ;小于24小时中断退出 ACALL CLR0 ;大于或等于24小时小时计时单元清0 OUTT0: MOV 72H,76H ;中断退出时将分、时计时单元数据移 MOV 73H,77H ;入对应显示单元 MOV 74H,78H ; MOV 75H,79H ; LCALL BAOJ POP PSW ;恢复状态字(出栈) POP ACC ;恢复累加器 SETB ET0 ;开放T0中断 RETI ;中断返回;*; 闪动调时程序秒表功能程序 ;*;T1中断服务程序,用作时间调整时调整单元

24、闪烁指示或秒表计时INTT1: PUSH ACC ;中断现场保护 PUSH PSW ; JB 03H, MMFUN ;=1时秒表 MOV TL1, #0B0H ;装定时器T1定时初值 MOV TH1, #3CH ; DJNZ R2,INTT1OUT ;0.3秒未到退出中断(50MS中断6次) MOV R2,#06H ;重装0.3秒定时用初值 CPL 02H ;0.3秒定时到对闪烁标志取反 JB 02H,FLASH1 ;02H位为1时显示单元熄灭 MOV 72H,76H ;02H位为0时正常显示 MOV 73H,77H ; MOV 74H,78H ; MOV 75H,79H ;INTT1OUT:

25、 POP PSW ;恢复现场 POP ACC ; RETI ;中断退出FLASH1: JB 01H,FLASH2 ;01H位为1时,转小时熄灭控制 MOV 72H,7AH ;01H位为0时,熄灭符数据放入分 MOV 73H,7AH ;显示单元(72H-73H),将不显示分数据 MOV 74H,78H ; MOV 75H,79H ; AJMP INTT1OUT ;转中断退出FLASH2: MOV 72H,76H ;01H位为1时,熄灭符数据放入小时 MOV 73H,77H ;显示单元(74H-75H),小时数据将不显示 MOV 74H,7AH ; MOV 75H,7AH ; AJMP INTT1

26、OUT ;转中断退出;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 ;重装初值(高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

27、 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 OUTT01 ;小于60分时中断退出 LCALL CLR0 ;大于或等于60分时分计时单元清0 MOV R0,#65H ;指向小时计时单元(78H-79H) ACALL ADD1 ;小时计时单元加1小时 OUTT01: POP PSW ;恢复状态字(出栈) POP ACC ;恢复累加器 RETI

28、;中断返回 ;*; 加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中低四位 JZ SUB11 DEC A ;A减1操作 SUB111: MOV R3,A ;移入R3寄存器 ANL A,#0FH ;高四位

温馨提示

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

评论

0/150

提交评论