GPS接受程序Word文件下载.docx
- 文档编号:20787227
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:28
- 大小:45.85KB
GPS接受程序Word文件下载.docx
《GPS接受程序Word文件下载.docx》由会员分享,可在线阅读,更多相关《GPS接受程序Word文件下载.docx(28页珍藏版)》请在冰豆网上搜索。
uchari=0;
ucharch;
chartime[5];
Lcd_DispLine(0,0,date);
//年月日
Int_To_Str(GPS.D.year,time);
//将年转换成字符串,存在time中
Lcd_SetPos(0,0);
//设置显示地址
if(strlen(time)==4)//判断接收数据是否有效,有效则显示
{
i=0;
while(time[i]!
='
\0'
)
{
ch=time[i++];
Lcd_WriteDat(ch);
//显示年
}
}
Int_To_Str(GPS.D.month,time);
Lcd_SetPos(0,3);
if(strlen(time)==2)//判断接收数据是否有效,有效则显示
ch=time[i++];
Int_To_Str(GPS.D.day,time);
Lcd_SetPos(0,5);
if(strlen(time)==2)//判断接收数据是否有效,有效则显示
Int_To_Str(GPS.D.hour,time);
Lcd_SetPos(1,1);
if(strlen(time)==2)//判断接收数据是否有效,有效则显示
Lcd_WriteDat('
'
);
:
'
Int_To_Str(GPS.D.minute,time);
Lcd_SetPos(1,3);
if(strlen(time)==2)//判断接收数据是否有效,有效则显示
Int_To_Str(GPS.D.second,time);
Lcd_SetPos(1,5);
}
voidGPS_DisplayOne(void)//第一屏
ucharch,i;
charinfo[10];
ET0=0;
//T0的溢出中断允许位,禁止T0的溢出中断
clr_screen();
//Lcd_WriteCmd(0x01);
//清屏
GPS_DispTime();
//显示日期,时间
if(GPS.NS=='
N'
)//判断是北纬还是南纬
Lcd_DispLine(2,0,beiwei);
elseif(GPS.NS=='
S'
Lcd_DispLine(2,0,nanwei);
if(GPS.EW=='
E'
)//判断是东经还是西经
Lcd_DispLine(3,0,dongjing);
elseif(GPS.EW=='
W'
Lcd_DispLine(3,0,xijing);
Int_To_Str(GPS.latitude_Degree,info);
//纬度
Lcd_SetPos(2,2);
if(strlen(info)==2)
{//只有正常显示纬度,才显示纬分
while(info[i]!
ch=info[i++];
Lcd_WriteDat('
Lcd_WriteDat(0xA1);
Lcd_WriteDat(0xE3);
//显示度的符号
Int_To_Str(GPS.latitude_Cent,info);
//纬分
if(strlen(info)==2)
{//只有正常显示纬分,才显示纬秒
i=0;
while(info[i]!
{
ch=info[i++];
Lcd_WriteDat(ch);
}
Lcd_WriteDat(0xA1);
Lcd_WriteDat(0xE4);
//显示秒的符号
Int_To_Str(GPS.latitude_Second,info);
//纬秒
if(strlen(info)==2)
i=0;
while(info[i]!
{
ch=info[i++];
Lcd_WriteDat(ch);
}
}
}
Int_To_Str(GPS.longitude_Degree,info);
//经度
if(strlen(info)==3)
Lcd_DispLine(3,2,info);
Int_To_Str(GPS.longitude_Cent,info);
//经分
Lcd_DispLine(3,5,info);
Int_To_Str(GPS.longitude_Second,info);
//经秒
Lcd_DispLine(3,7,info);
ET0=1;
voidGPS_DisplayTwo(void)//第二屏用于显示单位
Lcd_DispLine(0,0,sudu);
Lcd_DispLine(1,0,hangxiang);
Lcd_DispLine(2,0,gaodu);
Lcd_DispLine(3,0,haiba);
Show_Float(GPS.speed,0,3);
Lcd_DispLine(0,6,kmperhour);
Show_Float(GPS.direction,1,3);
Lcd_DispLine(1,6,du);
Show_Float(GPS.height_ground,2,3);
Lcd_DispLine(2,6,meter);
Show_Float(GPS.height_sea,3,3);
Lcd_DispLine(3,6,meter);
voidShow_Float(floatfla,ucharx,uchary)
intintegar;
charInfo[10],ch;
uchari;
Lcd_SetPos(x,y);
integar=(int)fla;
//显示整数部分
Int_To_Str(fla,Info);
//显示整数部分
i=0;
while(Info[i]!
='
ch=Info[i++];
Lcd_WriteDat(ch);
.'
//显示小数点
fla=fla-integar;
//显示小数部分
fla=fla*10;
//0.1//显示0.1
integar=(int)fla;
//改变fla的值,使fla总是小于1
ch=integar+0x30;
Lcd_WriteDat(ch);
fla=fla*10;
//0.01//显示0.01
ch=integar+0x30;
GPS程序:
GPS.h"
LCD.h"
#include<
string.h>
ucharcodeinit1[]={"
BASE-MCUGPS终端"
};
ucharcodeinit2[]={"
商院电信091班"
ucharcodeinit3[]={"
GPS初始化......"
ucharcodeinit4[]={"
搜索定位卫星...."
staticucharGetComma(ucharnum,char*str);
staticdoubleGet_Double_Number(char*s);
//得到双精度的数据
staticfloatGet_Float_Number(char*s);
//得到单精度的数据
staticvoidUTC2BTC(DATE_TIME*GPS);
//格林时间到北京时间的转换
voidGPS_Init(void)//GPS初始化
Lcd_DispLine(0,0,init1);
Lcd_DispLine(1,0,init2);
Lcd_DispLine(2,0,init3);
Lcd_DispLine(3,0,init4);
intGPS_RMC_Parse(char*line,GPS_INFO*GPS)//运输定位数据最大帧70
{//*GPS为结构体类型的指针
ucharch,status,tmp;
floatlati_cent_tmp,lati_second_tmp;
//经度的分、秒临时变量
floatlong_cent_tmp,long_second_tmp;
//纬度的分、秒临时变量
floatspeed_tmp;
//速度的临时变量
char*buf=line;
ch=buf[5];
status=buf[GetComma(2,buf)];
//定位状态给status,判断是否是A,
if(ch=='
C'
)//如果第五个字符是C,($GPRMC)推荐最小定位信息
if(status=='
A'
)//如果数据有效,则分析‘V’无效,‘A’有效
GPS->
NS=buf[GetComma(4,buf)];
EW=buf[GetComma(6,buf)];
GPS->
latitude=Get_Double_Number(&
buf[GetComma(3,buf)]);
longitude=Get_Double_Number(&
buf[GetComma(5,buf)]);
latitude_Degree=(int)GPS->
latitude/100;
//分离纬度
lati_cent_tmp=(GPS->
latitude-GPS->
latitude_Degree*100);
latitude_Cent=(int)lati_cent_tmp;
lati_second_tmp=(lati_cent_tmp-GPS->
latitude_Cent)*60;
latitude_Second=(int)lati_second_tmp;
longitude_Degree=(int)GPS->
longitude/100;
//分离经度
long_cent_tmp=(GPS->
longitude-GPS->
longitude_Degree*100);
longitude_Cent=(int)long_cent_tmp;
long_second_tmp=(long_cent_tmp-GPS->
longitude_Cent)*60;
longitude_Second=(int)long_second_tmp;
speed_tmp=Get_Float_Number(&
buf[GetComma(7,buf)]);
//速度(单位:
海里/时)
speed=speed_tmp*1.85;
//1海里=1.85公里
direction=Get_Float_Number(&
buf[GetComma(8,buf)]);
//角度
D.hour=(buf[7]-'
0'
)*10+(buf[8]-'
//时间
D.minute=(buf[9]-'
)*10+(buf[10]-'
D.second=(buf[11]-'
)*10+(buf[12]-'
tmp=GetComma(9,buf);
D.day=(buf[tmp+0]-'
)*10+(buf[tmp+1]-'
//日期
D.month=(buf[tmp+2]-'
)*10+(buf[tmp+3]-'
D.year=(buf[tmp+4]-'
)*10+(buf[tmp+5]-'
)+2000;
UTC2BTC(&
GPS->
D);
return1;
}
return0;
intGPS_GGA_Parse(char*line,GPS_INFO*GPS)//全球定位数据,最大帧为72
{//丛这个数据得到海拔的数据
ucharch,status;
ch=buf[4];
G'
)//$GPGGA丛这个数据得到海拔的数据
if(status!
'
height_sea=Get_Float_Number(&
buf[GetComma(9,buf)]);
height_ground=Get_Float_Number(&
buf[GetComma(11,buf)]);
staticfloatStr_To_Float(char*buf)//字符串到单精度的转换函数
floatrev=0;
floatdat;
intinteger=1;
char*str=buf;
//
inti;
while(*str!
switch(*str)
case'
dat=0;
break;
1'
dat=1;
2'
dat=2;
3'
dat=3;
4'
dat=4;
5'
dat=5;
6'
dat=6;
7'
dat=7;
8'
dat=8;
9'
dat=9;
dat='
if(dat=='
integer=0;
i=1;
str++;
continue;
if(integer==1)
rev=rev*10+dat;
else
rev=rev+dat/(10*i);
i=i*10;
str++;
returnrev;
staticfloatGet_Float_Number(char*s)
charbuf[10];
floatrev;
i=GetComma(1,s);
i=i-1;
strncpy(buf,s,i);
buf[i]=0;
rev=Str_To_Float(buf);
staticdoubleStr_To_Double(char*buf)//字符串到双精度的转换函数
doublerev=0;
doubledat;
staticdoubleGet_Double_Number(char*s)
doublerev;
rev=Str_To_Double(buf);
staticucharGetComma(ucharnum,char*str)
uchari,j=0;
intlen=strlen(str);
//字符串的长度
for(i=0;
i<
len;
i++)
if(str[i]=='
)//计算字符串中的逗号的个数
j++;
if(j==num)
returni+1;
//把逗号后的字符下标值返回
ret
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- GPS 接受 程序