收藏 分享(赏)

单片机的数字钟设计.doc

上传人:HR专家 文档编号:11569337 上传时间:2020-06-28 格式:DOC 页数:20 大小:147.50KB
下载 相关 举报
单片机的数字钟设计.doc_第1页
第1页 / 共20页
单片机的数字钟设计.doc_第2页
第2页 / 共20页
单片机的数字钟设计.doc_第3页
第3页 / 共20页
单片机的数字钟设计.doc_第4页
第4页 / 共20页
单片机的数字钟设计.doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

1、设计题目:单片机的数字钟设计设计目的:此课程设计介绍了基于单片机的数字钟的设计,详细讨论了它从软件上实现的过程,重点在时钟调整的方式:查询和中断的比较,然后,对数字钟的稳定性和精确性作了相关的讨论。 设计目标:实现了数字钟的主要部分和秒表的主要部分,以及产生报时信号,定时设置。 任务下达时间: 2010年3月1日任务完成时间: 2010年3月12日指导教师评语: 年 月 日设计成绩:摘要:本次课程设计介绍了基于单片机的数字钟的设计,详细讨论了它从软件上实现的过程,重点在时钟调整的方式:查询和中断的比较,然后,对数字钟的稳定性和精确性作了相关的讨论。最后,给出了采用中断方式实现的数字钟的源程序。

2、关键词:单片机,数字钟,数据缓冲区,中断,定时,消抖引言:在单片机技术日趋成熟的今天,其灵活的硬件电路的设计和软件的设计,让单片机得到了广泛的应用,几乎是从小的电子产品,到大的工业控制,单片机都起到了举足轻重的作用。单片机小的系统结构几乎是所有具有可编程硬件的一个缩影,可谓是“麻雀虽小,肝胆俱全”,单片机的学习和研究是对微机系统学习和研究的简捷途径。1. 方案论证1.1 数字钟硬件框图1.2 程序整体设计:定时模块,显示模块,数据调整模块,状态调整模块。1、总体介绍此部分主要介绍定时模块,和显示模块。定时部分采用经典的定时器定时。它实现了数字钟的主要部分,和秒表的主要部分,以及产生报时信号,定

3、时设置。显示模块是实现数字钟的又一重要部分,其模块的的独立程度直接影响到数字钟的可视化程度。在此部分的设计中,设置专用显示数据缓冲区40h-45h,与分,时及其他数据缓冲区数据区别,在其中存放的是显示段码,而其他缓冲区存放的是时间数据。在显示时,首先将时间十进制数据转化为显示段码,然后送往数码管显示。显示段码采用动态扫描的方式。在要求改变显示数据的类别时,只须改变R0(指向数据缓冲区的指针)指向的十进制数据缓冲区即可。2、数据调整数据调整有多种方式。一,可以直接进入相关状态进行有关操作,二,将调整分两步,先进入状态,然后执行操作,这两步分别由两个键控制。方式一,比较直接,设计思想也比较简单,但

4、是,这种方式存在操作时间和控制键数目的矛盾。如果用比较少的键,那么可能会在进入状态后处于数据调整等待状态,这样会影响到显示的扫描速度(显示部分可以采用8279芯片来控制,可以解决此问题)。 当然在这种方式下,还可以使用多个状态键,每个状态键,完成一个对应数据的调整。如果采用二的方式,就不会出现这种情况。因为状态的调整,与状态的操作可以分别由两个键控制,其状态的调整数可以多达256个(理论上),操作的完成是这样的,一键控制状态的调整,一键控制数据的调整(具体操作如图2)。以上两种方式的实现都可以采用查询和中断的方式。两种方式必须注意的问题是两者进行相关操作的过程不能太长否则会影响显示的扫描。利用

