基于单片机的新颖电子时钟系统课程设计.doc

上传人:laozhun 文档编号:4148629 上传时间:2023-04-07 格式:DOC 页数:26 大小:840.50KB
返回 下载 相关 举报
基于单片机的新颖电子时钟系统课程设计.doc_第1页
第1页 / 共26页
基于单片机的新颖电子时钟系统课程设计.doc_第2页
第2页 / 共26页
基于单片机的新颖电子时钟系统课程设计.doc_第3页
第3页 / 共26页
基于单片机的新颖电子时钟系统课程设计.doc_第4页
第4页 / 共26页
基于单片机的新颖电子时钟系统课程设计.doc_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《基于单片机的新颖电子时钟系统课程设计.doc》由会员分享,可在线阅读,更多相关《基于单片机的新颖电子时钟系统课程设计.doc(26页珍藏版)》请在三一办公上搜索。

1、 数理与信息工程学院单片机原理及应用期末课程设计 题 目: 基于单片机的新颖电子时钟系统 专 业: 计算机科学与技术 班 级: 计算机 姓 名: 学 号: 指导老师: 成 绩: ( 2009.6 )目 录 第1节 引 言31.1本设计任务和主要内容31.2 系统主要功能3第2节 系统的硬件构成及功能42.1 电子钟的原理框图42.2 AT89C2051单片机及其引脚说明52.3 时分显示部件6第3节 系统的软件设计831 系统主程序设计83.2中断程序设计93.3 程序设计10第4节 系统的调试25结 束 语26参考文献27基于单片机的新颖电子时钟系统数理与信息工程学院 09计算机专升本 胡琼

2、琼指导教师:余水宝 第1节 引 言 时钟是人们日常生活中必不可少的生活用品,无论在何地都需要精确地了解当前的具体时间。现在市场上的时钟类型多种多样,可是它们都存在一个相当大的缺陷,那就是无论是机械钟还是石英钟在晚上都无法实现在无照明的情况下可见的状态。使用的人要想知道当前的时间,就必须先开灯,因此使用起来比较麻烦。此外,无论是机械钟、石英钟还是电子钟,都存在着共同的问题:时间误差。目前单片机在各行各业领域的使用非常广泛,因为它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。运用基于单片机的形式来设计电子时钟会更加的方便有效。针对以上的分析,我们设计了一款采用LED显示器件显示的电

3、子时钟,有效克服了时钟存在的误差问题,并且能在夜间不必其它照明就能看到时间,且以60只发光管实现秒显示,接近于传统的秒针来显示秒的形式,使用者容易接受,而且美观大方。另加七只装饰用的LED灯,使整个时钟显的相当美观新颖,故还可作为室内装饰用。这款电子时钟具有相当大的市场发展前景。1.1本设计任务和主要内容本论文主要是针对单片机控制的电子时钟系统,分别对时钟的时间显示、闹钟报鸣等功能以及系统设备的软、硬件各个部分进行了研究。主要设计要求如下: 用4只LED数码管输出显示时和分。 可通过按键设置闹钟功能,且停闹无须手工操作。 可通过按键设置分校时。 月计时误差小于45秒。 模拟“秒针”行走的“嘀哒

4、”声。 增加停(掉)电保护功能。 提高计时精度,使年计时误差小于30秒。 增加日自动校准功能,使得该电子钟“永无误差”。 可通过按键设置一天两闹(比如早晨、中午各一次)。1.2 系统主要功能电子钟的外观是周边60只发光管顺时旋转来显示秒,中间四只LED数码管用于显示时间,中下方的七只LED灯顺时旋转,供装饰用。 其主要功能有:整点报时;四只LED数码管显示当前时分。当发生停电事件时,由后备电池供电,系统进入低功耗状态,所有显示部件停止显示,这样即延长了电池的寿命,同时又保证了CPU继续计数,不至于因停电而时钟停止运行。当恢复供电后,系统自动恢复工作状态,不影响计时。闹钟功能,设定好所需的时间,

