3. 秒,分,时等进位 T0中断 定时到 闹铃到 按1键 主程序开始 显示星期,时, 是否有调 转? 按2键 按3键 按4键 按5键 按7键 闪烁提示 响铃提示 显示日期并调整 时间调整 闹铃设置 定时设置 铃声测试 秒表模式 回主程序 按0键 回主程序 按0键 按4键 按0键 7键恢按8键 9 倒计时启动并显示 回主程序 秒表暂停 秒表清零 按0键 按7键
B.2 程序主要模块
B.2.1 延时模块
数码管显示动态扫描时,用到延时程序,这里使用延迟1ms的程序,此程序需反复调,除数码管动态扫描外,数码管的闪烁提示,以及音乐模块也用到了延时,只是延时的长短不同罢了,在此不再赘述。 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。
计数器T1工作于方式1, 当调用响铃程序时,其计数功能开启,为音乐音调不同频率的方波的形成,提供延时。其中断服务程序就是根据音调改变音乐方波输出口电平的高低,用语句 CPL实现。
中断服务程序中日历的实现较为复杂,要考虑平年,闰年,特殊的2月,每月的天数的不尽相同。具体的逻辑判断方法为:首先,要考虑年份是不是闰年,闰年的判断方法是:将年份除以100,若能整除,则将年份除以400,若还能整除,则为闰年,若不能,则为平年;若不能被100整除,则判断是否能被4整除,若能,则为闰年,若不能则为平年。只有2月与平、闰年相关,因此
10
在闰年和平年的子程序中,要判断是不是2月,若是则在相应的年中进行日期的增加,若不是则转入平时的月份。其中1、3、5、7、8、10、12月是每月31天,4、6、9、11月为每月30天。
日历进位判断流程图如下:
年份是否能被4整除 年份能否被100整除 N Y 年份是否能被400整除
Y Y 平年 N N 闰年 Y 是不是2月 是不是2月 日>=28之后返回为1 N N Y 日>=29之后返回为1 若月份为1、3、5、7、8、10、12月则调用31天的程序 若月份为4、6、9、11则调用30天的程序 本实验用8个数码管,刚好能显示年,月,日,扫描显示与时间的扫描显示类似。年比较特殊,由两个寄存器存储,个位,十位为0时,表明年数能被100整除,若此时千位,百位
组成两位数能被4整除,则年数被400整除,为闰年。若十位,个位组成两位数能被4整除,则年数能被4整除,为闰年。 B.2.3主程序
主程序主要对按键进行扫描,以及判断定时和闹铃时间是否已到,若到则
11
调用相关程序。 B.2.4 显示子程序
8个数码管轮流进行显示,分别显示1ms,依赖人的视觉 暂留效应,给人以数码管持续高亮的错觉。
日期的显示,秒表的显示,倒计时的显示,调闹铃,调定时的显示,闪烁的显示程序与以上的的扫描相似,有的以子程序的方式出现,通过子程序调用语句ACALL调用;有点直接嵌套在相应的程序里面,顺序执行,或者用调转语句AJMP调用。
C 程序调试及仿真
本程序通过Keil单片机开发平台实现程序的编译,链接,生成HEX文件。通过Keil和硬件仿真平台Proteus的联合,可以将设计效果仿真出来,根据效果,有目的的改变设计,优化程序。 利用Proteus仿真实验过程截图:
普通时间显示模式仿真图,表示:星期一 9点10分38秒
五,总结
本文先从整体论述了设计电子钟的大致思路,然后再采用划分模块的方
法,将硬件电路划分为开关电路,显示驱动电路,以及数码管电路等,而软件部分,则依据要实现的功能,划分为:闹钟的声音程序,时间显示程序,日期显示程序,秒表显示程序,时间调整程序、闹钟调整程序、定时调整程序,延
12