|
求助:GPS模块与单片机结合用LCD显示GPS的信息
[复制链接]
我在做GPS模块与单片机结合用LCD显示GPS的信息的课题,我用的是AT89S52单片机晶振12m 波特率设置为4800bps ,但是我把gps的TXD针与单片机的RXD连上..为什么显示不到该显示的GPS信息呢..可能是什么原因呢...我测试过,我的LCD显示函数没问题,它能正常显示出我设定的东西
我个人认为可能是我的GPS接收函数出问题了,但是我没能找出来,哪位大虾帮帮小弟!!
GPS接受函数程序(C语言)
/***********************************************************
名称:GPS模块
功能:用串口接收GPS模块的定位等信息
说明:使用串口(定时器1)
/***********************************************************/
/*---------------------------------------------------------
GPS模块串口接收程序:全局变量的定义
---------------------------------------------------------*/
#include
#include
#define uchar unsigned char
uchar gpsnum; //$GPRMC语句数据类型序号
bit gpsres=0; //开始接收数据标志,1为开始接收
uchar gpstime[11]; //时间数据
uchar *gpsptime=gpstime; //时间数据指针
uchar gpsstatus[2]; //状态数据
uchar *gpspstatus=gpsstatus; //状态数据指针
uchar gpsweidu[10]; //纬度数据
uchar *gpspweidu=gpsweidu; //纬度数据指针
uchar gpsnors[2]; //南、北半球
uchar *gpspnors=gpsnors; //南、北纬数据指针
uchar gpsjingdu[11]; //经度数据
uchar *gpspjingdu=gpsjingdu; //经度数据指针
uchar gpseorw[2]; //东、西半球
uchar *gpspeorw=gpseorw; //东、西经数据指针
uchar gpsdate[7]; //日期数据
uchar *gpspdate; //日期数据指针
/*---------------------------------------------------------
GPS模块串口接收程序:函数声明
---------------------------------------------------------*/
void GPS_start(); //单片机控制GPS的串口初始化
/*---------------------------------------------------------
GPS模块串口接收程序:串口初始化
---------------------------------------------------------*/
void GPS_start()
{
SCON=0x50; //串口工作于方式1,REN=1
PCON=0x00; //不倍增
TMOD=0x20;
TH1=0xfa; //4800bps
TL1=0xfa;
TR1=1;
//PS=1; //高优先级
EA=1;
ES=1; //开串口中断
RI=0;
}
/*---------------------------------------------------------
GPS模块串口接收程序:串口函数
---------------------------------------------------------*/
void GPS_INT() interrupt 4
{
uchar i;
RI=0;
if(SBUF=='R') //判断是否为$GPRMC语句
{
gpsnum=0;
gpsres=1; //开始接收
return;
}
if(SBUF=='*' && gpsres==1) //接收完数据后的处理
{
gpsnum=0; //复位为第0个数据
gpsres=0; //停止接收
////////修正时间数据为北京时间,24小时制
if(gpstime[0]<0x32)
{
i=gpstime[1]+0x08; //小时个位+8,转为北京时间
if(i>=0x3a)
{
i=i-0x0a;
gpstime[0]=gpstime[0]+0x01;
if(gpstime[0]==0x32&&i>=0x34)
{gpstime[0]=0x30;i=i-0x04;}
}
}
else
{
i=gpstime[1]+0x04;
gpstime[0]=0x30;
}
gpstime[1]=i;
return;
}
//////////////////////////////////////////
if(gpsres==1)
{
if(SBUF==',') //逗号后为下一个数据
{gpsnum++;return;}
switch(gpsnum) //判断数据类型,然后存储起来
{
case 0:{*gpsptime=SBUF;gpsptime++;}break;
case 1:{*gpspstatus=SBUF;gpspstatus++;}break;
case 2:{*gpspweidu=SBUF;gpspweidu++;}break;
case 3:{*gpspnors=SBUF;gpspnors++;}break;
case 4:{*gpspjingdu=SBUF;gpspjingdu++;}break;
case 5:{*gpspeorw=SBUF;gpspeorw++;}break;
case 6:{}break;
case 7:{}break;
case 8:{*gpspdate=SBUF;gpspdate++;}break;
case 9:{}break;
default:
{
*gpsptime=gpstime; //复位各数据指针
*gpspstatus=gpsstatus;
*gpspweidu=gpsweidu;
*gpspnors=gpsnors;
*gpspjingdu=gpsjingdu;
*gpspeorw=gpseorw;
*gpspdate=gpsdate;
}break;
}
}
}
/***********************************************************
结束
/***********************************************************/
|
|