关 闭

新闻中心

EEPW首页 > 工控自动化 > 设计应用 > 基于微控制器的倒计时算法与实现

基于微控制器的倒计时算法与实现

作者:时间:2011-02-15来源:网络收藏

  ( 2)到参考时间点的时间差

  该有两个重点, 一是参考时间点的选取, 二是根据闰年规则对时间差中的天数进行补偿。

  关于参考时间点的选取, 应符合两个原则: 一是方便闰年的计算, 二是方便时间差的计算。在这里,选取2001年1月1日0时0分0秒为参考时间点。

  图1是时间点到该参考时间点的示例代码,pT mi e是指向时间点的数据结构指针, pResult是指向时间差的数据结构指针。下面对该段代码逐条说明。





图1 天数时间差参考代码

  图1- 1定义了一个数组, 它的12个元素对应1月份到12月份所累积的天数。请注意两点, 一是该天数不包括本月份的天数, 二是二月份的天数按28天计。

  图1- 2是计算时间点与参考时间点的年份、月份与日期的差值。

  图1- 3 是初步计算天数差。在这里应用到了图1- 1定义的数组与图1- 2的计算结果。首先,按照每年365天来计算天数, 再按照闰年个数补偿天数, 最后按月份日期的差值计算本年度过的天数。

  代码中的( Y earId /4) 就是初步的闰年补偿计算, 补偿规则就是把年份差被4整除的值视为经过的闰年个数, 也就是要补偿的天数。

  图1- 4是根据世纪年(也就是能被100整除的年份)的闰年判断规则对图1- 3的计算结果进行校正。这是因为图1- 3 进行的闰年补偿计算所依据的是非世纪年的闰年判断规则, 这一规则在判断世纪年是否为闰年时可能会产生误差。在这里, 对该步骤算法采用了条件编译, 这是考虑到该计算牵涉到真正的多字节除法, 比较耗时, 设计者可以根据实际需要决定是否运行该计算。

  图1- 5是判断时间点的年份是否闰年, 进而进行最后的天数调整。请注意, 在图1- 3与图1- 4的计算中, 只计算了度过的年份中包含了多少个闰年, 这其中不包含时间点本身的年份。在本计算中,先调用函数判断时间点年份是否闰年, 再根据时间点的月份是否超过2月决定是否对天数进行补偿。

  图1 - 6是记录时间差结果。因为参考时间点的时分秒选择的是0时0分0秒, 所以时间差的时分秒也就是时间点的时分秒。

  图2是闰年判断函数的参考代码。该函数提供了两种判断计算, 一种是关于闰年规则的完整判断,即当年份不能被100整除时, 能被4整除的是闰年;当年份能被100整除时, 必须能被400 整除才是闰年。另一种是简易判断, 即把能被4整除的年份视为闰年(当然, 该判断只在年份不能被100整除时才正确)。这两种计算的复杂程度与应用条件不同, 设计者应根据实际需要自行选择。



图2 闰年检测函数参考代码

  请注意, 如果参考时间点选择的不是2001年1月1日0时0分0秒, 则上述算法需要进行适当调整。

  ( 3)时间差相减算法时间差相减算法的主要处理方法是按时间规则进行借位相减。

  图3 是完整的时间差借位相减的参考代码, 其前提是时间差中的天数差不为0。代码中pT im e0是指向目标时间点与参考时间点的时间差数据结构的指针, pT ime1是指向当前时间点与参考时间点的时间差数据结构的指针。



评论


相关推荐

技术专区

关闭