5、查询的方式,方法传统,对此就不作过多的讨论,以下是采用中断的方式实现的数字钟的一些讨论和有关问题作的一些处理。基于以上的讨论可以设计如下:将调整分为状态调整和数据调整两部分,每次进入中断只执行一次操作,然后返回,这样,就不必让中断处于调整等待状态,这样,可以使中断的耗时很小。R1MBFR1HOURR1FSR1SSR1NULL状态1状态2状态3状态4状态5状态6在状态进入后,调整指针的指向如右图所示:在右图中R1表示指向数据缓冲区的指针,它主要是为数据的调整而设立的,在图中:MBF ,HOUR,FS,SS,分别表示时钟的分,时,定时设置分,时,的数据缓冲区。状态5是秒表进入状态,状态6是时钟正常

6、显示状态。 在程序中R1为专用指针,它的值只在状态调整时改变,每次运行图示模块,只改变一次状态,就跳出程序。调整数据只须改变R1中的数据即可。3、中断方式应注意的问题:采用中断的方式,最好将定时器中断的优先级设置为最高级,关于程序数据的稳定性应注意两个问题:一,在低优先级中断响应时,应在入栈保护数据时禁止高优先级的中断响应。二,在入栈保护有关数据后,对中断程序执行有影响的状态位,寄存器,必须恢复为复位状态的值。例如,在以下程序中,由于用到了十进制调整,所以在中断进入时,将PSW中的AC,CY位清零,否则,十进制调整出错。4、定时准确性的讨论程序中定时器,一直处于运行状态,也就是说定时器是理想运

7、作的,其中断程序每隔0.1秒执行一次,在理想状态下,定时器定时是没有系统误差的,但由于定时器中断溢出后,定时器从0开始计数,直到被重新置数,才开始正确定时,这样中断溢出到中断响应到定时器被重新置数,其间消耗的时间就造成了定时器定时的误差。如果在前述定时器不关的情况下,在中断程序的一开始就给定时器置数,此时误差最小。误差大约为:每0.1秒,误差712个机器周期。当然这是在定时器定时刚好为0.1秒时的情况,由以上分析,如果数字钟设计为查询的方式或是在中断的方式下将定时器中断设置为最高级,我们在定时值设置时,可以适当的扣除9个机器周期的时间值。但如果在中断的情况下,没有将定时器中断设置为最高级,那就

8、要视中断程序的大小,在定时值设置时,扣除相应的时间值。5、软件消抖 消抖可以采用硬件(施密特触发器)的方式,也可以采用软件的方式。在此只讨论软件方式。软件消抖有定时器定时,和利用延时子程序两种方式。一,定时器定时消抖可以不影响显示模块扫描速度,其实现方法是:设置标志位,在定时器中断中将其置位,然后在程序中查询。将其中断优先级设置为低于时钟定时中断,那么它就可以完全不影响时钟定时。二,在采用延时子程序时,如果显示模块的扫描速度本来就不是很快,此时可能会影响到显示的效果,一般情况下,每秒的扫描次数不应小于50次,否则,数码的显示会出现闪烁的情况。因此,延时子程序的延时时间应该小于20毫秒,如果采用

9、定时器定时的方式,延时时间不影响时钟。以下图1和图2是三种消抖方法的程序流程图:图1 查询方式消抖键按下延时键按下Y处理程序结束按键下,开定时器中断中断入口定时器中断关执行操作延时N开关定时器图2 采用中断方式消抖中断入口关本中断置位标志位BZ出口查询标志位BZBZ为1延时N时间开中断,清BZYN定时延长设置0.3秒,甚至更长,而不影响计数2. 基于以上,数字钟详细设计如下:2.1数字钟的操作如下:按键KEY0状态1:KEY0=1,数字钟正常时钟显示状态。状态2:KEY0=2,调整数字钟的分数据。状态3: KEY0=3, 调整数字钟的时数据。状态4: KEY0=4,数字钟的定时设置分值。状态5

10、: KEY0=5,数字钟的定时设置时值。状态6: KEY0=6,秒表进入状态。说明:状态N表示KEY0键按下N次。22流程图: 程序设计的基本流程图如下:显示状态是否切换查询取代码段送到缓冲单元六位显示完?开始各缓冲区初始化各定时器中断设置开始计数显示缓冲区单元地址R0段显示单元值段扫描值送为数据口P1让调整位DPD点亮延时一小段时间显示单元地址加一扫描值右移一位YN三个要显示状态秒表数据单元定时设置数据单元时钟数据显示中断入口定时器置初值时间计数单元加一计数值等于10?计数值等单元清零秒值加一秒值等于60?秒值清零分值加一分值等于60?分值清零时值加一时值等于24?时值清零结束YYYY标志位

