《電子技術應用》
您所在的位置:首頁 > 模擬設計 > 設計應用 > 基于微控制器的倒計時算法與實現
基于微控制器的倒計時算法與實現
摘要: 這里的倒計時就是計算出從當前時間點需要經過多長時間才能到達目標時間點。從另一個角度講,就是計算出兩個時間點之間的時間差。
Abstract:
Key words :

  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位無符號整數。

  ( 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是指向當前時間點與參考時間點的時間差數據結構的指針。

  下面對圖3的代碼逐條分析。

  圖3- 1 就是按時間規則進行時間借位。其實質是小時單位向天數單位借1天, 增加24小時; 分鐘單位向小時單位借1小時, 增加60分鐘; 秒單位向分鐘單位借1分鐘, 增加60秒。

  圖3- 2是時間差相減。注意, 因為天數差被借走一天, 所以要減1。

  圖3- 3 是根據計算結果進行進位補償。因為經過借位, 相減的結果有可能超過時間單位的上限,此時就要按時間規則進位。

  請注意, 圖3代碼是以天數為最高時間單位的借位計算, 可以根據實際需要把最大的時間單位設為小時或分鐘。

  在實際的時間差相減計算中, 為了避免負值的出現, 應先從天數開始對兩個時間差的時間單位比較數值大小, 其結果按三種情況處理。

  ( 1)若當前時間點的時間單位超過目標時間點的時間單位, 表明倒計時結束。

  ( 2)若兩個時間單位相同, 當時間單位為秒時,表明倒計時結束, 否則進入次一級時間單位的判斷。

  ( 3)若當前時間點的時間單位小于目標時間點的時間單位, 則視此時間單位為最高時間單位, 進行借位相減計算。

  由此, 即可計算出兩個時間點的精確時間差。


 


圖3  時間差借位相減參考代碼。

  4  結束語

  在上面的介紹中, 先討論了倒計時的兩種算法,再擇優對其中一種算法進行了詳細的闡述。該算法已在實際項目中獲得應用, 其計時準確, 工作穩定。

 

 

此內容為AET網站原創,未經授權禁止轉載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
国产日韩精品一区二区| 亚洲另类春色国产| 欧美激情久久久久| 久久亚洲私人国产精品va| 午夜精品福利在线| 亚洲一级网站| 一区二区三区免费看| 亚洲免费成人av| 亚洲精品影院| 亚洲精品国产精品国产自| 久久精品国产亚洲aⅴ| 午夜欧美电影在线观看| 亚洲一区二区免费在线| 一本色道久久综合亚洲精品婷婷| 亚洲欧洲视频| 亚洲国内在线| 亚洲精品一区二区三区蜜桃久 | 午夜视频久久久久久| 亚洲性图久久| 午夜精彩视频在线观看不卡| 亚洲欧美另类国产| 午夜精品久久久久| 欧美一区二区三区免费看| 欧美中文在线视频| 亚洲高清av在线| 亚洲精品一区二区三区蜜桃久| 亚洲精品久久久久久久久久久久 | 欧美一区二区视频观看视频| 午夜精品影院| 欧美专区在线观看一区| 欧美在线不卡| 久久亚洲春色中文字幕| 欧美va日韩va| 欧美视频一区二区三区| 国产精品久久999| 国产精品中文字幕欧美| 国内精品久久国产| 亚洲国产一区二区a毛片| 日韩视频免费在线| 亚洲一区二区在线免费观看视频| 午夜精品视频一区| 亚洲狠狠丁香婷婷综合久久久| 亚洲美女av网站| 亚洲一区三区视频在线观看| 性欧美大战久久久久久久免费观看| 欧美一级大片在线观看| 久久婷婷久久| 欧美日本一道本在线视频| 国产精品久久久久久av福利软件| 国产日韩欧美制服另类| 亚洲成人影音| 在线一区二区三区做爰视频网站| 性欧美办公室18xxxxhd| 亚洲人成网站精品片在线观看 | 久久理论片午夜琪琪电影网| 欧美福利在线观看| 欧美色综合网| 狠狠干成人综合网| 亚洲免费观看高清完整版在线观看熊| 亚洲欧美视频在线| 亚洲精品一区二区三区在线观看| 亚洲男人的天堂在线观看 | 美脚丝袜一区二区三区在线观看| 欧美人成在线| 国产日韩欧美中文在线播放| 亚洲欧洲视频在线| 欧美一级一区| 中日韩美女免费视频网址在线观看 | 久久综合九色综合欧美就去吻| 欧美日韩福利| 国产三级精品三级| 日韩一二三区视频| 久久精品动漫| 亚洲欧美日韩精品在线| 免费观看在线综合| 国产免费观看久久| 亚洲美洲欧洲综合国产一区| 久久xxxx精品视频| 亚洲欧美在线x视频| 欧美激情亚洲| 国产一区二区激情| 制服诱惑一区二区| 亚洲精品久久| 久久精品首页| 欧美性开放视频| 亚洲第一色在线| 欧美一区二区在线免费播放| 99精品国产一区二区青青牛奶| 久久福利影视| 国产精品久久久一区二区三区 | 亚洲精品资源美女情侣酒店| 亚洲第一综合天堂另类专| 欧美一区激情| 欧美视频中文字幕在线| 亚洲国内在线| 亚洲激情黄色| 久久久天天操| 国产欧美日韩亚洲| 亚洲性xxxx| 亚洲一区二区av电影| 欧美国产乱视频| 尤物yw午夜国产精品视频| 性18欧美另类| 久久国产欧美| 国产精品亚洲精品| 亚洲视频一区二区免费在线观看| 日韩小视频在线观看| 欧美不卡一区| 精品二区视频| 亚洲成色999久久网站| 久久国产精品一区二区三区四区| 国产精品久久久久9999高清| 99亚洲精品| 一区二区黄色| 欧美日韩精品免费观看视一区二区| 在线激情影院一区| 亚洲国产精品精华液2区45| 久久久欧美精品| 狠狠色综合网站久久久久久久| 欧美一级理论性理论a| 欧美一区成人| 国产精品自拍在线| 午夜精品福利一区二区三区av| 午夜在线电影亚洲一区| 国产精品进线69影院| 亚洲一区二区三区免费观看| 亚洲欧美日韩国产一区| 国产精品久久久久久户外露出| 一区二区三区高清| 亚洲欧美日韩精品一区二区 | 亚洲国产岛国毛片在线| 亚洲免费观看视频| 欧美日韩第一区| 9色porny自拍视频一区二区| 亚洲婷婷在线| 国产精品综合av一区二区国产馆| 亚洲欧美色婷婷| 久久婷婷人人澡人人喊人人爽| 一区二区在线观看视频| 亚洲黄色在线视频| 欧美激情精品久久久| 亚洲精品小视频在线观看| 亚洲永久免费av| 国产日韩欧美三区| 亚洲国产成人久久综合| 欧美国产日韩精品| 亚洲美女av在线播放| 亚洲一区二区免费视频| 国产农村妇女毛片精品久久麻豆 | 久久精品91| 精品成人一区二区| 亚洲精品在线电影| 国产精品狠色婷| 欧美一级理论片| 欧美国产1区2区| 一区二区三区高清在线| 欧美一区二区视频免费观看| 狠狠入ady亚洲精品经典电影| 最近看过的日韩成人| 欧美日韩免费视频| 午夜视频在线观看一区二区三区| 久久久久久久97| 最新国产精品拍自在线播放| 亚洲女人av| 一区在线视频| 亚洲视频日本| 国产亚洲欧洲997久久综合| 91久久久久久| 国产精品久久久久久亚洲调教 | 国产精品sm| 久久成年人视频| 欧美精品一区二区三区久久久竹菊| 亚洲视频综合| 老司机免费视频一区二区三区| 亚洲麻豆视频| 久久精品一级爱片| 亚洲精品一区二区三| 久久大逼视频| 亚洲靠逼com| 久久99伊人| 亚洲精品欧美精品| 欧美中文在线观看国产| 亚洲高清精品中出| 香蕉免费一区二区三区在线观看| 韩国一区二区三区在线观看 | 国产精品激情偷乱一区二区∴| 亚洲国产精品女人久久久| 欧美视频亚洲视频| 亚洲经典一区| 国产伦精品一区二区三区在线观看| 亚洲精品一区二区三区福利| 国产美女精品视频| 一本色道久久综合亚洲精品不卡 | 欧美午夜精品久久久久久浪潮| 久久精品国产69国产精品亚洲| 欧美三级午夜理伦三级中视频| 久久成人18免费观看| 国产精品久久| 99精品国产在热久久| 国产自产高清不卡|