<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
關(guān) 閉

新聞中心

EEPW首頁(yè) > 工控自動(dòng)化 > 設計應用 > 基于微控制器的倒計時(shí)算法與實(shí)現

基于微控制器的倒計時(shí)算法與實(shí)現

作者: 時(shí)間:2011-02-15 來(lái)源:網(wǎng)絡(luò ) 收藏

  ( 2)到參考時(shí)間點(diǎn)的時(shí)間差

  該有兩個(gè)重點(diǎn), 一是參考時(shí)間點(diǎn)的選取, 二是根據閏年規則對時(shí)間差中的天數進(jìn)行補償。

  關(guān)于參考時(shí)間點(diǎn)的選取, 應符合兩個(gè)原則: 一是方便閏年的計算, 二是方便時(shí)間差的計算。在這里,選取2001年1月1日0時(shí)0分0秒為參考時(shí)間點(diǎn)。

  圖1是時(shí)間點(diǎn)到該參考時(shí)間點(diǎn)的示例代碼,pT mi e是指向時(shí)間點(diǎn)的數據結構指針, pResult是指向時(shí)間差的數據結構指針。下面對該段代碼逐條說(shuō)明。





圖1 天數時(shí)間差參考代碼

  圖1- 1定義了一個(gè)數組, 它的12個(gè)元素對應1月份到12月份所累積的天數。請注意兩點(diǎn), 一是該天數不包括本月份的天數, 二是二月份的天數按28天計。

  圖1- 2是計算時(shí)間點(diǎn)與參考時(shí)間點(diǎn)的年份、月份與日期的差值。

  圖1- 3 是初步計算天數差。在這里應用到了圖1- 1定義的數組與圖1- 2的計算結果。首先,按照每年365天來(lái)計算天數, 再按照閏年個(gè)數補償天數, 最后按月份日期的差值計算本年度過(guò)的天數。

  代碼中的( Y earId /4) 就是初步的閏年補償計算, 補償規則就是把年份差被4整除的值視為經(jīng)過(guò)的閏年個(gè)數, 也就是要補償的天數。

  圖1- 4是根據世紀年(也就是能被100整除的年份)的閏年判斷規則對圖1- 3的計算結果進(jìn)行校正。這是因為圖1- 3 進(jìn)行的閏年補償計算所依據的是非世紀年的閏年判斷規則, 這一規則在判斷世紀年是否為閏年時(shí)可能會(huì )產(chǎn)生誤差。在這里, 對該步驟算法采用了條件編譯, 這是考慮到該計算牽涉到真正的多字節除法, 比較耗時(shí), 設計者可以根據實(shí)際需要決定是否運行該計算。

  圖1- 5是判斷時(shí)間點(diǎn)的年份是否閏年, 進(jìn)而進(jìn)行最后的天數調整。請注意, 在圖1- 3與圖1- 4的計算中, 只計算了度過(guò)的年份中包含了多少個(gè)閏年, 這其中不包含時(shí)間點(diǎn)本身的年份。在本計算中,先調用函數判斷時(shí)間點(diǎn)年份是否閏年, 再根據時(shí)間點(diǎn)的月份是否超過(guò)2月決定是否對天數進(jìn)行補償。

  圖1 - 6是記錄時(shí)間差結果。因為參考時(shí)間點(diǎn)的時(shí)分秒選擇的是0時(shí)0分0秒, 所以時(shí)間差的時(shí)分秒也就是時(shí)間點(diǎn)的時(shí)分秒。

  圖2是閏年判斷函數的參考代碼。該函數提供了兩種判斷計算, 一種是關(guān)于閏年規則的完整判斷,即當年份不能被100整除時(shí), 能被4整除的是閏年;當年份能被100整除時(shí), 必須能被400 整除才是閏年。另一種是簡(jiǎn)易判斷, 即把能被4整除的年份視為閏年(當然, 該判斷只在年份不能被100整除時(shí)才正確)。這兩種計算的復雜程度與應用條件不同, 設計者應根據實(shí)際需要自行選擇。



圖2 閏年檢測函數參考代碼

  請注意, 如果參考時(shí)間點(diǎn)選擇的不是2001年1月1日0時(shí)0分0秒, 則上述算法需要進(jìn)行適當調整。

  ( 3)時(shí)間差相減算法時(shí)間差相減算法的主要處理方法是按時(shí)間規則進(jìn)行借位相減。

  圖3 是完整的時(shí)間差借位相減的參考代碼, 其前提是時(shí)間差中的天數差不為0。代碼中pT im e0是指向目標時(shí)間點(diǎn)與參考時(shí)間點(diǎn)的時(shí)間差數據結構的指針, pT ime1是指向當前時(shí)間點(diǎn)與參考時(shí)間點(diǎn)的時(shí)間差數據結構的指針。



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>