#电子时钟设计(完美实现最终版) - 图文 下载本文

各模块拼接组合,电路总体设计图如下:

B.程序设计

B.1 程序总体设计

本实验用汇编程序完成. 程序总的流程图如下:

主程序开始 NO 显示星结合电路图,程序设计的整体思路为: 期,时,接通电源,数码管显示星期数,时,分,秒。并且走时显示LED灯每隔1秒改变一次明

分,秒 暗,此为正常工作模式。以下为在该工作方式下模式选择的按键方式:

1. 按1键——日期模式。显示年月日且可调整,调整状态指示灯亮。

是否有调 YES 日期调整对应键如下: 6键——年(千位,百位),按一次该位加1 5键——年(十位,个位),按一次该位加1 4键——月,按一次该位加1 3键——日,按一次该位加1

0键——调整状态指示灯灭,返回主程序,显示时间

2. 按2键——调时模式。显示时分秒且可调整,调整状态指示灯亮。 时间调整对应键如下:

6键——时,按一次该位加1 5键——分,按一次该位加1 4键——秒,按一次该位清0

0键——调整状态指示灯灭,返回主程序,显示时间

3. 按3键——闹铃调整模式。显示闹铃时刻且可调整,调整状态指示灯亮。 闹铃调整对应键如下:

5键——时,按一次该位加1 4键——分,按一次该位加1

0键——调整状态指示灯灭,返回主程序,显示时间

4. 长按4键——定时调整(倒计时)模式。显示定时长度且可调整,调整状态显示灯亮。

定时调整对应键如下:

6键——分,按一次该位加1 5键——秒,按一次该位加1

4键——开启定时功能,并显示倒计时

0键——调整状态指示灯灭,返回主程序,显示时间 5. 按5键铃声测试,扬声器播放音乐。

6. 按下7键,进入秒表模式,显示秒表走时。 拨上7键,秒表暂停;按下7键,秒表又继续走时。 按下8键,秒表清零。

0键——调整状态指示灯灭,返回主程序,显示时间

7. 按下8键,数码管熄灭,时钟仍在走时,进入节能模式。 拨上8键,数码管亮,恢复普通工作模式。

8. 9键为闹铃启动(停止)键,按下可以选择是否要闹铃,以及在闹铃响起时,按此键可以停止闹铃。

9. 10键为铃声选择开关,按下与否,可以选择两手音乐。

10. 11键为闹铃重响控制开关,重响功能开启时,从闹铃随音乐结束而结束的时刻开始,或从手动按9键停止闹铃的时刻开始定时,一段时间后闹铃重响。

11. 12键为闹铃重响间隔选择开关,可选两个定时长度,以便在闹铃重响功能开启时,闹铃初次响后,过一段时间闹铃继续响。

B.2 程序主要模块

B.2.1 延时模块

数码管显示动态扫描时,用到延时程序,这里使用延迟1ms的程序,此程序需要反复调用程序如下:

D_1MS:

MOV R7,#2 D_5: MOV R2,#250 DJNZ R2,$ DJNZ R7,D_5 RET

除数码管动态扫描外,数码管的闪烁提示,以及音乐模块也用到了延时,只是延时的长短不同罢了,在此不再赘述。

B.2.2中断服务程序

本实验中,计数器T0,T1中断都有运用,其中T0中断为时钟定时所用,T1中断用于音乐播放。T0的定时长度为0.01s,工作于方式1,计数1次,时长1us,故计数器计数10000次,进入中断,计数初值为65536-10000=55536=#0D8F0,装满定时器需要0.01s的时间,从而100次中断为一秒,一秒之后,判断是否到60秒,若不到则秒加一,然后返回,若到,则秒赋值为0,分加一,依次类推。包括日期显示的功能也是如此。另外,由于要实现倒计时功能,因此在中断程序中还要加入减一的寄存器,需要时将其进行显示。基于以上考虑,以R3为倒计时中的秒,R4为倒计时的分,当秒加1时R3减一,减到0之后,秒赋值为59,分减一,直到分为0。

以下为定时中断流程图:

进入T0定时中断 NO YES YES NO 修正,重装计数初值 计数器T1工作于方式1, 当调用响铃程序时,其计数功能开启,为音乐音调不同频率的方波的形成,提供延时。其中断服务程序就是根据音调改变音乐方波输出口电平的高低,用语句 CPL实现。 中断服务程序中日历的实现较为复杂,要考虑平年,闰年,特殊的2月,每月的天数的按7键 不尽相同。具体的逻辑判断方法为:首先,要考虑年份是不是闰年,闰年的判断方法是:将年份除以100,若能整除,则将年份除以400,若还能整除,则为闰年,若不能,则为平年;秒表的百分之一秒位,秒位,分位,时若不能被100整除,则判断是否能被4整除,若能,则为闰年,若不能则为平年。只有2月与

位的进位 平、闰年相关,因此在闰年和平年的子程序中,要判断是不是2月,若是则在相应的年中进行日期的增加,若不是则转入平时的月份。其中1、3、5、7、8、10、12月是每月31天,4、

DEC PNUM

PNUM=0,已到1秒 6、9、11月为每月30天。

日历进位判断流程图如下:

年份能否被100整除 本实验用8个数码管,刚好能显示年,月,日,扫描显示与时间的扫描显示类似。年比N Y 较特殊,由两个寄存器存储,个位,十位为0时,表明年数能被100整除,若此时千位,百位

年份是否能被4整除 年份是否能被400整除 组成两位数能被4整除,则年数被400整除,为闰年。若十位,个位组成两位数能被4整除,则年数能被4整除,为闰年。 Y N N Y B.2.3主程序 闰年 平年 主程序主要对按键进行扫描,以及判断定时和闹铃时间是否已到,若到则调用相关程序,该段程序如下: MAIN: 是不是2月 是不是2月 JNB P3.0,DATETZ ;按下0键,显示日期并可对日期进行调整 Y Y JNB P3.1,ZSTZ1 ;日>=28之后返回为1 按下1键,显示时间,并可调时 之后返回为1 日>=29JNB P3.2,NLTZZ ;按下2键,进行闹铃设置 JNB P3.3,DSTZ ;按下3、键,进行定时设置若月份为1、3、57、8、10、12 月则调用31天的程序 JNB P3.4,CESHI ;闹铃测试 若月份为4、6、9、11则调用30天JNB P3.6,STOPWATCHTZ ;按下6键,进入秒表方式 的程序 ACALL DISP ;调用时钟显示子程序 JNB P0.6,RERING ;判断是否开启闹铃重响功能

RE: JNB P2.7,DSPDKQ ;判断是否开启闹铃功能,没开则去判断定时 FMQPD: ;判断定时值R4,R3是否到零、闹铃时刻是否已到 MOV A,HOUR; SUBB A,38H;

JZ FEN ;判断小时数是否到闹铃所定时间,若到,则对分进行判断;若不到,则对定时进行判断 AJMP DSPDKQ FEN:

MOV A,MINUTE; SUBB A,37H;

JZ MIAO ;判断分是否到闹铃所定时间,若到,则对秒进行判断;若不到,则对定时进行判断

N N