<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          關(guān) 閉

          新聞中心

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

          基于微控制器的倒計(jì)時(shí)算法與實(shí)現(xiàn)

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

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

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

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

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





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

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

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

            圖1- 3 是初步計(jì)算天數(shù)差。在這里應(yīng)用到了圖1- 1定義的數(shù)組與圖1- 2的計(jì)算結(jié)果。首先,按照每年365天來計(jì)算天數(shù), 再按照閏年個(gè)數(shù)補(bǔ)償天數(shù), 最后按月份日期的差值計(jì)算本年度過的天數(shù)。

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

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

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

            圖1 - 6是記錄時(shí)間差結(jié)果。因?yàn)閰⒖紩r(shí)間點(diǎn)的時(shí)分秒選擇的是0時(shí)0分0秒, 所以時(shí)間差的時(shí)分秒也就是時(shí)間點(diǎn)的時(shí)分秒。

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



          圖2 閏年檢測(cè)函數(shù)參考代碼

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

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

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



          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();