5、时间到时时钟发出蜂鸣声。校时,调整时间差。温度显示功能,检测空气中的温度并显示在四只LED数码管上。时间显示和温度显示交替进行。第2节 系统的硬件构成及功能2.1 电子钟的原理框图它由以下几个部件组成:单片机89C2051、电源、时分显示部件、60秒旋转译码驱动电路。时分显示采用动态扫描,以降低对单片机端口数的要求,同时也降低系统的功耗。时分显示模块、60秒旋转译码驱动电路以及显示驱动都通过89C2051的I/O口控制。电源部分:电源部分有二部分组成。一部分是由220V的市电通过变压、整流稳压来得到+5V电压,维持系统的正常工作;另一部分是由3V的电池供电,以保证停电时正常走时。正常情况下电池

6、是不提供电能的,以保证电池的寿命。图2-1 电子钟系统原理框图2.2 AT89C2051单片机及其引脚说明AT89C2051单片机是51系列单片机的一个成员,是8051单片机的简化版。内部自带2K字节可编程FLASH存储器的低电压、高性能COMS八位微处理器,与Intel MCS-51系列单片机的指令和输出管脚相兼容。AT89C2051构成的单片机系统是具有结构最简单、造价最低廉、效率最高的微控制系统,省去了外部的RAM、ROM和接口器件,减少了硬件开销,节省了成本,提高了系统的性价比。AT89C2051是一个有20个引脚的芯片,引脚配置如图2-2所示。与8051相比,AT89C2051减少了

7、两个对外端口(即P0、P2口),使它最大可能地减少了对外引脚下,因而芯片尺寸有所减小。AT89C2051芯片的几个主要引脚功能为: 图2-2 AT89C2051引脚配置 图2-3 CD4017引脚图RST 复位输入。当RST变为高电平并保持2个机器周期时,所有I/O引脚复位至“1”。XTAL1 反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2 来自反向振荡放大器的输出。P1口 8位双向I/O口。引脚P1.2P1.7提供内部上拉,当作为输入并被外部下拉为低电平时,它们将输出电流,这是因内部上拉的缘故。P1.0和P1.1需要外部上拉,可用作片内精确模拟比较器的正向输入(AIN0)和反向输入

8、(AIN1),P1口输出缓冲器能接收20mA电流,并能直接驱动LED显示器;P1口引脚写入“1” 后,可用作输入。在闪速编程与编程校验期间,P1口也可接收编码数据。P3口 引脚P3.0P3.5与P3.7为7个带内部上拉的双向I/0引脚。P3.6在内部已与片内比较器输出相连,不能作为通用I/O引脚访问。P3口的输出缓冲器能接收20mA的灌电流;P3口写入“1”后,内部上拉,可用输入。P3口也可用作特殊功能口,其功能见表1。P3口同时也可为闪速存储器编程和编程校验接收控制信号。表1 P3口特殊功能P3口引脚特殊功能P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2(外部中断0)P3.

9、3(外部中断1)P3.4T0(定时器0外部输入)P3.5T1(定时器1外部输入)2.3 时分显示部件由于系统要显示的内容较简单,显示量不多,所以选用数码管既方便又经济。LED有共阴极和共阳极两种。如图2-6所示。二极管的阴极连接在一起,通常此公共阴极接地,而共阳极则将发光二极管的阳极连接在一起,接入+5V的电压。一位显示器由8个发光二极管组成,其中7个发光二极管构成字型“8”的各个笔划(段)ag,另一个小数点为dp发光二极管。当在某段发光二极管施加一定的正向电压时,该段笔划即亮;不加电压则暗。为了保护各段LED不被损坏,需外加限流电阻。图2-6 LED数码管结构原理图众所周知,LED显示数码管

10、通常由硬件7段译码集成电路,完成从数字到显示码的译码驱动。本系统采用软件译码,以减小体积,降低成本和功耗,软件译码的另一优势还在于比硬件译码有更大的灵活性。所谓软件译码,即由单片机软件完成从数字到显示码的转换。从LED数码管结构原理可知,为了显示字符,要为LED显示数码管提供显示段码,组成一个“8”字形字符的7段,再加上1个小数点位,共计8段,因此提供给LED数码管的显示段码为1个字节。各段码位与显示段的对应关系如表2。表2 各段码位的对应关系段码位D7D6D5D4D3D2D1D0显示段dpgfedcba当用数据口连接LED数码管adp引脚时,不同的连接方法,各段码位与显示段有不同的对应关系。

