1 引 言
这里的倒计时就是计算出从当前时间点需要经过多长时间才能到达目标时间点。从另一个角度讲, 就是计算出两个时间点之间的时间差。
目前, 倒计时系统正得到越来越广泛的应用。
在体育比赛、公交系统乃至铁路系统中出现了很多倒计时的时间显示。就在前不久, 关于上海世博会的倒计时正式启动, 其精度精确到天。
在类似的应用中, 大多数情况下, 倒计时功能(包括显示功能)是由微控制器实现的。微控制器不同于桌面电脑或笔记本电脑, 其系统资源非常有限, 也不能安装复杂的操作系统, 没有现成的倒计时系统可以应用。下面将讨论适合在微控制器中运行的倒计时算法。
2 倒计时算法的两种常用思路
关于倒计时的计算主要有两种思路: 一是针对时间段倒计时, 二是针对目标时间倒计时。
●针对时间段倒计时
时间段的含义就是两个时间点的时间差。对时间段倒计时就是先获取两个时间点之间的时间差,然后随着运行时间的增加对该时间差按运行时间递减, 直至递减为0, 表示倒计时结束。
例如, 微处理器对100天倒计时或者对100秒倒计时, 都属于对时间段倒计时, 时间段分别是100天和100秒。当然, 在实际计算时, 最好先把天换算为秒, 再按运行时间递减。
●针对目标时间倒计时
该种思路与第一种思路最大的不同就是它获取的不是时间差, 而是目标时间, 微控制器须自行计算出当前时间与目标时间的时间差。在这种情况下,随着当前时间的改变, 微控制器必须反复计算与目标时间的时间差, 直至差值为0。
例如, 当前时间是2009年5月10 日11点27分0秒, 微控制器获取到目标时间是2009年5月12日11点27分0秒, 则计算出当前的时间差为2天。
然后, 当前时间一旦改变, 微控制器就必须重新计算时间差, 直到当前时间到达或超过2009年5月12日11点27分0秒。
●两种思路的比较
( 1)获取的时间参数不同
如前所述, 第一种思路获取的是时间差, 第二种思路获取的是目标时间点。
( 2)采取的算法不同
第一种思路的主要算法是按运行时间对获取的时间差进行递减运算, 这实际是时间计时的逆运算。
该算法牵涉到减法运算与天、小时、分钟、秒的时间规则运算。
第二种思路的主要算法就是计算出两个时间点之间的时间差。该算法不仅牵涉到时间规则运算,还牵涉到闰年的概念与多种算术运算, 比第一种思路的算法复杂许多。此外, 由于该算法需要微控制器能够随时获取当前的准确时间, 因此要求微处理器必须具备实时时钟功能。
( 3)应用范围与灵活性不同
第一种思路的实现依靠对运行时间的准确把握。如果微控制器断电或由于其它原因产生复位导致运行中断, 则从此刻起到下一次稳定运行时所经过的时间无法掌控, 进而导致倒计时运算无法继续运行。因此, 该思路只适用于极短时间段的倒计时计算, 其可靠性与灵活性欠佳。
第二种思路的实现需要两点: 一是断电保护的实时时钟功能, 这是为了微控制器能够随时读取准确时间; 二是非易失数据的存储功能, 这是为了微控制器可以长时间保存目标时间。满足了这两点要求, 微控制器就能够可靠地实现倒计时计算, 即使突然断电或复位也不会受到影响。对于第一点要求,不管使用外置时钟还是内置时钟, 只要配置电池就可以实现。对于第二点要求, 当前的主流微控制器大都配置FLASH存储功能, 也可以轻松满足。
可见, 针对目标时间的倒计时算法在可靠性与灵活性上极具优势, 对微控制器的要求也不苛刻。
下面就阐述该算法的实现环节。
3 针对目标时间点的倒计时算法实现
如前所述, 该算法主要是计算当前时间点与目标时间点的时间差。具体思路就是先选择一个参考时间点, 然后分别计算出这两个时间点与参考时间点之间的时间差, 再把这两个时间差相减就得到这两个时间点之间的时间差。
下面分三部分描述该算法: 时间格式的建立; 计算时间点到参考时间点的时间差; 时间差相减算法。
( 1)时间格式的建立
有两种时间格式, 一是时间点的格式; 一是时间差的格式。时间点的格式按年月日时分秒排列, 其中年份为16位无符号整数, 其余为8 位无符号整数。时间差格式按天时分秒排列, 天数为16位无符号整数, 其余为8位无符号整数。