b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

GPSNMEA0183消息数据分析例程

电脑杂谈  发布时间:2020-05-08 05:05:05  来源:网络整理

gps接收机使用_手持gps接收机手薄系统_gps 接收 软件

#include

#include

外部结构_GPS_Real_buf

{

char数据[256]; //定义GPS输入缓冲区

volatile无符号短rx_pc; //接收指针

} GPS_Real_buf; // GPS接收数据缓冲区

外部结构_GPS_Information

{

unsigned char Real_Locate; //实时定位有效位

unsigned char位于; //位置有效位

unsigned char Locate_Mode; // 2D或3D定位模式

char UTC_Time [7]; //时间

char UTC_Date [7]; //日期

char纬度[10]; //纬度

char NS_Indicator; // N =北半球,S =南半球

char经度[11]; //经度

char EW_Indicator; // E =东经,W =西经

双倍速度; //地面速度

双道菜; //地面路线

双重PDOP; //位置精度

双HDOP; //水平精度

双VDOP; //垂直精度

双MSL_Altitude; // MSL高度

unsigned char Use_EPH_Sum; //使用的卫星数

unsigned char User_EPH [12]; //当前搜索到的卫星号

无符号短EPH_State [12] [4]; //当前使用的12颗卫星的数量,高度,方位角,信噪比

} GPS_Information; // GPS信息

/ ********************************************** **************************************************** **** ********

**函数信息: void USART2_IRQHandler(void)

**功能说明: UART2中断服务功能

**输入参数: 无

**输出参数: 无

*************************************************** ****************************************************** ******* /

void USART2_IRQHandler(void)//串行端口2中断服务程序

