由于要做一个GPS码表,需要解析GPS模块串口发送的数据,目前串口还没做,先做解析GPS数据工作.
本文虽然CPU选型STC15W,但实际未用到任何STC15W硬件,完全是在仿真下获取解析数据
GPS模块串口发送的数据有固定的格式,我研究的不多,只知道叫NMEA,我是参考了
LeiOuYang / NMEA0183-C 的库
在此感谢LeiOuYang!
我把它复制到我的码云里了,方便大家下载
复制到码云的NMEA0183-C
keil STC15W解析GPS工程
在keil中进行了如下适配:
修改原有库中用到pdate的参数,替换成ppdate,因为pdate是C51关键字
我在KEIL C51中实现了GPS数据解析:
以下结构体是你可以解析到的数据,例程我只选了new_latitude,比较方便用于验证。其他参数根据你的需求选用
/* 数据解析状态结构体定义 */
typedef struct _gps_nmea
{
/* 数据解析状态 */
unsigned char parity; /* 校验计算和 */
unsigned char is_checksum_term; /* 当前字段域为校验字 */
char term[15]; /* 当前字段域缓冲区,','为字段域分割符 */
unsigned char sentence_type; /* 字段类别,见枚举 sentence_types*/
unsigned char term_number; /* 当前字段域序号 */
unsigned char term_offset; /* 字段域数据偏移量 */
unsigned char gps_data_good; /* GPS数据有效状态 */
/* 数据解析结果 */
unsigned int new_time; /* UTC时间 */
unsigned int new_date; /* UTC日期 */
float new_latitude; /* 纬度 */
float new_longitude; /* 经度 */
int new_altitude; /* 海拔高度 cm*/
float new_speed; /* 地速 km/h */
float new_course; /* RMC、VTG字段磁偏角信息*/
float new_gps_yaw; /* HDT航向信息 */
unsigned short new_hdop; /* 水平精度 *100 */
unsigned char new_satellite_count; /* 当前使用卫星的颗数 */
unsigned char new_quality_indicator; /* 定位状态 */
unsigned int last_RMC_ms; /* 最后更新字段时间 */
unsigned int last_GGA_ms;
unsigned int last_VTG_ms;
unsigned int last_HDT_ms;
}gps_nmea;
以上程序有瑕疵.后面更正.
程序计算的数据还需校验才可以.