11、通常数据口的D0位与a段连接,D1位与b段连接,D7位与dp段连接,依次连接,如表2所示,表3为用于LED数码管显示的十六进制数和空白字符与P的显示段码。表3 LED显示段码字型共阳极段码共阴极段码字型共阳极段码共阴极段码0C0H3FH990H6FH1F9H06HA88H77H2A4H5BHB83H7CH3BOH4FHCC6H39H499H66HDA1H5EH592H6DHE86H79H682H7DHF84H71H7F8H07H空白FFH00H880H7FHP8CH73H根据AT89C2051单片机灌电流能力强,拉电流能力弱的特点,我们选用共阳数码管。将AT89C2051的P1.0P1.7分别

12、与共阳数码管的ag及dp相连,高电平的位对应的LED数码管的段暗,低电平的位对应的LED数码管的段亮,这样,当P0口输出不同的段码,就可以控制数码管显示不同的字符。例如:当P0口输出的段码为1100 0000,数码管显示的字符为0。数码管显示器有二种工作方式,即静态显示方式和动态扫描显示方式。为节省端口及降低功耗,本系统采用动态扫描显示方式。动态扫描显示方式需解决多位LED数码管的“段控”和“位控”问题,本电路的“段控”(即要显示的段码的控制)通过P0口实现;而每一位的公共端,即LED数码管的“位控”,则由P3口控制。这种连接方式由于多位字段线连在一起,因此,要想显示不同的内容,必然要采取轮流

13、显示的方式,即在某一瞬间,只让其中的某一位的字位线处于选通状态,其它各位的字位线处于断开状态,同时字段线上输出这一位相应要显示字符的字段码。在这一瞬时,只有这一位在显示,其他几位则暗。在本系统中,字位线的选通与否是通过PNP三极管的导通与截止来控制,即三极管处于“开关”状态。系统的时分显示部件由4只7段共阳LED数码管构成,前两只用于时的显示,后两只用于分的显示。值得一提的是,在设计中需要实现时与分之间的两个闪烁点,为此,将第三只LED数码管倒置摆放,这样就形成了两个很自然的闪烁点。与此同时,为了能使两点显示能够形象的表示时钟“秒”的变化,设计时,将两个点由P1.7单独控制,每隔一秒使P1.7

14、发送一个正脉冲,从而实现了两个点的闪烁显示,闪烁周期为一秒。第3节 系统的软件设计31 系统主程序设计 主程序的功能是完成系统的初始化,在显示时间之前,对系统是否停电状态进行检测;若停电,将系统进入低功耗状态,用电池电压维持单片机计时工作,但此时不显示时间,用节省用电;若不停电,则将时分发送显示。程序流程如图3-1所示。图3-1 系统主程序流程图3.2中断程序设计中断程序(如图3-2所示)完成时间计数,时间调整,误差消除等功能。中断采用AT89C2051内部T0中断实现,定时时间为125ms,当时间到达125ms8,即1分钟时,分计数缓冲器MINBUFFER增加1,到达1小时,则时计数缓冲器H

15、OURBUFFER增加1,并将分、时的个位、十位放入显示缓冲器。当分计数缓冲器和时计数缓冲器分别到达60min、24h时,则对它们清零,以便从新计数。在中断设计中,还通过软件实现了累计误差消除功能,使整个系统时间的精确度得到保证。图3-2 定时中断程序3.3 程序设计DP BIT 24H.3 ;定义半秒闪烁位单元 SECOND EQU 31H ; 定义计数单元 MBUF EQU 32H ; 定义分计数单元 HBUF EQU 33H ; 定义时计数单元 MBUF0 EQU 34H ; 定义分个位计数存储单元 MBUF1 EQU 35H ; 定义分十位计数存储单元 HBUF0 EQU 36H ;

