1. 請問如何用單片機實現GPS功能
GPS是用到三個衛星的時間 計算出 到三個衛星的距離。這樣就計算出一個絕對的點。同是如果有到更多衛星的距離,就可以修正數據,使位置更精確。
一般有三個星就能定位。四個 到五個精度會很高。一般不會超過六個。因為地球是圓的,你不可能接收到地球北面等的衛星信號。
2. gps定位的基本原理
24顆GPS衛星在離地面2萬200千米的高空上,以12小時的周期環繞地球運行,使得在任意時刻,在地面上的任意一點都可以同時觀測到4顆以上的衛星。
由於衛星的位置精確可知,在GPS觀測中,我們可得到衛星到接收機的距離,利用三維坐標中的距離公式,利用3顆衛星,就可以組成3個方程式,解出觀測點的位置(X,Y,Z)。考慮到衛星的時鍾與接收機時鍾之間的誤差,實際上有4個未知數,X、Y、Z和鍾差,因而需要引入第4顆衛星,形成4個方程式進行求解,從而得到觀測點的經緯度和高程。
事實上,接收機往往可以鎖住4顆以上的衛星,這時,接收機可按衛星的星座分布分成若干組,每組4顆,然後通過演算法挑選出誤差最小的一組用作定位,從而提高精度。
由於衛星運行軌道、衛星時鍾存在誤差,大氣對流層、電離層對信號的影響,以及人為的SA保護政策(2000年5月1日取消),使得民用GPS的定位精度只有100米。為提高定位精度,普遍採用差分GPS(DGPS)技術,建立基準站 (差分台)進行GPS觀測,利用已知的基準站精確坐標,與觀測值進行比較,從而得出一修正數,並對外發布。接收機收到該修正數後,與自身的觀測值進行比較,消去大部分誤差,得到一個比較准確的位置。實驗表明,利用差GPS,定位精度可提高到5米。
3. GPS模塊獲取的數據轉換成經緯度(度分秒的格式),C語言
3559.10468,N,12009.46619,E
N/S(北緯或南緯):北緯35 度59.10468 分;
E/W(東經或西經):東經120 度9.46619 分;
緯度(格式ddmm.mmmm:即dd 度,回mm.mmmm 分);
經度(格式dddmm.mmmm:即ddd 度,mm.mmmm 分);
list和字元串操作就不寫了答吧。
4. C語言編程:GPS數據處理
這是通過online judge測試的
#include<stdio.h>
#include <stdlib.h>
#include<string.h>
int check(char *);
void utc(char *);
char bjtime[7];
int main()
{
char a[200];
int f=0;
char *ptr;
do
{
scanf("%s",a);
if(strncmp("$GPRMC",a,6)==0)
{
ptr=a;
for(int i=0;i<2;i++){
ptr=strchr(ptr,',');
ptr++;
}
if (ptr[0]=='A' && check(a))
{
utc(a);
f=1;
}
}
}while(strcmp("END",a)!=0);
if (f) printf("%c%c:%c%c:%c%c",bjtime[0],bjtime[1],bjtime[2],bjtime[3],bjtime[4],bjtime[5]);
return 0;
}
int check(char *s)
{
char *ck,*str;
int i;
char m=s[1];
for(i=2;i<strlen(s)-3;i++)
m^=s[i];
int z=(int)m%65536;
printf("%0x",z);
ck=&s[strlen(s)-2];
int x=strtol(ck,&str,16);
if(x==z) return 1;
else return 0;
}
void utc(char * s)
{
char *str1;
char str[7];
str1=&s[7];
strncpy(bjtime,str1,6);
int x=strtol(bjtime,&str1,10);
x+=80000;
x%=240000;
for(int i=5;i>=0;i--){
bjtime[i]=(char)((int)'0'+x%10);
x/=10;
}
}