单片机的数字钟设计Word文档下载推荐.docx

上传人:b****6 文档编号:16299554 上传时间:2022-11-22 格式:DOCX 页数:17 大小:157.68KB
下载 相关 举报
单片机的数字钟设计Word文档下载推荐.docx_第1页
第1页 / 共17页
单片机的数字钟设计Word文档下载推荐.docx_第2页
第2页 / 共17页
单片机的数字钟设计Word文档下载推荐.docx_第3页
第3页 / 共17页
单片机的数字钟设计Word文档下载推荐.docx_第4页
第4页 / 共17页
单片机的数字钟设计Word文档下载推荐.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

单片机的数字钟设计Word文档下载推荐.docx

《单片机的数字钟设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《单片机的数字钟设计Word文档下载推荐.docx(17页珍藏版)》请在冰豆网上搜索。

单片机的数字钟设计Word文档下载推荐.docx

以上两种方式的实现都可以采用查询和中断的方式。

两种方式必须注意的问题是两者进行相关操作的过程不能太长否则会影响显示的扫描。

利用查询的方式,方法传统,对此就不作过多的讨论,以下是采用中断的方式实现的数字钟的一些讨论和有关问题作的一些处理。

基于以上的讨论可以设计如下:

将调整分为状态调整和数据调整两部分,每次进入中断只执行一次操作,然后返回,这样,就不必让中断处于调整等待状态,这样,可以使中断的耗时很小。

在状态进入后,调整指针的指向如右图所示:

在右图中@R1表示指向数据缓冲区的指针,它主要是为数据的调整而设立的,在图中:

MBF,HOUR,FS,SS,分别表示时钟的分,时,定时设置分,时,的数据缓冲区。

状态5是秒表进入状态,状态6是时钟正常显示状态。

在程序中@R1为专用指针,它的值只在状态调整时改变,每次运行图示模块,只改变一次状态,就跳出程序。

调整数据只须改变@R1中的数据即可。

3、中断方式应注意的问题:

采用中断的方式,最好将定时器中断的优先级设置为最高级,关于程序数据的稳定性应注意两个问题:

一,在低优先级中断响应时,应在入栈保护数据时禁止高优先级的中断响应。

二,在入栈保护有关数据后,对中断程序执行有影响的状态位,寄存器,必须恢复为复位状态的值。

例如,在以下程序中,由于用到了十进制调整,所以在中断进入时,将PSW中的AC,CY位清零,否则,十进制调整出错。

4、定时准确性的讨论

程序中定时器,一直处于运行状态,也就是说定时器是理想运作的,其中断程序每隔0.1秒执行一次,在理想状态下,定时器定时是没有系统误差的,但由于定时器中断溢出后,定时器从0开始计数,直到被重新置数,才开始正确定时,这样中断溢出到中断响应到定时器被重新置数,其间消耗的时间就造成了定时器定时的误差。

如果在前述定时器不关的情况下,在中断程序的一开始就给定时器置数,此时误差最小。

误差大约为:

每0.1秒,误差7—12个机器周期。

当然这是在定时器定时刚好为0.1秒时的情况,由以上分析,如果数字钟设计为查询的方式或是在中断的方式下将定时器中断设置为最高级,我们在定时值设置时,可以适当的扣除9个机器周期的时间值。

但如果在中断的情况下,没有将定时器中断设置为最高级,那就要视中断程序的大小,在定时值设置时,扣除相应的时间值。

5、软件消抖

 

消抖可以采用硬件(施密特触发器)的方式,也可以采用软件的方式。

在此只讨论软件方式。

软件消抖有定时器定时,和利用延时子程序两种方式。

一,定时器定时消抖可以不影响显示模块扫描速度,其实现方法是:

设置标志位,在定时器中断中将其置位,然后在程序中查询。

将其中断优先级设置为低于时钟定时中断,那么它就可以完全不影响时钟定时。

二,在采用延时子程序时,如果显示模块的扫描速度本来就不是很快,此时可能会影响到显示的效果,一般情况下,每秒的扫描次数不应小于50次,否则,数码的显示会出现闪烁的情况。

因此,延时子程序的延时时间应该小于20毫秒,如果采用定时器定时的方式,延时时间不影响时钟。

以下图1和图2是三种消抖方法的程序流程图:

图1查询方式消抖

图2采用中断方式消抖

中断入口

关本中断

置位标志位BZ

出口

查询标志位BZ

BZ为1

延时N时间

开中断,清BZ

Y

N

定时延长设置0.3秒,甚至更长,而不影响计数

2.基于以上,数字钟详细设计如下:

2.1数字钟的操作如下:

按键KEY0

状态1:

KEY0=1,数字钟正常时钟显示状态。

状态2:

KEY0=2,调整数字钟的分数据。

状态3:

KEY0=3,调整数字钟的时数据。

状态4:

KEY0=4,数字钟的定时设置分值。

状态5:

KEY0=5,数字钟的定时设置时值。

状态6:

KEY0=6,秒表进入状态。

说明:

状态N表示KEY0键按下N次。

2.2流程图:

程序设计的基本流程图如下:

显示状态是否切换查询

3.源代码

NAME 

ZF

PORT 

EQU 

0CFA0H

HOUR 

26H 

设置数据缓冲区

BUF 

23H 

SBF 

22H 

MBF 

21H

SA 

EQU 

27H

FA 

28H

HH 

29H

MB0 

2AH

MB1 

2BH

MB2 

2CH

MM0 

2DH

CSEGAT0000H