16、定义时个位计数存储单元 HBUF1 EQU 37H ; 定义时十位计数存储单元 DMBF0 EQU 40H ; 定义分个位显示缓冲单元 DMBF1 EQU 41H ; 定义分十位显示缓冲单元 DHBF0 EQU 42H ; 定义时个位显示缓冲单元 DHBF1 EQU 43H ; 定义时十位显示缓冲单元 AMBF10 EQU 44H ; 定义定闹 1 分个位缓冲单元 AMBF11 EQU 45H ; 定义定闹 1 分十位缓冲单元 AHBF10 EQU 46H ; 定义定闹 1 时个位缓冲单元 AHBF11 EQU 47H ; 定义定闹 1 时十位缓冲单元 AMBF1 EQU 48H ; 定义定闹

17、1分计数单元 AHBF1 EQU 49H ; 定义定闹1时计数单元 AMBF20 EQU 4AH ; 定义定闹 2 分个位缓冲单元 AMBF21 EQU 4BH ; 定义定闹 2 分十位缓冲单元 AHBF20 EQU 4CH ; 定义定闹 2 时个位缓冲单元 AHBF21 EQU 4DH ; 定义定闹 2 时十位缓冲单元 AMBF2 EQU 4EH ; 定义定闹2分计数单元 AHBF2 EQU 4FH ; 定义定闹2时计数单元 ORG 0000H LJMP MAIN ORG 000BH MOV TL0, #0DCH ; 125 毫秒定时器初值低 8 位 MOV TH0, #0BH ; 125毫

18、秒定时器初值高 8 位 LJMP INTTOMAIN: MOV SP, #6FH MOV R2, #08H ; 定时器1 秒中断次数 MOV R4, #08H ; 快校时定时计数,8X125ms 后快校时 MOV SECOND, #3CH ; 秒计数单元 MOV MBUF0, #0 ; 分个位计数存储单元 0 初值 MOV MBUF1, #0 ; 分十位计数存储单元 1 初值 MOV HBUF0, #0 ; 时个位计数存储单元 0 初值 MOV HBUF1, #2 ; 时十位计数存储单元 1 初值 MOV MBUF, #00H ; 分计数存储单元 初值 MOV HBUF, #20H ; 时计数

19、存储单元 初值 MOV AMBF10, #1 ; 定闹1 分个位计数存储单元 0 初值 MOV AMBF11, #5 ; 定闹1 分十位计数存储单元 1 初值 MOV AHBF10, #0 ; 定闹1 时个位计数存储单元 0 初值 MOV AHBF11, #2 ; 定闹1 时十位计数存储单元 1 初值 MOV AMBF1, #51H ; 定闹 1 分计数存储单元 初值 MOV AHBF1, #20H ; 定闹 1 时计数存储单元 初值 MOV AMBF20, #3 ; 定闹2 分个位计数存储单元 0 初值 MOV AMBF21, #5 ; 定闹2 分十位计数存储单元 1 初值 MOV AHBF

20、20, #0 ; 定闹2 时个位计数存储单元 0 初值 MOV AHBF21, #2 ; 定闹2 时十位计数存储单元 1 初值 MOV AMBF2, #53H ; 定闹2 分计数存储单元 初值 MOV AHBF2, #20H ; 定闹 2 时计数存储单元 初值 MOV IE, #10000010B ; 允许定时器0 中断 MOV TMOD, #00100001B ; T0 方式1 MOV TL0, R5 ; 125 毫秒定时器初值低 8 位 MOV TH0, #0BH ; 125 毫秒定时器初值高 8 位 MOV IP, #00000010B ; 定时器0 高优先级 SETB TR0 ; 启动

21、 T0 计时 LOOP: MOV R4, #08 ; 喂狗 MOV A, HBUF ; 取时整点 SUBB A, #7 JC LOOP1 ; 判断是否早 7时前 MOV A, HBUF ; 早7 时前-晚22 时后为夜间 SUBB A, #22H JNC LOOP1 ; 判断是否晚 22 时后 ACALL DISP AJMP ALARM1 LOOP1: ACALL NDISP ; 是夜间,调用夜间显示子程序 ALARM1: MOV A, AHBF1 ; 判定闹 1 CJNE A, HBUF, ALARM2 ; 判定闹1的小时是否与系统时间相等? MOV A, AMBF1 CJNE A, MBU

