|
在对GPS接收到的卫星信息进行处理时,碰到较为麻烦的问题是在对接收到的时间信息进行转换上。直接从卫星接收到的时间是UTC时间,北京时间应在UTC时间上加上8小时才是准确的北京时,在超出24小时时应作减24小时处理。
刚开始将对时间转换的算法放在主函数中处理,程序如下:
if(g_Ptr == 2) //接收到正确的数据帧
{
i = g_DisTime[0]-'0' ;//提取时间的小时位高位并转换码型
j = g_DisTime[1]-'0';//提取时间的小时位低位并转换码型
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';//将北京时间高二位作码型变换并赋予高二位显示
}
在调试中出现一个问题,在做了以上的处理后,时间的小时位数据并不完全正确,高位显示的与北京时间相同,但低位却与UTC时间相同。在做了各种尝试(如在UTC时间上做加9处理、直接给六位时间g_DisTime[5]赋值等)后总结出这样一个问题,以上的算法处理只对六位数据位的高一位处理有效,低五位的显示始终都是正确UTC时间。经过分析,初步认定上面的程序并没有被完全的执行。因GPS接收模块源源不断的传送数据给单片机处理,在运行过程中定位信息大约每秒钟更新一次,在主函数中对收到的时间进行处理时有可能会出现还没来得及处理完毕时便接收到下一帧数据,故时间的处理就可能会有只对高一位处理完成而没完成处理好低五位时又进入了串行口中断,那么液晶显示的结果就是经过处理的高一位(北京时间)和未经处理的低五位(UTC时间)。考虑到以上原因,将原放在主函数的时间转换处理程序放置在到中断时一收到UTC时间就对其进行转换处理。经过了调试,终于在液晶上显示出来正确的北京时间,证明了以上的分析、推断的正确性。
经过测试,液晶显示的结果如下图5-1:
|
|