2.3 软件部分的设计
2.3.1 主程序部分的设计
程序部分主要采用了程序结构的模块化设计,避免了一些函数的不必要的重复书写,使程序变得单间易懂。程序在执行时,主程序要须通过调用子函数就可完成相应的功能 。主程序流程图如下图2-7。
图2-7 主程序流程图
2.3.2 中断定时器的设置
数字电子钟设计中主要使用定时器T0中断ET0,利用ET0中断进行计时时间的自增,从而实现计时功能。
AT89C51有两个通用定时/计数器。两者均可配置为定时器或事件计数器。另外增加了定时器T0/T1,溢出时T0/T1脚自动翻转的功能选项。 用作“定时器”功能时,每经过一个机器周期,寄存器值加1。 用作“计数器”功能时,寄存器在对应的外部输入管脚T0/T1上每发生一次1到0的跳变时加1。使用该功能时,外部输入每个机器周期被采样一次。
图2-8 定时器工作原理[1]
设计中采用了中断方式1作为定时中断,其定时计数初值的设置可由以下公式计
5
算得到,中断服务流程图如下图2-9。
X?216?tTcy
X:计数初值 t:定时时间 Tcy:机器周期 [1]
图2-9 中断服务流程图
2.3.3 闹钟子函数
闹钟时间的判别主要是通过设定时间与实时时间对逐位对比确定是否进行闹铃。 其工作流程图如下图2-10。
6
图2-10 闹铃判断流程图
2.3.4 计时函数
计时函数部分,主要是通过单片机定时中断来计时,每产生一次中断标志位flag加1,当flag加满20次为1秒,然后把flag清0把秒存储单元加1。然后再依次判断分、时。其流程图如下图2-11。
7
图2-11 计时流程图
2.3.5 键盘扫描函数
这些函数主要是判断是否有按键按下,并根据相应按键按下的情况调用相关函数执行,其相关流程图如下图2-12。
图2-12 键盘扫描流程图
2.3.6 时间和闹钟的设置
此部分主要是通过判断cnt在不同值时通过调用加1、减1子函数对时间和闹钟的时、分、秒进行设置。在闹钟设置时,判断按键S4按下情况后,进行闹钟的开启与关闭,相关流程图如下图2-13。
8