22、F, ALARM2 ; 判定闹1的分是否与系统时间相等? MOV C, DP MOV P3.3, C ; 蜂鸣器响半秒,停半秒 MOV A, SECOND ; 定闹1 分钟 JNZ LOOP ALARM2: MOV A, AHBF2 CJNE A, HBUF, LOOP2 ; 判定闹2的时是否与系统时间相等? MOV A, AMBF2 CJNE A, MBUF, LOOP2 ; 判定闹2的分是否与系统时间相等? MOV C, DP MOV C, DP MOV P3.3, C ; 蜂鸣器响半秒,停半秒 MOV A, SECOND ; 定闹1 分钟 JNZ LOOP LOOP2: JB P3.2,

23、 LOOP7 ; 判断校时键是否按下? LOOP3: ACALL DISP ; 用于长时间按键时的显示 MOV A, R4 ; 有校时键按下 CJNE A, #00H, LOOP6 ; 校时键按下有 1 秒吗? LOOP4: ACALL ADD1 ; 校时键按下有 1 秒,则快调 MOV R1, #40 LOOP5: ACALL DISP DJNZ R1, LOOP5 JNB P3.2, LOOP4 ; 校时键未放开,继续快调 AJMP LOOP7 ; LOOP6: JNB P3.2, LOOP3 ; 校时键按下不到 1秒,返回再判 ACALL ADD1 ; 单次慢调 MOV TL0, R5

24、; 校时结束,秒初值置 0 MOV TH0, #0BH MOV SECOND, #00 LOOP7: JB P3.3, LOOP ALAM11: ACALL ADSP1 ; 用于设置定闹 1 时,长时间按键的显示 MOV A, R4 ; 有定闹1 键按下 CJNE A, #00H, ALAM16 ; 定闹1键按下有 1秒吗? ALAM12: ACALL AAD1 ; 定闹1键按下有 1秒,则快调 MOV R1, #50 ALAM13: ACALL ADSP1 DJNZ R1, ALAM13 JNB P3.3, ALAM12 MOV R1, #10 ; 定闹1 快调结束,闪烁显示定闹时间 8 秒

25、 ALAM14: MOV R3, #40 ALAM15: ACALL ADSP1 DJNZ R3, ALAM15 ACALL D400MS DJNZ R1, ALAM14 AJMP AGAIN ALAM16: NOP JNB P3.3, ALAM11 ; 定闹1键按下不到 1 秒,返回再判 ALAM17: ACALL AAD1 ; 定闹1单次慢调 MOV R1, #10 ; 定闹1慢调结束,闪烁显示定闹时间 12 秒 ALAM18: MOV R3, #40 ALAM19: ACALL ADSP1 DJNZ R3, ALAM19 ACALL D400MS DJNZ R1, ALAM18 AGAI

26、N: JB P3.3, RETUN ; 返回主程序 MOV R4, #08 ALAM21: ACALL ADSP2 ; 用于设置定闹 2 时,长时间按键的显示 MOV A, R4 ; 有定闹2 键按下 CJNE A, #00H, ALAM26 ; 定闹2键按下有 1秒吗? ALAM22: ACALL AAD2 ; 定闹2键按下有 1秒,则快调 MOV R1, #50 ALAM23: ACALL ADSP2 DJNZ R1, ALAM23 JNB P3.3, ALAM22 MOV R1, #10 ; 定闹2 快调结束,闪烁显示定闹时间 9 秒 ALAM24: MOV R3, #40 ALAM25

27、: DJNZ R3, ALAM25 ACALL D400MS DJNZ R1, ALAM24 AJMP LOOP ALAM26: JNB P3.3, ALAM21 ; 定闹2键按下不到 1 秒,返回再判 ALAM27: ACALL AAD2 ; 定闹2单次慢调 MOV R1, #10 ; 定闹2 慢调结束,显示定闹时间 9 秒 ALAM28: MOV R3, #40 ALAM29: ACALL ADSP2 DJNZ R3, ALAM29 ACALL D400MS DJNZ R1, ALAM28 RETUN: AJMP LOOP ; 返回主程序 INTTO: PUSH ACC PUSH PSW

