各模块拼接组合,电路总体设计图如下:
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。
<