由於要做一個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;
以上程序有瑕疵.後面更正.
程序計算的數據還需校驗纔可以.