{

unsigned char Recv;

if(USART_GetITStatus(USART2,USART_IT_RXNE)!= RESET)//接收中断

{

Recv = USART_ReceiveData(USART2); //接收数据

如果(Recv =='$')

{

GPS_Real_buf.rx_pc = 0;

}

其他

{

如果(GPS_Real_buf.rx_pc

{

GPS_Real_buf.rx_pc ++;

}

}

GPS_Real_buf.data [GPS_Real_buf.rx_pc] =接收;

if(Recv =='\ r')//当接收到的数据为0x0D时开始处理GPS数据

{

如果(Real_Process_Enabled ==有效)

gps接收机使用_手持gps接收机手薄系统_gps 接收 软件

{

如果(Calc_GPS_Sum(GPS_Real_buf.data)==有效)

{

Creat_DH_Index(GPS_Real_buf.data);

Real_GPS_Command_Process();

}

}

}

}

if(USART_GetFlagStatus(USART2,USART_FLAG_ORE)== SET)//溢出中断

{

USART_ClearFlag(USART2,USART_FLAG_ORE); //清除溢出位

USART_ReceiveData(USART2); //读取DR

}

}

/ ********************************************** **************************************************** **** ********

**函数信息: void Creat_DH_Index(字符*缓冲区)

**功能描述: 查找所有逗号位置并创建索引

**输入参数: 接收GPS数据的缓冲区

**输出参数: 在全局变量数组中创建一个逗号索引,原始GPS数据中的逗号将替换为0x00

*************************************************** ****************************************************** ******* /

unsigned char DH_id_sep [32]; //全局变量数组,最多32个逗号索引

void Creat_DH_Index(字符*缓冲区)

{

unsigned short i,len;

unsigned char idj;

内存集(DH_id_sep,0,sizeof(DH_id_sep));

len = strlen(缓冲区);

对于(i = 0,idj = 0;我

{

if(缓冲区[i] ==',')

{

DH_id_sep [idj] = i;

idj ++;

缓冲区[i] = 0x00;

}

}

}

/ ********************************************** **************************************************** **** ********

**函数信息: char * Real_Process_DH(char *缓冲区gps接收机使用,无符号char num)

**功能说明: 找到GPS数据的第N个参数的偏移量

**输入参数: 创建索引后接收GPS数据缓冲区

**输出参数: 返回第N个“,”之后的信息,可以在*缓冲区有效并创建索引后执行.

*************************************************** ****************************************************** ******* /

字符* Real_Process_DH(字符*缓冲区,无符号字符数)

{

如果(数字<1)

返回和缓冲[0];

返回和缓冲[DH_id_sep [num-1] + 1];

}

/ ********************************************** **************************************************** **** ********

**函数信息: void Real_GPS_Command_Process(无效)

**功能描述: 处理参数索引数据并将其填写到GPS数据结构中

**输入参数:

**输出参数:

gps 接收 软件_手持gps接收机手薄系统_gps接收机使用

*************************************************** ****************************************************** ******* /

void Real_GPS_Command_Process(无效)

{

char * temp;

unsigned char i,j,zhen;

if(strstr(GPS_Real_buf.data,“ GPGGA”))// $ GPGGA,112118.000,3743.5044,N,11540.5393,E,1,06,1.6,15.3,M,-9.1,M ,, 0000 * 7E

{

GPS_Information.Use_EPH_Sum = atof(Real_Process_DH(GPS_Real_buf.data,7)); //第七个参数是使用的卫星数

GPS_Information.MSL_Altitude = atof(Real_Process_DH(GPS_Real_buf.data,9)); //第九个参数是海拔高度

返回;

}

if(strstr(GPS_Real_buf.data,“ GPGSA”))//$GPGSA,A,3,28,17,11,09,08,07,,,,,,3.4,1.6,3.0*3B

{

temp = Real_Process_DH(GPS_Real_buf.data,2); //第二个参数是定位模式

if(((* temp =='2')||(** temp =='3'))

GPS_Information.Locate_Mode = * temp;

其他

GPS_Information.Locate_Mode =无效;

for(i = 0; i <12; i ++)//总共最多12星

{

GPS_Information.User_EPH [i] = atof(Real_Process_DH(GPS_Real_buf.data,i + 3)); //使用的卫星号从第三个参数开始

}

GPS_Information.PDOP = atof(Real_Process_DH(GPS_Real_buf.data,15)); //第十五个参数是位置精度

GPS_Information.HDOP = atof(Real_Process_DH(GPS_Real_buf.data,16)); //第16个参数是水平精度

GPS_Information.VDOP = atof(Real_Process_DH(GPS_Real_buf.data,17)); //第17个参数是垂直精度

返回;

}

if(strstr(GPS_Real_buf.data,“ GPRMC”))// $ GPRMC,112118.000,A,3743.5044,N,11540.5393,E,0.25,198.81,130613 ,,, A * 67

{

temp = Real_Process_DH(GPS_Real_buf.data,1); //第一个参数是时间

如果(* temp!= 0)

memcpy(GPS_Information.UTC_Time,temp,6);

if(*(Real_Process_DH(GPS_Real_buf.data,2))=='A')//第二个参数

{

GPS_Information.Real_Locate =有效; //实时数据有效

GPS_Information.Located =有效;

}

其他

{

GPS_Information.Real_Locate =无效; //无效的实时数据

}

temp = Real_Process_DH(GPS_Real_buf.data,3); //第三个参数是纬度

如果(((* temp> = 0x31)&&(* temp <= 0x39))

{

memcpy(GPS_Information.Latitude,tempgps接收机使用,9);

GPS_Information.Latitude [9] = 0;

}

其他

{

GPS_Information.Latitude [0] ='0';

GPS_Information.Latitude [1] = 0;

}

GPS_Information.NS_Indicator = *(Real_Process_DH(GPS_Real_buf.data,4)); //第四个参数是北和南

temp = Real_Process_DH(GPS_Real_buf.data,5); //第五个参数是经度

如果(((* temp> = 0x31)&&(* temp <= 0x39))

gps接收机使用_gps 接收 软件_手持gps接收机手薄系统

{

memcpy(GPS_Information.Longitude,temp,10);

GPS_Information.Longitude [10] = 0;

}

其他

{

GPS_Information.Longitude [0] ='0';

GPS_Information.Longitude [1] = 0;

}

GPS_Information.EW_Indicator = *(Real_Process_DH(GPS_Real_buf.data,6)); //第六个参数是东西

GPS_Information.Speed = atof(Real_Process_DH(GPS_Real_buf.data,7)); //第七个参数是速度

GPS_Information.Course = atof(Real_Process_DH(GPS_Real_buf.data,8)); //第八个参数为标题

temp = Real_Process_DH(GPS_Real_buf.data,9); //第九个参数是日期

如果(* temp!= 0)

{

memcpy(GPS_Information.UTC_Date,temp,6);

}

返回;

}

if(strstr(GPS_Real_buf.data,“ GPGSV”))// $ GPGSV,3,1,11,28,73,321,32,17,39,289,43,11,38,053,17,09,37,250,41 * 78

{

zhen = atof(Real_Process_DH(GPS_Real_buf.data,2)); //获取当前帧号

如果((zhen <= 3)&&(zhen!= 0))

{

对于(i =(zhen-1)* 4,j = 4; i

{

GPS_Information.EPH_State [i] [0] = atof(Real_Process_DH(GPS_Real_buf.data,j ++)); //以星号

GPS_Information.EPH_State [i] [1] = atof(Real_Process_DH(GPS_Real_buf.data,j ++)); //取仰角

GPS_Information.EPH_State [i] [2] = atof(Real_Process_DH(GPS_Real_buf.data,j ++)); //取方位角

GPS_Information.EPH_State [i] [3] = atof(Real_Process_DH(GPS_Real_buf.data,j ++)); //获取信噪比

}

}

返回;

}

}

/ ********************************************** **************************************************** **** ********

**函数信息: 无符号字符Calc_GPS_Sum(常量字符*缓冲区)

**功能描述: 计算GPS校验和

**输入参数: 接收完整的GPS数据

**输出参数:

*************************************************** ****************************************************** ******* /

#include

无符号字符gps_sum = 0;

未签名的字符Calc_GPS_Sum(常量字符*缓冲区)

{

unsigned char i,j,k,sum;

sum = 0;

for(i = 1; i <255; i ++)//我从1开始并在$起始字符上方闪烁

{

if((缓冲区[i]!='*')&&(缓冲区[i]!= 0x00))//判断结束字符

{

sum ^ =缓冲区[i]; // GPS校验和算法是XOR

}

其他

{

手持gps接收机手薄系统_gps 接收 软件_gps接收机使用

休息;

}

}

j =缓冲区[i + 1]; //在结束字符后加上两个字符

k =缓冲区[i + 2];

if(isalpha(j))//确定字符是否为英文字母,如果为英文字母,则返回非零值,否则返回零

{

if(isupper(j))// //判断该字符为大写英文字母时,返回非零值,否则返回零

{

j- = 0x37; //强制为十六进制

}

其他

{

j- = 0x57; //强制为十六进制

}

}

其他

{

如果(((j> = 0x30)&&(j <= 0x39))

{

j- = 0x30; //强制为十六进制

}

}

if(isalpha(k))//确定字符是否为英文字母,如果为英文字母,则返回非零值,否则返回零

{

if(isupper(k))// //判断该字符为大写英文字母时,返回非零值,否则返回零

{

k- = 0x37; //强制为十六进制

}

其他

{

k- = 0x57; //强制为十六进制

}

}

其他

{

如果(((k> = 0x30)&&(k <= 0x39))

{

k- = 0x30; //强制为十六进制

}

}

j =(j << 4)+ k; //强制合并为十六进制

gps_sum = j;

如果(sum == j)

{

返回有效值; //校验和是正常的

}

其他

{

返回无效; //校验和错误

}

}北斗GPS模板相关产品

北斗GPS定位时间模板GM-87

GPS授时同步模板

RES SMT360北斗GPS计时模板


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shumachanpin/article-202568-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...