unsigned char idata GPSBuffer[32];//GPS发送的时间,经度,纬度共31位
unsigned char idata GPSBuffer1[32];
//串口中断初始化**********************************************************************************
void sini()
{
TMOD=0x20;
TH1=0xfa;
TL1=0xfa;
PCON=0x00;
SCON=0xd8;
TR1=1;
ES=1;
EA=1;
}
//主程序**********************************************************************************
void main()
{
LCD_Initial();
P2=0x05;
GPSBuffer[31]='\0';
GPSBuffer1[31]='\0';
sini();
while(1);
}
//串口中断*********************************************************************************
void intrr() interrupt 4
{
unsigned char i,j;
bit find=0;//数据查找标记
//查找标记符*********************************************************************************
for(j=0;j <8;j++) //GPS每帧数据是242位;检验8次
{
for(i=0;i <31;i++)//从SBUF收一次数据
{
while(RI!=1 );
RI=0;
GPSBuffer[i]=SBUF;
}
for(i=0;i <29;i++)//查找时间,经度,纬度前的标记符
{
if(GPSBuffer[i]==0x47&&GPSBuffer[i+1]==0x47&&GPSBuffer[i+2]==0x41)//标记符GGA对应的ASC2码
{
find=1;//找到
break;
}
}
if(find==1)
break;
}
//显示程序**************************************************************************************
if(find==1)
{
for(i=0;i <31;i++)//继续接受所需数据
{
while(RI!=1 );RI=0;
GPSBuffer1[i]=SBUF;
}
for(i=0;i <27;i++)
{
if(GPSBuffer[i]==0x47&&GPSBuffer[i+1]==0x47&&GPSBuffer[i+2]==0x41)
{
if(i <11)//GPSBuffer中有效数据多于LCD的一行
{
Printf(0,0,&GPSBuffer[i+4]);//显示在LCD的第一行
Printf(0,1,&GPSBuffer[i+20]);//显示在LCD第二行
Printf(12-i,1,&GPSBuffer1[0]);
}
if(i==11)//GPSBuffer中有效数据等于LCD的一行
{
Printf(0,0,&GPSBuffer[i+4]);
Printf(0,1,&GPSBuffer1[0]);
}
if(i> 11)//GPSBuffer中有效数据少于LCD的一行
{
Printf(0,0,&GPSBuffer[i+4]);
Printf(27-i,0,&GPSBuffer1[0]);
Printf(0,1,&GPSBuffer1[i-11]);
}
}
}
if(GPSBuffer[27]==0x47&&GPSBuffer[28]==0x47&&GPSBuffer[29]==0x41)//标记符在GPSBuffer的末端
{
Printf(0,0,&GPSBuffer1[0]);
Printf(0,1,&GPSBuffer1[16]);
}
if(GPSBuffer[28]==0x47&&GPSBuffer[29]==0x47&&GPSBuffer[30]==0x41)
{
Printf(0,0,&GPSBuffer1[1]);
Printf(0,1,&GPSBuffer1[17]);
}
}
Delay1ms(300);//延时300毫秒
}
GPS发送的一帧数据为(每秒发一次):$GPRMC,090729,V,3046.7484,N,10356.8178,E,,,171106,1.3,W*7D
$GPGGA,090729,3046.7484,N,10356.8178,E,0,00,,,M,,M,,*51
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GPGSV,3,1,12,01,00,034,00,02,23,239,00,03,00,119,00,04,64,256,00*78
$PGRME,,M,,M,,M*00
$PGRMM,WGS 84*06