LJMPSTART 

中断初始化

CSEGAT0003H

LJMPKEY0 

CSEGAT0013H

LJMPKEY1

CSEGAT401BH

LJMPCLOCK

CSEGAT4100H

START:

MOV 

R0,#40H 

数据缓冲区初始化

R6,#00H

A,#00H 

@R0,A 

INC 

R0

MOV 

@R0,A

SP, 

#30H

TMOD,#10H

TH1,#38H 

TL1,#00H

BUF,#00H 

SBF,#00H

MBF,#00H

HOUR,#00H

SA, 

#00H

FA, 

HH, 

MB0, 

MB1, 

MB2, 

MM0, 

SETB 

ET1

EX1

PT1

SETB 

EA

P3.5

CLR 

P3.0

TCON, 

#45H

R5, 

#01H

DS1:

扫描显示

R2,#20H 

DS2:

DPTR,#PORT 

A,@R0 

ACALL 

TABLE

CJNE 

R5,#02,L3

SJMP 

L2

L3:

R5,#04H,L1;

让调整位的

DP点亮

L2:

R0,#42H,L0

ADD 

A,#80H

L0

L1:

R5,#03H,L4

L5

L4:

R5,#05H,L0

L5:

R0,#44H,L0

L0:

MOVX 

@DPTR,A

A,R2 

CPL 

A

P1,A

R3,#07FH

DEL:

NOP

DJNZ 

R3,DEL

R0 

C

A,R2

RRC 

R2,A 

S2:

R5,#06H,S3 

切换到显示秒表计数

EX0

SJMPMIAOBIAO

S3:

R5,#04H,S1;

切换到定时设置状态的显示

DINGSHI

S1:

R5,#05H,S0

S0:

JNZ 

DS2

取缓冲区到显示缓冲区

A,SBF 

ACALL 

GET

A,MBF 

A,HOUR

DS1

MIAOBIAO:

JNZ 

DS2 

秒表显示

R0,#40H

A,MB0

A,MB1

A,MB2

AJMP 

DS1 

DINGSHI:

定时设置显示

A,HH 

A,FA

A,SA

DS1

TABLE:

查表取段码

MOVC 

A,@A+PC

RET

DB 

3FH

06H

5BH

4FH

66H

6DH

7DH

DB 

07H

7FH

6FH

40H

GET:

将一个两位十进制数放入两个数码管对应的两个缓冲区

R4,A

ANL 

A,#0FH 

A,R4

SWAP 

A,#0FH

CLOCK:

定时器中断服务程序

JNB 

P3.0,D4 

产生定时输出脉冲

P3.4

D4:

TL1,#0AFH

TH1,#3CH

PUSH 

PSW

ACC

P3.5,C0 

秒表计数模块

MB0 

A,MB0 

A,#0AH,C0

MB0,#00H

DA 

MB1,A

A,#60H,C0 

MB1,#00H 

MB2,A

A,#60H,C0

MB2,#00H 

C0:

78H,Z1 

时钟计数程序

R6

R6,#05H,Z1

R6,#00H

78H

Z1:

79H,Z2 

去抖延时程序

R6,#0FH,Z2

79H

EX1

Z2:

INC 

BUF

A,BUF 

A,#0AH,QUIT

A,SBF

A

SBF,A

A,#60H,QUIT

SBF,#00H

A,MBF

CLR 

P3.0 

定时脉冲输出

一分钟

D2:

MBF,A

A,FA 

定时比较分值

A,MBF,D0 

D1

D0:

A, 

MBF

MBF,#00H

MOV 

HOUR,A

D1:

A,SA 

定时比较时值

A,HOUR,D3

D3:

A,#18H,QUIT

QUIT:

POP 

RETI 

KEY0:

ET1 

外部中断零服务程序

SETBET1

CY 

清与十进制调整有关的状态位

AC

JB 

P3.5,K0

#00H;

秒表数据清零

#00H

K0:

A,@R1 

完成加一操作

R1,#26H,K2 

调整数据的限制

K3

K2:

R1,#27H,K4

SJMP 

K3 

K4:

CJNEA#60H,K1

A,#00H

K3:

CJNEA#24H,K1

A,#00H 

K1:

@R1,A

RETI

KEY1:

外部中断一中断程序,完成状态的调整

CJNER5,#01H,M0

R1,#21H

R5

SJMPEXIT

M0:

CJNER5,#02H,M1

R1,#26H

R5

M1:

CJNER5,#03H,M2

R1,#28H

M2:

CJNER5,#04H,M3

R1,#27H

EXIT

M3:

CJNER5,#05H,M4

MOVR1,#00H

M4:

CJNER5,#06H,EXIT

R1,#00H

R5,#01H

EXIT:

SETBEX1

RETI

END

4.结束语:

此次课程设计从整体到部分详细介绍了数字钟的设计,在比较重要的部分进行了详细的论述,并且给出了程序框图及说明。

文中在讨论部分隐含的给出了几种数字钟的设计方法,在最后给出了一种采用中断方式设计的数字钟,此方法得到了实验的证明。

其可靠性和稳定性都达到了很好的效果。

在文中最后给出的设计的基础上很容易扩展写入年月日,其方法基本与时间的显示和调整相类似。

5.参考资料:

[1] 

李建忠 

编著,《单片机原理及应用》.西安电子科技大学出版 

2002年2月

[2] 

张俊谟 

编著,《单片机中级教程》.北京航空航

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

当前位置:首页 > 高等教育 > 法学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1