电子时钟设计(完美实现最终版)要点 下载本文

电子时钟实验报告

结合电路图,程序设计的整体思路为:

接通电源,数码管显示星期数,时,分,秒。并且走时显示LED灯每隔1秒改变一次明暗,此为正常工作模式。以下为在该工作方式下模式选择的按键方式:

1. 按1键——日期模式。显示年月日且可调整,调整状态指示灯亮。 日期调整对应键如下: 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键——调整状态指示灯灭,返回主程序,显示时间

8

电子时钟实验报告

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为倒

9

电子时钟实验报告

计时中的秒,R4为倒计时的分,当秒加1时R3减一,减到0之后,秒赋值为59,分减一,直到分为0。

以下为定时中断流程图:

进入T0定时中断 修正,重装计数初值

NO 按7键

YES 秒表的百分之一秒位,秒位,分位,时 位的进位 DEC PNUM

YES PNUM=0,已到1秒

NO

MOV PNUM,#100重装中断计数值

INC SECOND 秒位加1 R3,R4所存定时长度减1 分,时,日周,月,年的进位 RETI 中断返回 10

电子时钟实验报告

计数器T1工作于方式1, 当调用响铃程序时,其计数功能开启,为音乐音调不同频率的方波的形成,提供延时。其中断服务程序就是根据音调改变音乐方波输出口电平的高低,用语句 CPL实现。

中断服务程序中日历的实现较为复杂,要考虑平年,闰年,特殊的2月,每月的天数的不尽相同。具体的逻辑判断方法为:首先,要考虑年份是不是闰年,闰年的判断方法是:将年份除以100,若能整除,则将年份除以400,若还能整除,则为闰年,若不能,则为平年;若不能被100整除,则判断是否能被4整除,若能,则为闰年,若不能则为平年。只有2月与平、闰年相关,因此在闰年和平年的子程序中,要判断是不是2月,若是则在相应的年中进行日期的增加,若不是则转入平时的月份。其中1、3、5、7、8、10、12月是每月31天,4、6、9、11月为每月30天。

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

Y N 是不是2月 是不是2月 年份是否能被4整除 年份能否被100整除 N Y 年份是否能被400整除 Y 平年 N N 闰年 Y N Y 日>=29之后返回为1 日 >=28之后返回为1 若月份为1、3、5、7、8、10、12月则调用31天的程序 若月份为4、6、9、11则调用30天的程序 11