STC15W單片機解析GPS數據

由於要做一個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;

以上程序有瑕疵.後面更正.

程序計算的數據還需校驗纔可以.

在線獲取GPS座標

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章