);
}
DisplayOneChar(4,1,'.');
for(i=2;i<9;i++)
{
DisplayOneChar(i+3,1,WD);
}
}
dsp_count=0;
}
}

/******************************************************************************************

* 函数名称    :sys_init

* 功能描述    :系统初始化

* 参数        :  参数名称:        输入/输出?        类型                描述

*

* 返回值      :

* 作者        :

* 创建日期    :

* 全局变量    :

* 全局静态变量:

* 局部静态变量:

*----------------------------------------修改历史------------------------------------------

* 当前版本    :                          修改人:                  修改日期:

* 修改说明    :

******************************************************************************************/

void sys_init()

{

SCON = 0x50;     /* SCON: mode 1, 8-bit UART, enable rcvr */

TMOD = 0x21;     /* TMOD: timer 1, mode 2, 8-bit reload */

TH1 = 0xfa;            /* TH1: reload value for 4800 baud @ 11.059MHz */

TR1 = 1;         /* TR1: timer 1 run */

LCMInit();        //初始化LCD

DisplayListChar(0,0,"GPS GS-89m-J");

Delay400Ms();

Delay400Ms();

LCD_cls();

IE=0x90;            //开总中断、串口中断

}

/******************************************************************************************

* 函数名称    :WriteDataLCM

* 功能描述    :写数据

* 参数        :  参数名称:        输入/输出?        类型                描述

*

* 返回值      :

* 作者        :

* 创建日期    :

* 全局变量    :

* 全局静态变量:

* 局部静态变量:

*----------------------------------------修改历史------------------------------------------

* 当前版本    :                          修改人:                  修改日期:

* 修改说明    :

******************************************************************************************/

void WriteDataLCM(unsigned char WDLCM)

{

ReadStatusLCM(); //检测忙

LCM_Data = WDLCM;

LCM_RS = 1;

LCM_RW = 0;

LCM_E = 0; //若晶振速度太高可以在这后加小的延时

LCM_E = 0; //延时

LCM_E = 1;

}

/******************************************************************************************

* 函数名称    :WriteCommandLCM

* 功能描述    :写指令

* 参数        :  参数名称:        输入/输出?        类型                描述

*

* 返回值      :

* 作者        :

* 创建日期    :

* 全局变量    :

* 全局静态变量:

* 局部静态变量:

*----------------------------------------修改历史------------------------------------------

* 当前版本    :                          修改人:                  修改日期:

* 修改说明    :

******************************************************************************************/

void WriteCommandLCM(unsigned char WCLCM,BuysC) //BuysC为0时忽略忙检测

{

if (BuysC)

ReadStatusLCM(); //根据需要检测忙

LCM_Data = WCLCM;

LCM_RS = 0;

LCM_RW = 0;

LCM_E = 0;

LCM_E = 0;

LCM_E = 1;

}

/******************************************************************************************

* 函数名称    :ReadStatusLCM

* 功能描述    :读状态

* 参数        :  参数名称:        输入/输出?        类型                描述

*

* 返回值      :

* 作者        :

* 创建日期    :

* 全局变量    :

* 全局静态变量:

* 局部静态变量:

*----------------------------------------修改历史------------------------------------------

* 当前版本    :                          修改人:                  修改日期:

* 修改说明    :

******************************************************************************************/

unsigned char ReadStatusLCM(void)

{

LCM_Data = 0xFF;

LCM_RS = 0;

LCM_RW = 1;

LCM_E = 0;

LCM_E = 0;

LCM_E = 1;

while (LCM_Data & Busy); //检测忙信号

return(LCM_Data);

}

/******************************************************************************************

* 函数名称    :LCMInit

* 功能描述    :LCM初始化

* 参数        :  参数名称:        输入/输出?        类型                描述

*

* 返回值      :

* 作者        :

* 创建日期    :

* 全局变量    :

* 全局静态变量:

* 局部静态变量:

*----------------------------------------修改历史------------------------------------------

* 当前版本    :                          修改人:                  修改日期:

* 修改说明    :

******************************************************************************************/

void LCMInit(void)

{

Delay400Ms();

LCM_Data = 0;

WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号

Delay5Ms();

WriteCommandLCM(0x38,0);

Delay5Ms();

WriteCommandLCM(0x38,0);

Delay5Ms();

WriteCommandLCM(0x38,1); //显示模式设置,开始要求每次检测忙信号

WriteCommandLCM(0x08,1); //关闭显示

WriteCommandLCM(0x01,1); //显示清屏

WriteCommandLCM(0x06,1); // 显示光标移动设置

WriteCommandLCM(0x0C,1); // 显示开及光标设置

}

/******************************************************************************************

* 函数名称    :LCMInit

* 功能描述    :LCM初始化

* 参数        :  参数名称:        输入/输出?        类型                描述

*

* 返回值      :

* 作者        :

* 创建日期    :

* 全局变量    :

* 全局静态变量:

* 局部静态变量:

*----------------------------------------修改历史------------------------------------------

* 当前版本    :                          修改人:                  修改日期:

* 修改说明    :

******************************************************************************************/

void LCD_cls(void)

{

WriteCommandLCM(0x01,0);

Delay5Ms();

}

/******************************************************************************************

* 函数名称    :DisplayOneChar

* 功能描述    :按指定位置显示一个字符

* 参数        :  参数名称:        输入/输出?        类型                描述

*

* 返回值      :

* 作者        :

* 创建日期    :

* 全局变量    :

* 全局静态变量:

* 局部静态变量:

*----------------------------------------修改历史------------------------------------------

* 当前版本    :                          修改人:                  修改日期:

* 修改说明    :

******************************************************************************************/

