|
|
在對GPS接收到的衛(wèi)星信息進(jìn)行處理時,碰到較為麻煩的問題是在對接收到的時間信息進(jìn)行轉(zhuǎn)換上。直接從衛(wèi)星接收到的時間是UTC時間,北京時間應(yīng)在UTC時間上加上8小時才是準(zhǔn)確的北京時,在超出24小時時應(yīng)作減24小時處理。
剛開始將對時間轉(zhuǎn)換的算法放在主函數(shù)中處理,程序如下:
if(g_Ptr == 2) //接收到正確的數(shù)據(jù)幀
{
i = g_DisTime[0]-'0' ;//提取時間的小時位高位并轉(zhuǎn)換碼型
j = g_DisTime[1]-'0';//提取時間的小時位低位并轉(zhuǎn)換碼型
j = i*10 + j+ 8; //在UTC時間上加上8個小時
if (j >= 24) //判斷得到的時間是否超過24小時,超出變作減24處理
{
j - = 24;
}
g_DisTime[0] = j/10+'0'; //將北京時間高一位作碼型變換并賦予高一位顯示
g_DisTime[1] = j%10 +'0';//將北京時間高二位作碼型變換并賦予高二位顯示
}
在調(diào)試中出現(xiàn)一個問題,在做了以上的處理后,時間的小時位數(shù)據(jù)并不完全正確,高位顯示的與北京時間相同,但低位卻與UTC時間相同。在做了各種嘗試(如在UTC時間上做加9處理、直接給六位時間g_DisTime[5]賦值等)后總結(jié)出這樣一個問題,以上的算法處理只對六位數(shù)據(jù)位的高一位處理有效,低五位的顯示始終都是正確UTC時間。經(jīng)過分析,初步認(rèn)定上面的程序并沒有被完全的執(zhí)行。因GPS接收模塊源源不斷的傳送數(shù)據(jù)給單片機(jī)處理,在運(yùn)行過程中定位信息大約每秒鐘更新一次,在主函數(shù)中對收到的時間進(jìn)行處理時有可能會出現(xiàn)還沒來得及處理完畢時便接收到下一幀數(shù)據(jù),故時間的處理就可能會有只對高一位處理完成而沒完成處理好低五位時又進(jìn)入了串行口中斷,那么液晶顯示的結(jié)果就是經(jīng)過處理的高一位(北京時間)和未經(jīng)處理的低五位(UTC時間)。考慮到以上原因,將原放在主函數(shù)的時間轉(zhuǎn)換處理程序放置在到中斷時一收到UTC時間就對其進(jìn)行轉(zhuǎn)換處理。經(jīng)過了調(diào)試,終于在液晶上顯示出來正確的北京時間,證明了以上的分析、推斷的正確性。
經(jīng)過測試,液晶顯示的結(jié)果如下圖5-1:
|
|