11、为1?秒表计数单元YN分值比较分时设定值等于时钟值?标志位BS置1,输出报时脉冲YN3.源代码NAME ZFPORT EQU 0CFA0HHOUR EQU 26H ;设置数据缓冲区BUF EQU 23H SBF EQU 22H MBF EQU 21H SA EQU 27HFA EQU 28HHH EQU 29HMB0 EQU 2AHMB1 EQU 2BHMB2 EQU 2CH MM0 EQU 2DH CSEG AT 0000H LJMP START ;中断初始化CSEG AT 0003H LJMP KEY0 CSEG AT 0013H LJMP KEY1CSEG AT 401BH LJMP C

12、LOCKCSEG AT 4100HSTART: MOV R0, #40H ;数据缓冲区初始化 MOV R6,#00H MOV A, #00H MOV R0, A INC R0 MOV R0, A INC R0 MOV R0, A INC R0 MOV R0, A INC R0 MOV R0, A INC R0 MOV R0, A MOV SP, #30H MOV TMOD, #10H MOV TH1, #38H MOV TL1, #00H MOV BUF, #00H MOV SBF, #00H MOV MBF, #00H MOV HOUR,#00H MOV SA, #00H MOV FA, #

13、00H MOV HH, #00H MOV MB0, #00H MOV MB1, #00H MOV MB2, #00H MOV MM0, #00H SETB ET1 SETB EX1 SETB PT1 SETB EA SETB P3.5 CLR P3.0 MOV TCON, #45H MOV R5, #01HDS1: MOV R0, #40H ;扫描显示 MOV R2, #20H DS2: MOV DPTR, #PORT MOV A, R0 ACALL TABLE CJNE R5, #02 ,L3 SJMP L2L3: CJNE R5, #04H,L1 ;让调整位的DP点亮L2: CJNE R0

14、, #42H,L0 ADD A,#80H SJMP L0L1: CJNE R5,#03H, L4 SJMP L5L4: CJNE R5, #05H,L0L5: CJNE R0, #44H,L0 ADD A,#80HL0: MOVX DPTR, A MOV A, R2 CPL A MOV P1, A MOV R3, #07FH DEL: NOP DJNZ R3, DEL INC R0 CLR C MOV A, R2 RRC A MOV R2, A S2: CJNE R5,#06H,S3 ;切换到显示秒表计数 SETB EX0 SJMP MIAOBIAOS3: CJNE R5,#04H,S1 ;切

15、换到定时设置状态的显示 SJMP DINGSHI S1: CJNE R5,#05H,S0 SJMP DINGSHI S0: JNZ DS2 MOV R0, #40H ;取缓冲区到显示缓冲区 MOV A, SBF ACALL GET MOV A, MBF ACALL GET MOV A, HOUR ACALL GET SJMP DS1MIAOBIAO:JNZ DS2 ;秒表显示 MOV R0, #40H MOV A, MB0 ACALL GET MOV A, MB1 ACALL GET MOV A, MB2 ACALL GET AJMP DS1 DINGSHI: JNZ DS2 ; 定时设置显示

16、 MOV R0, #40H MOV A, HH ACALL GET MOV A, FA ACALL GET MOV A, SA ACALL GET AJMP DS1 TABLE: INC A ;查表取段码 MOVC A, A+PC RET DB 3FH DB 06H DB 5BH DB 4FH DB 66H DB 6DH DB 7DH DB 07H DB 7FH DB 6FH DB 40HGET: ;将一个两位十进制数放入两个数码管对应的两个缓冲区 MOV R4, A ANL A, #0FH MOV R0, A INC R0 MOV A, R4 SWAP A ANL A, #0FH MOV R

