单片机数字时钟设计,时分

发布时间 : 星期六 文章单片机数字时钟设计,时分更新完毕开始阅读

四 软件程序的设计 4.1 软件流程内容

本设计的软件程序包括主程序、中断子程序、打铃子程序、时钟显示子程序、查询时间表切换程序和延时子程序等等。另外由于电路中有四个按键,还另外设计了防抖动程序来防止干扰。

4.2 软件流程图

4.2.1 系统软件设计流程图

这次的数字电子钟设计用到很多子程序,它们的流程图如下所示。 主程序是先开始,然后启动定时器,定时器启动后在进行按键检测,检测完后,就可以显示时间。

开始 启动定时器 按键检测

时间显示 图4-1 主程序流程图

按键处理是先检测秒按键是否按下,秒按键如果按下,秒就加1;如果没有按下,就检测分按键是否按下,分按键如果按下,分就加1;如果没有按下,就检测时按键是否按下,时按键如果按下,时就加1;如果没有按下,就把时间显示。

4.3 定时程序设计

单片机的定时功能也是通过计数器的计数来实现的,此时的计数脉冲来自单片机的内部,即每个机器周期产生一个计数脉冲,也就是每经过1个机器周期的时间,计数器加1。如果MCS-52采用的12MHz晶体,则计数频率为1MHz,即每过1us的时间计数器加1。这样可以根据计数值计算出定时时间,也可以根据定时时间的要求计算出计数器的初值。MCS-51单片机的定时器/计数器具有4种工作方式,其控制字均在相应的特殊功能寄存器中,通过对特殊功能寄存器的编程,可以方便的选择定时器/计数器两种工作模式和4种工作方式。

定时器/计数器工作在方式0时,为13位的计数器,由TLX(X=0、1)的低5位和THX的高8位所构成。TLX低5位溢出则向THX进位,THX计数溢出则置位TCON中的溢出标志位TFX.

当定时器/计数器工作于方式1,为16位的计数器。本设计师单片机多功能定时器,所以MCS-51内部的定时器/计数器被选定为定时器工作模式,计数输入信号是内部时钟脉冲,每个机器周期产生一个脉冲使计数器增1。

4.3.1实时时钟实现的基本方法:

时钟的最小计时单位是秒,但使用定时器的方式1,最大的定时时间也只能达到131ms。我们可把定时器的定时时间定为50ms。这样,计数溢出20次即可得到时钟的最小计时单位:秒。而计数20次可以用软件实现。

秒计时是采用中断方式进行溢出次数的累积,计满20次,即得到秒计时。从秒到分,从分到时是通过软件累加并进行比较的方法来实现的。要求每满1秒,则“秒”单元中的内容加1;“秒”单元满60,则“分”单元中的内容加1;“分”单元满60,则“时”单元中的内容加1;“时”单元满24,则将时、分、秒的内容全部清零。

4.3.2 实时时钟程序设计步骤:

(1)选择工作方式,计算初值; (2)采用中断方式进行溢出次数累计;

(3)从分——时的计时是通过累加和数值比较实现的;

(4)时钟显示缓冲区:时钟时间在方位数码管上进行显示,为此在内部 RAM中要设置显示缓冲区,共6个地址单元。显示缓冲区从左到右依次存放时、分、秒数值;

(5)主程序:主要进行定时器/计数器的初始化编程,然后反复调用显示

子程序的方法等待中断的到来。 (6)中断服务程序:进行计时操作

(7)加1子程序:用于完成对时、分、秒的加操作,中断服务程序在秒、 分、时加1时共有三种条调用加1子程序,包括三项内容:合字、加1并进行十进制调整、分字。

源程序如下: S_SET 钟秒控制位

M_SET 控制位

H_SET 控制位

D_SET BIT P1.3 ;天控制位 SECOND MINUTE HOUR TCNT

;初始化

MOV MOV MOV MOV MOV MOV SETB

TCNT,#0 TR0

TMOD,#01H

TH0,#(65536-50000)/256 TL0,#(65536-50000)MOD 256 IE,#82H MINUTE,#0 SECOND,#0

EQU EQU EQU EQU ORG SJMP ORG LJMP MOV MOV

START INT_T0

DPTR,#TABLE HOUR,#0

0BH 30H 31H 32H 34H 00H

BIT

P1.2

;小时

BIT

P1.1

;分钟

BIT

P1.0

;数字

DAY EQU 33H

START:

MOV DAY,#0

MOV

;定时50毫秒

;**************************************************** ;判断是否有控制键按下,是哪一个键按下

A1:

S1: S2: K1: S3: K2:

LCALL DISPLAY JNB JNB JNB LJMP JB INC MOV CJNE MOV LJMP JB INC MOV CJNE MOV LJMP JB INC MOV CJNE MOV

A,#24,J2 A,#60,J1 K2 A,#60,J0 K1 A1

S_SET,S1 M_SET,S2 H_SET,S3

;去抖动

LCALL DELAY

S_SET,A1 SECOND A,SECOND ;判断是否加到60秒 SECOND,#0

;秒值加1

LCALL DELAY

M_SET,A1 MINUTE A,MINUTE ;判断是否加到60分 MINUTE,#0

;分钟值加1

LCALL DELAY

H_SET,A1 HOUR A,HOUR

;判断是否加到24小时 HOUR,#0

;小时值加1

LJMP K3

K3: INC DAY ;天值加1 MOV

MOV LJMP

MINUTE,#0 A1

SECOND,#0

;**************************************************** ;等待按键抬起 J0:

JB S_SET,A1

联系合同范文客服:xxxxx#qq.com(#替换为@)