#include "sys.h"
#include "usart.h"
#include "gui.h"
#include "lcd.h"
#include "key.h"
#include "delay.h"
#include "text.h"
#include "touch.h"
#include "fat.h"
#include "sysfile.h"
#include "jpegbmp.h"
#include "usart.h"
#include "fire.h"
#include "parameter.h"
#include "time.h"
#include "gps.h"
#include "sleep.h"
#include "string.h"
#include "ctype.h"
#include "math.h"
#include "stdlib.h"
#include "start.h"
#include "rtc.h" //GYJ2012.5.29
#include "time.h"
//u8 sleep_sta;
//u8 TIME_AREA= 8; //时区
/*
u8 GPGGA_BUF[256];
u8 GPRMC_BUF[256];
u8 GPS_RX_EN;
*/
//GPS数据存储数组 (不知为什么,字符串长度要稍长些)???
u8 JD[10]; //经度
u8 JD_a; //经度方向
u8 JD_d[10]; //经度,度
u8 JD_m[10]; //经度,分
u8 WD[9]; //纬度
u8 WD_a; //纬度方向
u8 WD_d[10]; //纬度,度
u8 WD_m[10]; //纬度,分
u8 time[10]; //时间
u8 time_local[7];
u8 date_local[6];
u8 speed[10]; //速度
u8 speed_km[10]; //转换后的速度,单位是KM/H
u8 use_sat[2]; //使用的卫星数
u8 total_sat[2]; //天空中总卫星数
u8 lock; //定位状态
u8 high[10]; //高度
u8 angle[6]; //方位角
u8 date[6]; //日期
u8 high_len;
u8 high_end;
u8 speed_len=0;
u8 angle_len=0;
float JD_s;
float WD_s;
u8 JD_sint[2];
u8 WD_sint[2];
//显示需要的变量
u8 dsp_count; //刷新次数计数器
u8 time_count;
u16 angle_int; //方位角处理后,只保留整数部分
u8 angle_index_now; //指针旋转角度索引 0~350
u8 angle_index_last; //存储上次指针位置索引
//定义指针旋转的位置
//通过导航键在GPS界面下进行功能选择时的变量
static u8 gps_now=1;//gps_last=1;
u8 angle_xy[36][2]={{120,9},{136,10},{148,13},{164,20},{178,29},{187,40},
{195,51},{203,65},{207,83},{208,96},{208,109},{203,128},
{195,146},{186,157},{176,166},{163,176},{149,182},{137,185},
{120,187},{101,185},{83,179},{71,173},{58,163},{48,152},
{41,141},{36,129},{31,113},{30,96},{31,84},{34,71},
{43,51},{52,40},{62,30},{74,22},{88,15},{103,10} };
//初始化GPS模块,屏蔽不需要的指令
/*
void GPS_Init()
{
u8 gll_close[28]={0xB5,0x62,0x06,0x01,0x08,0x00,0xF0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2A,0xB5,0x62,0x06,0x01,0x02,0x00,0xF0,0x01,0xFA,0x12,0X0D,0X0A};
u8 gsa_close[28]={0xB5,0x62,0x06,0x01,0x08,0x00,0xF0,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x31,0xB5,0x62,0x06,0x01,0x02,0x00,0xF0,0x02,0xFB,0x13,0X0D,0X0A};
u8 vtg_close[28]={0xB5,0x62,0x06,0x01,0x08,0x00,0xF0,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x46,0xB5,0x62,0x06,0x01,0x02,0x00,0xF0,0x05,0xFE,0x16,0X0D,0X0A};
u8 gsv_close[28]={0xB5,0x62,0x06,0x01,0x08,0x00,0xF0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x38,0xB5,0x62,0x06,0x01,0x02,0x00,0xF0,0x03,0xFC,0x14,0X0D,0X0A};
u8 t=0;
delay_ms(100);
for(t=0;t<28;t++)
{
USART2->DR=gsa_close[t];
while((USART2->SR&0X40)==0);//等待发送结束
}
delay_ms(100);
for(t=0;t<26;t++)
{
USART2->DR=vtg_close[t];
while((USART2->SR&0X40)==0);//等待发送结束
}
delay_ms(100);
for(t=0;t<28;t++)
{
USART2->DR=gll_close[t];
while((USART2->SR&0X40)==0);//等待发送结束
}
delay_ms(100);
for(t=0;t<28;t++)
{
USART2->DR=gsv_close[t];
while((USART2->SR&0X40)==0);//等待发送结束
}
delay_ms(100);
for(t=0;t<28;t++)
{
USART2->DR=gsa_close[t];
while((USART2->SR&0X40)==0);//等待发送结束
}
delay_ms(100);
}
*/
//解析GPS数据
void Get_GPS( )
{
u8 byte_counter=0;
u8 byte_num=0;
u8 seg_counter=0;
u8 tmp;
// GPS_RX_EN=0;
if(GPS_CMD_NUM==2)
{
byte_counter=0;
seg_counter=0;
byte_num=0;
do
{
tmp=GPGGA_BUF[byte_counter];
// printf("%c",tmp);
if(byte_counter==80) break;
else byte_counter++;
if(tmp==',') {seg_counter++; byte_num=0;}
else
{
switch(seg_counter)
{
case 1:
time[byte_num]=tmp;
// if(byte_num<9) //时间处理
{
byte_num++;
}
// else byte_num=0;
break;
case 2: //纬度处理
WD[byte_num]=tmp;
// if(byte_num<8)
{
byte_num++;
}
// else byte_num=0;
break;
case 3: //纬度方向处理
WD_a=tmp;
// if(byte_num<1)
// {
// byte_num++;
// }
// else byte_num=0;
// byte_num=0;
break;
case 4: //经度处理
JD[byte_num]=tmp;
// if(byte_num<9)
{
byte_num++;
}
// else byte_num=0;
break;
case 5:
JD_a=tmp;
// byte_num=0; //经度方向处理
// if(byte_num<1)
// {
// JD_a=tmp;
// byte_num++;
// }
// else byte_num=0;
break;
case 6:
lock=tmp; //定位判断
// byte_num=0;
// if(byte_num<1)
// {
// lock=tmp;
// byte_num++;
// }
// else byte_num=0;
break;
case 7: //定位使用的卫星数
use_sat[byte_num]=tmp;
byte_num++;
high_len=0;
/* if(byte_num==0)
{
use_sat[1]='0';
use_sat[0]=tmp;
byte_num++;
}
if(byte_num==1)
{
use_sat[1]=use_sat[0];
use_sat[0]=tmp;
} */
break;
case 9: //高度处理
high[byte_num]=tmp;
byte_num++;
high_len++;
/* high[byte_num]=tmp;
if(high_end==1)
{
byte_num=0;
high_end=0;
}
else
{
byte_num++;
high_len=byte_num;
}
if(tmp=='.') high_end=1; */
break;
default:
break;
}
}
// printf("run gpgga get /n");
}while(GPGGA_BUF[byte_counter]!='*');
byte_counter=0;
byte_num=0;
seg_counter=0;
do
{
tmp=GPRMC_BUF[byte_counter];
// printf("%c",tmp);
if(byte_counter==80) break;
else byte_counter++;
if(tmp==',') {seg_counter++; byte_num=0;}
else
{
switch(seg_counter)
{
/* case 1:
if(byte_num<9)
{ //时间处理
time[byte_num]=tmp;
byte_num++;
}
else byte_num=0;
break;
/* case 3: //纬度处理
if(byte_num<10)
{
WD[byte_num]=tmp;
byte_num++;
}
else byte_num=0;
break;
case 4: //纬度方向处理
if(byte_num<1)
{
WD_a=tmp;
byte_num++;
}
else byte_num=0;
break;
case 5: //经度处理
if(byte_num<11)
{
JD[byte_num]=tmp;
byte_num++;
}
else byte_num=0;
break; */
case 6: //经度方向处理
/* if(byte_num<1)
{
JD_a=tmp;
byte_num++;
}
else byte_num=0; */
speed_len=0;
break;
case 7: //速度处理
speed[byte_num]=tmp;
byte_num++;
speed_len++;
angle_len=0;
/* if(byte_num<3)
{
byte_num++;
}
else byte_num=0; */
break;
case 8: //方位角处理
angle[byte_num]=tmp;
b
GPS串口协议解析代码(完整)
3星 · 超过75%的资源 需积分: 47 24 浏览量
2016-02-18
14:23:15
上传
评论 10
收藏 9KB RAR 举报
Super_Joki
- 粉丝: 16
- 资源: 20
最新资源
- IMG_20240425_120538.jpg
- My Complete Genome_6k Base-Pairs of Phenotype SNPs_Complete Raw Data.zip
- qt 的mqtt测试demo
- 移动应用开发教程-zip.zip
- mosquitto-2.018-install-windows-x64
- FTPServer FTP 服务器,绿色免安装,单文件
- 梦畅语音点名软件,上课点名
- 利用ADNI数据集和标签,在tensorflow框架上使用tensorlayer接口,通过架构u-net实现海马体的分割
- Kutools for Word v9.0 office word 插件
- 修复Windows 10 LTSC 2021资源占用率高
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