void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)

{

//                Y &= 0x1;

X &= 0xF; //限制X不能大于15,Y不能大于1

switch(Y)

{

case 0:

X += 0x00; //当要显示第二行时地址码+0x40;

X += 0x80; //算出指令码

WriteCommandLCM(X, 0); //这里不检测忙信号,发送地址码

WriteDataLCM(DData);

break;

case 1:

X += 0x80; //当要显示第二行时地址码+0x40;

X += 0x40; //算出指令码

WriteCommandLCM(X, 0); //这里不检测忙信号,发送地址码

WriteDataLCM(DData);

break;

default: break;

}

}

/******************************************************************************************

* 函数名称    :DisplayListChar

* 功能描述    :按指定位置显示一串字符  ***原来的遇到空格0x20就不显示***

* 参数        :  参数名称:        输入/输出?        类型                描述

*

* 返回值      :

* 作者        :

* 创建日期    :

* 全局变量    :

* 全局静态变量:

* 局部静态变量:

*----------------------------------------修改历史------------------------------------------

* 当前版本    :                          修改人:                  修改日期:

* 修改说明    :

******************************************************************************************/

void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)

{

unsigned char ListLength,j;

ListLength = strlen(DData);

Y &= 0x1;

X &= 0xF; //限制X不能大于15,Y不能大于1

if (X <= 0xF) //X坐标应小于0xF

{

for(j=0;j

{

DisplayOneChar(X, Y, DData[j]); //显示单个字符

X++;

}

}

}

/******************************************************************************************

* 函数名称    :Delay5M

* 功能描述    :5ms延时

* 参数        :  参数名称:        输入/输出?        类型                描述

*

* 返回值      :

* 作者        :

* 创建日期    :

* 全局变量    :

* 全局静态变量:

* 局部静态变量:

*----------------------------------------修改历史------------------------------------------

* 当前版本    :                          修改人:                  修改日期:

* 修改说明    :

******************************************************************************************/

void Delay5Ms(void)

{

unsigned int TempCyc = 5552;

while(TempCyc--);

}

/******************************************************************************************

* 函数名称    :Delay400Ms

* 功能描述    :400ms延时

* 参数        :  参数名称:        输入/输出?        类型                描述

*

* 返回值      :

* 作者        :

* 创建日期    :

* 全局变量    :

* 全局静态变量:

* 局部静态变量:

*----------------------------------------修改历史------------------------------------------

* 当前版本    :                          修改人:                  修改日期:

* 修改说明    :

******************************************************************************************/

void Delay400Ms(void)

{

unsigned char TempCycA = 5;

unsigned int TempCycB;

while(TempCycA--)

{

TempCycB=7269;

while(TempCycB--);

};

}

/******************************************************************************************

* 函数名称    :uart

* 功能描述    :串口接收中断

* 参数        :  参数名称:        输入/输出?        类型                描述

*

* 返回值      :

* 作者        :

* 创建日期    :

* 全局变量    :

* 全局静态变量:

* 局部静态变量:

*----------------------------------------修改历史------------------------------------------

* 当前版本    :                          修改人:                  修改日期:

* 修改说明    :

******************************************************************************************/

void uart(void) interrupt 4

{

unsigned char tmp;

if(RI)

{

tmp=SBUF;

switch(tmp)

{

case '$':

cmd_number=0;        //命令类型清空

mode=1;                //接收命令模式

byte_count=0;        //接收位数清空

break;

case ',':

seg_count++;        //逗号计数加1

byte_count=0;

break;

case '*':

switch(cmd_number)

{

case 1:

buf_full|=0x01;

break;

case 2:

buf_full|=0x02;

break;

case 3:

buf_full|=0x04;

break;

}

mode=0;

break;

default:

if(mode==1)

{

//命令种类判断

cmd[byte_count]=tmp;            //接收字符放入类型缓存

if(byte_count>=4)

{                //如果类型数据接收完毕,判断类型

if(cmd[0]=='G')

{

if(cmd[1]=='P')

{

if(cmd[2]=='R')

{

if(cmd[3]=='M')

{

if(cmd[4]=='C')

{

cmd_number=3;

mode=2;

seg_count=0;

byte_count=0;

}

}

}

}

}

}

}

else if(mode==2)

{

//接收数据处理

switch (cmd_number)

{

case 3:                //类型3数据接收。GPRMC

switch(seg_count)

{

case 1:

if(byte_count<6)                   //时间处理

{

time[byte_count]=tmp;

}

break;

case 2:                                //定位判断A or V

if(byte_count<1)

{

lock=tmp;

}

case 3:                                //纬度处理

if(byte_count<9)

{

WD[byte_count]=tmp;

}

break;

case 4:                                //纬度方向处理

if(byte_count<1)

{

WD_a=tmp;

}

break;

case 5:                                //经度处理

if(byte_count<10)

{

JD[byte_count]=tmp;

}

break;

case 6:                                //经度方向处理

if(byte_count<1)

{

JD_a=tmp;

}

break;

case 7:                                //速度处理

if(byte_count<5)

{

speed[byte_count]=tmp;

}

break;

case 8:                                //航向处理

if(byte_count<5)

{

angle[byte_count]=tmp;

}

break;

case 9:                                //日期处理

if(byte_count<6)

{

date[byte_count]=tmp;

}

break;

}

break;

}

}

byte_count++;        //接收数位加1

break;

}

}

RI=0;

}

No GPS connect..也不显示         如果模块坏了 或者没焊好  是不是会出现这样的问题?