📄 gpsgai6.2.last.c
字号:
#include <reg51.h>
unsigned char code b[6]="$GPGLL";
unsigned char data_east[7];
unsigned char data_north[7];
unsigned char data_time[7];
unsigned char data_comma=0;//记录逗号的个数
//**********************************************************************************************************************
//函数作用:延时程序
//参数说明:
//注意事项:
//返回说明:
//**********************************************************************************************************************
dlm(int j)
{char k;int l;
for(l=0;l<j;l++)
{
for(k=0;k<120;k++) ;
}
}
//**********************************************************************************************************************
//函数作用:主函数
//参数说明:
//注意事项:在显示地理位置时,先判断data_north[0]中的数据,是否为错误代码,错误代码 & 表示有时间,没有地理位置,
// 错误代码 ^ 表示时间和地理位置都没接收到等待接收
// 在显示时,只显示data_north[]、data_east[]、data_time[]数组中的前六个数,不显示第七个数
//返回说明:
//**********************************************************************************************************************
void main()
{
TMOD=0x20;
PCON&= 0x7F;
TH1=0xfd; //波特率为9600 & 11.0592,,无倍数
TL1=0xFD;
TR1=1;//启动波特率发生器
SCON=0x50 ;//串口工作方式1,10位UART unsigned int i;
ES=1;
EA=1;
while(1)
{ ES=1;
dlm(1000);
}
}
//*********************************************************************************************************************
//函数作用:从串口接收GPS上的数据
//参数说明:全局变量east[]、north[]、time[]分别存放地理位置的经度、纬度和时间
//注意事项:
//返回说明:通过全局变量返回经度、纬度和时间
//*********************************************************************************************************************
void chuan()interrupt 4 using 1
{
unsigned char j,data_tmp;
unsigned char m,n,k;
if(RI)
{
ES=0; //关中断
m=n=k=0;
//开始接收GPS的地理位置信息
for(j=0;j<50;j++)
{
while(RI==0);
RI=0;
if(j==0)
{if(SBUF!=b[j]) j=0; }//
else{
if(j<6&&SBUF!=b[j]) j=0; //标致符判断
else{
if (SBUF==0x2c) //判断逗号个数,以找到地理位置和时间
data_comma++;
}
// data_comma=(data_comma&&0x00ff);
switch(data_comma) //找到位置,时间
{case 1:data_north[m]=SBUF;m++;
break;
case 3:data_east[n]=SBUF;n++;
break;
case 5:data_time[k]=SBUF;k++;
break;
case 6:{if(j==43) //等于44,时间和地理位置都收到
data_north[1]='^';
else if(j==20) //等于21时间收到,但位置没收到
data_north[1]='&';
};
};
};
};
};
//数据接收完毕
//数据正确,进行数据调整
for (m=1;m<8;m++)//纬度调整
data_north[m-1]=data_north[m];
data_tmp=data_north[2];
data_north[2]=data_north[4];
data_north[4]=data_tmp;
for (n=1;n<8;n++)//经度调整
data_east[n-1]=data_east[n];
data_tmp=data_east[3];
data_east[3]=data_east[5];
data_east[5]=data_tmp;
for (k=1;k<8;k++)//时间调整
data_time[k-1]=data_time[k];
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -