|
我的12864液晶是串行口自带字库,3根线就可以控制,GPS模块是在阿莫买的370C,在论坛上参考了很多大侠们写的程序,但就是不能在我的液晶上正常运行,希望大家帮忙看看,这是我在网上以及论坛上找的程序(液晶驱动没写上来):
(我用的12M的晶振)
//GPS数据存储数组
uchar jd[10]={"-----.----"}; //经度
uchar jd_fx='-'; //经度方向
uchar wd[9]={"----.----"}; //纬度
uchar wd_fx='-'; //纬度方向
unsigned char time[6]; //时间
unsigned char date[6]; //日期
uchar state; //定位状态
//串口中断需要的变量
uchar seg_count; //逗号计数器
uchar dot_count; //小数点计数器
uchar byte_count; //位数计数器
uchar cmd_number; //命令类型
uchar mode; //0:结束模式,1:命令模式,2:数据模式
uchar buf_full=0; //1:整句接收完成,相应数据有效。0:缓存数据无效。
uchar cmd[5]; //命令类型存储数组
//显示需要的变量
unsigned int dsp_count; //刷新次数计数器
void sys_init(void) //系统初始化
{
SCON = 0x50; //SCON: mode 1, 8-bit UART, enable rcvr
TMOD |= 0x21; //TMOD: timer 1, mode 2, 8-bit reload
TH1 = 0xf4; // TH1: reload value for 4800 baud @ 11.059MHz
TR1 = 1; // TR1: timer 1 run
PCON=0x00 ;
LCD_Init(); //LCD初始化
FontSet_cn(0,1); //设置汉字字体大小和颜色
FontSet(0,1); //设置字符字体大小和颜色
PutString_cn(0x00,0x00,"GPS自动定位系统");
SetBackLight(100);
TimeDelay(500); 【程序运行到这好像就没往下运行了,因为显示“GPS自动定位系统”几秒后就清屏什么都没有显示了,自己怀疑是串口接收中断函数哪里出错了,但研究了3天一直没找出来,我的GPS设置的是4800bps,所以单片机波特率也设置4800bps。希望大家帮忙看看我的初始化程序和中断接收程序,中断接收程序相信大家很熟悉,不是我自己写的,但自己研究了没有任何问题,但就是在液晶上不能按照程序所写的那样显示。】
ClrScreen();
IE|=0x90; //开总中断、串口中断
}
void uart(void) interrupt 4 //串口接收中断
{
uchar tmp;
//RI=0;
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; //GPGGA
break;
case 2:
buf_full|=0x02; //GPGSV
break;
case 3:
buf_full|=0x04; //GPGSA
break;
case 4:
buf_full|=0x08; //GPRMC
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=4;
mode=2;
seg_count=0;
byte_count=0;
}
}
}
}
}
}
}
else if(mode==2)
{
//接收数据处理
switch (cmd_number)
{
case 4: //类型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)
{
state=tmp;
}
case 3: //纬度处理
if(byte_count<9)
{
wd[byte_count]=tmp;
}
break;
case 4: //纬度方向处理
if(byte_count<1)
{
wd_fx=tmp;
}
break;
case 5: //经度处理
if(byte_count<10)
{
jd[byte_count]=tmp;
}
break;
case 6: //经度方向处理
if(byte_count<1)
{
jd_fx=tmp;
}
break;
case 9: //日期处理
if(byte_count<6)
{
date[byte_count]=tmp;
} }
break;
}
}
byte_count++; //接收数位加1
break;
}
}
//RI=0;
}
void main(void)
{
uchar i;
char Bhour;
sys_init();
while(1)
{
if(buf_full==0) //无GPS信号时
{
dsp_count++;
if(dsp_count>=65000) //等待30秒无信号 显示
{
ClrScreen(); //清屏
PutString(0x00,0x00,"No GPS connect.."); 【如果没有GPS信号应该显示那串英文字符串,但我的液晶上什么也不显示,就只有背光亮着,所以下面的程序液晶也是更没能显示。希望大侠帮帮忙研究下。】
while(buf_full==0);
ClrScreen();
dsp_count=0;
}
}
else if(state=='V') //GPRMC语句
{ //如果未定位
ClrScreen();
PutString(0x10,0x00,"No Positioning");
//ClrScreen();
}
else
{ //如果已定位
if(jd_fx=='E')
{
PutString_cn(0x00,0x20,"东经");
}
else if(wd_fx=='W')
{
PutString_cn(0x00,0x20,"西经"); //第三行显示经度信息
}
for(i=0;i<3;i++)
{
PutChar(0x20+(i*8),0x20,jd);
}
PutChar(0x38,0x20,'.');
for(i=3;i<10;i++)
{
PutChar(0x40+(i*8),0x20,jd);
}
if(wd_fx=='N')
{
PutString_cn(0x00,0x30,"北纬"); //第四行显示纬度信息
}
else if(wd_fx=='S')
{
PutString_cn(0x00,0x30,"南纬");
}
for(i=0;i<2;i++)
{
PutChar(0x30+(i*8),0x30,wd);
}
PutChar(0x40,0x30,'.');
for(i=2;i<9;i++)
{
PutChar(0x50+(i*8),0x30,wd);
}
PutString_cn(0x00,0x00,"日期"); //日期2011-05-24
PutString_cn(0x30,0x00,"20");
PutChar(0x40,0x00,date[4]);
PutChar(0x48,0x00,date[5]);
PutChar(0x50,0x00,'-');
PutChar(0x58,0x00,date[2]);
PutChar(0x60,0x00,date[3]);
PutChar(0x68,0x00,'-');
PutChar(0x70,0x00,date[0]);
PutChar(0x78,0x00,date[1]);
Bhour=((time[0]-0x30)*10+time[1]-0x30)+TIME_AREA;
if(Bhour>=24)
{
Bhour-=24;
}
else if(Bhour<0)
{
Bhour+=24;
}
PutString_cn(0x00,0x10,"时间");
PutChar(0x20,0x10,Bhour/10+0x30);
PutChar(0x28,0x10,Bhour%10+0x30);
PutChar(0x30,0x10,':');
PutChar(0x38,0x10,time[2]);
PutChar(0x40,0x10,time[3]);
PutChar(0x48,0x10,':');
PutChar(0x50,0x10,time[4]);
PutChar(0x58,0x10,time[5]);
}
dsp_count=0;
}
}
程序我自己又检查了遍,,改动了点地方,已经没什么大问题,,但最关键的是在我的液晶上显示一条条的波纹,内容什么都没有,,不知道这跟液晶有什么关系,,对液晶有什么要求,希望明白的回个贴。 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|