基于微控制器的倒計時算法與實現(xiàn)
1 引 言
本文引用地址:http://butianyuan.cn/article/162446.htm這里的倒計時就是計算出從當前時間點需要經(jīng)過多長時間才能到達目標時間點。從另一個角度講, 就是計算出兩個時間點之間的時間差。
目前, 倒計時系統(tǒng)正得到越來越廣泛的應用。
在體育比賽、公交系統(tǒng)乃至鐵路系統(tǒng)中出現(xiàn)了很多倒計時的時間顯示。就在前不久, 關于上海世博會的倒計時正式啟動, 其精度精確到天。
在類似的應用中, 大多數(shù)情況下, 倒計時功能(包括顯示功能)是由微控制器實現(xiàn)的。微控制器不同于桌面電腦或筆記本電腦, 其系統(tǒng)資源非常有限, 也不能安裝復雜的操作系統(tǒng), 沒有現(xiàn)成的倒計時系統(tǒng)可以應用。下面將討論適合在微控制器中運行的倒計時算法。
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)獲取的時間參數(shù)不同
如前所述, 第一種思路獲取的是時間差, 第二種思路獲取的是目標時間點。
( 2)采取的算法不同
第一種思路的主要算法是按運行時間對獲取的時間差進行遞減運算, 這實際是時間計時的逆運算。
該算法牽涉到減法運算與天、小時、分鐘、秒的時間規(guī)則運算。
第二種思路的主要算法就是計算出兩個時間點之間的時間差。該算法不僅牽涉到時間規(guī)則運算,還牽涉到閏年的概念與多種算術運算, 比第一種思路的算法復雜許多。此外, 由于該算法需要微控制器能夠隨時獲取當前的準確時間, 因此要求微處理器必須具備實時時鐘功能。
( 3)應用范圍與靈活性不同
第一種思路的實現(xiàn)依靠對運行時間的準確把握。如果微控制器斷電或由于其它原因產(chǎn)生復位導致運行中斷, 則從此刻起到下一次穩(wěn)定運行時所經(jīng)過的時間無法掌控, 進而導致倒計時運算無法繼續(xù)運行。因此, 該思路只適用于極短時間段的倒計時計算, 其可靠性與靈活性欠佳。
第二種思路的實現(xiàn)需要兩點: 一是斷電保護的實時時鐘功能, 這是為了微控制器能夠隨時讀取準確時間; 二是非易失數(shù)據(jù)的存儲功能, 這是為了微控制器可以長時間保存目標時間。滿足了這兩點要求, 微控制器就能夠可靠地實現(xiàn)倒計時計算, 即使突然斷電或復位也不會受到影響。對于第一點要求,不管使用外置時鐘還是內置時鐘, 只要配置電池就可以實現(xiàn)。對于第二點要求, 當前的主流微控制器大都配置FLASH存儲功能, 也可以輕松滿足。
可見, 針對目標時間的倒計時算法在可靠性與靈活性上極具優(yōu)勢, 對微控制器的要求也不苛刻。
下面就闡述該算法的實現(xiàn)環(huán)節(jié)。
3 針對目標時間點的倒計時算法實現(xiàn)
如前所述, 該算法主要是計算當前時間點與目標時間點的時間差。具體思路就是先選擇一個參考時間點, 然后分別計算出這兩個時間點與參考時間點之間的時間差, 再把這兩個時間差相減就得到這兩個時間點之間的時間差。
下面分三部分描述該算法: 時間格式的建立; 計算時間點到參考時間點的時間差; 時間差相減算法。
( 1)時間格式的建立
有兩種時間格式, 一是時間點的格式; 一是時間差的格式。時間點的格式按年月日時分秒排列, 其中年份為16位無符號整數(shù), 其余為8 位無符號整數(shù)。時間差格式按天時分秒排列, 天數(shù)為16位無符號整數(shù), 其余為8位無符號整數(shù)。
評論