//读取当前坐标函数,调用一次读取一次,读完一次自动关闭串口
//传入一个纬度变量和一个经度变量的地址,往这两个地址的储存空间写数
//如果是有效定位,返回1;如果是无效定位,返回0
//纬度ddmm.mmmmm(度分) 经度dddmm.mmmmm(度分)
u8 read_coor(float *latitude,float *longitude){
gps_open(); //开启GPS
while(!flag); //等待一帧数据接收完成
flag=0; //清空完成标志
/***********解析一帧数据*************/
if(usart_buf[17]=='A') //A说明是有效定位
{
for(i=19;i<23;i++)
{
da=usart_buf[i];
k=da-48;
switch(i)
{
case 19:
k *= 1000;break;
case 20:
k *= 100;break;
case 21:
k *= 10;break;
case 22:
k *= 1;break;
default :
k = 0;break;
}
res+=k;
}
for(i=24;i<29;i++)
{
da=usart_buf[i];
t= da - 48;
switch(i)
{
case 24:
t *= 0.1;break;
case 25:
t *= 0.01;break;
case 26:
t *= 0.001;break;
case 27:
t *= 0.0001;break;
case 28:
t *= 0.00001;break;
default :
t=0;break;
}
res += t;
}
*latitude = res;
res = 0; //解析出纬度
for(i=32; i<37; i++)
{
da=usart_buf[i];
k = da - 48;
switch(i)
{
case 32:
k *= 10000;break;
case 33:
k *= 1000;break;
case 34:
k *= 100;break;
case 35:
k *= 10;break;
case 36:
k *= 1;break;
default :
k=0;break;
}
res+=k;
}
for(i=38;i<43;i++)
{
da=usart_buf[i];
t=da-48;
switch(i)
{
case 38:
t *= 0.1;break;
case 39:
t *= 0.01;break;
case 40:
t *= 0.001;break;
case 41:
t *= 0.0001;break;
case 42:
t *= 0.00001;break;
default :
t=0;break;
}
res += t;
}
*longitude = res; //解析出经度
res = 0;
return 1;
}
return 0;
}
|