格式为“XXXXXX”时分秒,第六位和第三位的横杠固定正常显示,在修改时间或闹钟时,要调整的部分每两位(十位和个位)一起闪烁显示,因此设置了两个标志位MARK和WINK。
MARK:闪烁标志,为1时允许闪烁,为0时禁止闪烁。WINK:位闪烁标志,为8时“时”闪烁,为5时“分”闪烁,为2时“秒”闪烁。要实现闪烁显示,则在选择的那位数码管选通又熄灭后延时一小段时间,才指向下一位数码管。
324蜂鸣模块考虑到已使用了两个中断来实现调整部分,蜂鸣模块主要用查询比较的方式实
现,流程图如图36所示。所用标志位如下:BEEF:蜂鸣标志
14
f图36蜂鸣模块流程图
要令蜂鸣器蜂鸣一分钟,若用定时器TO来帮助计时,设单片机的晶振为12MHz,16位定时最大为216×1μs65536ms,计算初值令T0每50ms计满溢出回零,另设两个标志位记录对50ms计数1200次。但同时,由于在蜂鸣的时候LED要同步显示当前时间,需要调用显示程序,在计数1200次时,执行调用的指令也占用了时间,这样使得蜂鸣时间变长以及较难计算出准确的定时器计算初值,所以在程序中用“分”加1的办法通过比较来实现一分钟的蜂鸣。
15
f325主程序流程图
开始DS初始化
设置闹钟时间状态标志位初始化置外部中断触发方式
中断允许
从DS读取数据
调用显示程序
比较当前时间和闹钟时间
N两者相等?
Y进入蜂鸣状态
N满1分钟?
Y关闭蜂鸣,返回
图37主程序流程图
结合以上各模块流程图,设计主程序流程图如图37所示。
16
f33中断调整模块本设计要处理的按键较多,主要是考虑到调整时间或闹钟时更人性化,方便人
们的操作,因此设置了位选择键、加减键、确认键和取消键。如果都以查询方式来检测,则程序会变得繁琐,而且出现误判断的机会较大,因此为了减少检测的麻烦,同时也为了区别时间和闹钟两个不同的调整任务,设计采用了外部中断方式来处理。该模块流程图如图38所示。
331时间中断模块当外部中断口P32收到下降沿信号,即时间调整键time按下时,程序进入时间
调整中断,默认从“时”开始进行修改。时间调整模块的重点在按键处理部分,本设计采用了查询方式检测是否有键按
下,并消抖延时来确认按下的是哪一个键。如果按下的是位选择键、加键或减键,进入相应程序处理,子程序结束后需继续检测下一次是否有键按下;如果按下的是确认键或取消键,则结束中断。
位选择键处理:选择要调整“时”、“分”或“秒”。初始设置从“时”开始选择,每按下一次标志位WINK改变。按下位选择键后,首r