28、DEC R4 MOV A,SECOND CJNE A,#28H,INT01 MOV R5,#0DBH INT01: DJNZ R2, INT02 ; 1 秒计数 MOV R2, #08H CPL DP ; 小数点半秒闪烁 ACALL BEEP ; 1 秒到, 发“笛嗒”声和 LED 旋转脉冲 DJNZ SECOND, OUTT0 MOV SECOND, #3CH ; 1 分到 ACALL ADD1 ; 分十进制加 1子程序 INT02: MOV A, R2 CJNE A, #04H, OUTT0 ; 判断是否半秒 CPL DP ; 是半秒,秒闪动一次 OUTT0: POP PSW POP AC

29、C RETI ADD1: MOV A, MBUF ; 分加1 子程序, ADD A, #01 ; 分十进制加 1 DA A MOV MBUF, A ANL A, #0FH MOV MBUF0, A MOV A, MBUF SWAP A ANL A, #0FH MOV MBUF1, A MOV A, MBUF CJNE A, #60H, ADDOUT MOV MBUF0, #0 MOV MBUF1, #0 MOV MBUF, #0 MOV A, HBUF ADD A, #01 ; 时十进制加1 DA A MOV HBUF, A ANL A, #0FH MOV HBUF0, A MOV A, HB

30、UF SWAP A ANL A, #0FH MOV HBUF1, A MOV A, HBUF CJNE A, #24H, ADDOUT MOV HBUF0, #0 MOV HBUF1, #0 MOV HBUF, #0 ADDOUT: RET AAD1: MOV A, AMBF1 ; 定闹 1,分加1 子程序, ADD A, #01 DA A MOV AMBF1, A ANL A, #0FH MOV AMBF10, A MOV A, AMBF1 SWAP A ANL A, #0FH MOV AMBF11, A MOV A, AMBF1 CJNE A, #60H, AAD1OT MOV AMBF1

31、0, #0 MOV AMBF11, #0 MOV AMBF1, #0 MOV A, AHBF1 ADD A, #01 DA A MOV AHBF1, A ANL A, #0FH MOV AHBF10, A MOV A, AHBF1 SWAP A ANL A, #0FH MOV AHBF11, A MOV A , AHBF1 CJNE A, #24H, AAD1OT MOV AHBF10, #0 MOV AHBF11, #0 MOV AHBF1, #0 AAD1OT: RET AAD2: MOV A, AMBF2 ; 定闹2 分加 1 子程序, ADD A, #01 DA A MOV AMBF2

32、, A ANL A, #0FH MOV AMBF20, A MOV A, AMBF2 SWAP A ANL A, #0FH MOV AMBF21, A MOV A, AMBF2 CJNE A, 60H, AAD2OT MOV AMBF20, #0 MOV AMBF21, #0 MOV AMBF2, #0 MOV A, AHBF2 ADD A, #01 DA A MOV AHBF2, A ANL A, #0FH MOV AHBF20, A MOV A, AHBF2 SWAP A ANL A, #0FH MOV AHBF21, A MOV A, AHBF2 CJNE A, #24H, AAD2OT

33、 MOV AHBF20, #0 MOV AHBF21, #0 MOV AHBF2, #0 AAD2OT: RET DSPM0: MOVC A, A+DPTR ; 白天分个位显示子程序 SETB ACC.7 MOV P1, A CLR P3.5 ACALL DY1MS SETB P3.5 ACALL DY1MS RET DSPM1: MOVC A, A+DPTR ; 白天分十位显示子程序 MOV C, DP MOV ACC.7, C MOV P1, A CLR P3.4 ACALL DY1MS SETB P3.4 ACALL DY1MS RET DSPH0: MOVC A, A+DPTR ; 白天时个位显示子程序 MOV C, DP MOV ACC.7, C MOV P1, A CLR P3.1 ACALL DY1MS SETB P3.1 ACALL DY1MS RET DSPH1: MOVC A, A+DPTR ; 白天时十位显示子程序 SETB ACC.7 MOV P1, A CLR P3.0 ACALL DY1MS SETB P3.0 ACA

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号