17、0, A INC R0 RETCLOCK: ;定时器中断服务程序 JNB P3.0,D4 ;产生定时输出脉冲 CPL P3.4 D4: MOV TL1, #0AFH MOV TH1, #3CH PUSH PSW PUSH ACC JNB P3.5,C0 ;秒表计数模块 INC MB0 MOV A, MB0 CJNE A, #0AH,C0 MOV MB0, #00H MOV A, MB1 INC A DA A MOV MB1, A CJNE A, #60H, C0 MOV MB1, #00H MOV A, MB2 INC A DA A MOV MB2, A CJNE A, #60H, C0 MO

18、V MB2, #00H C0: JNB 78H, Z1 ;时钟计数程序 INC R6 CJNE R6,#05H,Z1 MOV R6,#00H CLR 78H SETB EX0 Z1: JNB 79H, Z2 ;去抖延时程序 INC R6 CJNE R6,#0FH,Z2 MOV R6,#00H CLR 79H SETB EX1 Z2: INC BUF MOV A, BUF CJNE A, #0AH,QUIT MOV BUF, #00H MOV A, SBF INC A DA A MOV SBF, A CJNE A, #60H, QUIT MOV SBF, #00H MOV A, MBF CLR

19、P3.0 ;定时脉冲输出一分钟 D2: INC A DA A MOV MBF, A MOV A, FA ;定时比较分值 CJNE A, MBF,D0 SJMP D1D0: MOV A, MBF CJNE A, #60H, QUIT MOV MBF, #00H MOV A, HOUR INC A DA A MOV HOUR ,AD1: MOV A,SA ;定时比较时值 CJNE A, HOUR,D3 SETB P3.0D3: MOV A, HOUR CJNE A,#18H,QUIT MOV HOUR,#00HQUIT: POP ACC POP PSW RETI KEY0: CLR ET1 ;外部

20、中断零服务程序 PUSH ACC PUSH PSW SETB ET1 CLR EX0 CLR CY ;清与十进制调整有关的状态位 CLR AC SETB 78H JB P3.5,K0 MOV MB0, #00H ; 秒表数据清零 MOV MB1, #00H MOV MB2, #00H K0: MOV A,R1 ;完成加一操作 INC A DA A CJNE R1, #26H,K2 ;调整数据的限制 SJMP K3 K2: CJNE R1, #27H,K4 SJMP K3 K4: CJNE A #60H,K1 MOV A,#00H K3: CJNE A #24H,K1 MOV A,#00H K1

21、: MOV R1,A POP PSW POP ACC RETI KEY1: CLR ET1 ;外部中断一中断程序,完成状态的调整 PUSH ACC PUSH PSW SETB ET1 CLR EX1 SETB 79H CJNE R5,#01H,M0 MOV R1,#21H INC R5 SETB EX0 SJMP EXIT M0: CJNE R5,#02H,M1 MOV R1,#26H INC R5 SETB EX0 SJMP EXIT M1: CJNE R5,#03H,M2 MOV R1,#28H INC R5 SETB EX0 SJMP EXIT M2: CJNE R5,#04H,M3 M

22、OV R1,#27H INC R5 SETB EX0 SJMP EXITM3: CJNE R5,#05H,M4 INC R5 MOV R1,#00H SETB EX0 SJMP EXIT M4: CJNE R5,#06H,EXIT MOV R1,#00H MOV R5,#01H CLR EX0 EXIT: SETB EX1 POP PSW POP ACC RETI END4.结束语:此次课程设计从整体到部分详细介绍了数字钟的设计,在比较重要的部分进行了详细的论述,并且给出了程序框图及说明。文中在讨论部分隐含的给出了几种数字钟的设计方法,在最后给出了一种采用中断方式设计的数字钟,此方法得到了实验的证明。其可靠性和稳定性都达到了很好的效果。在文中最后给出的设计的基础上很容易扩展写入年月日,其方法基本与时间的显示和调整相类似。5参考资料:1 李建忠 编著 ,单片机原理及应用.西安电子科技大学出版 2002年2月2 张俊谟 编著 ,单片机中级教程.北京航空航天大学出版 2000年1月

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

当前位置:首页 > 学术论文 > 管理论文

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报