OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9275|回复: 8

用单片机设计的GPS模块,可以定位,但是LCD始终不能显示,是因为单片机没有收到数据吗?帮忙看看!

[复制链接]

2

主题

15

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2014-4-21
在线时间
0 小时
发表于 2014-5-6 18:17:36 | 显示全部楼层 |阅读模式
5金钱
这个是程序,各位大神帮忙看看啊!
#include<reg52.h>
#include<intrins.h>
#define START '$'
#define END '*'
#define TS1602_DATA P0

// LCD1602地址表
/*
0X80 0X81 0X82 0X83 0X84 0X85 0X86 0X87 0X88 0X89 0X8A 0X8B 0X8C 0X8D 0X8E 0X8F
0XC0 0XC1 0XC2 0XC3 0XC4 0XC5 0XC6 0XC7 0XC8 0XC9 0XCA 0XCB 0XCC 0XCD 0XCE 0XCF
*/
unsigned char code lcd_code[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
unsigned char Num_comma=0;
bit read_start=0;
unsigned char i,j=10,k=11;igps=0;
bit flag1=0,flag2=0,flag3=0,flag4=0,flag5=0;

unsigned char status[1]; //状态 A 为数据OK; V 为警告
unsigned char latitude[10]={0};//纬度
unsigned char N_S[1]; //N(北纬) 或 S(南纬)
unsigned char longitude[11]={0};//经度
unsigned char E_W[1]; //E(东经)或W(西经)

sbit RS=P2^3; //指令或数据
sbit RW=P2^4; //读或写
sbit E =P2^5; //使能端

/***************************************************
//函数功能:LCD1602驱动函数
*****************************************************/
void delay(unsigned int x)
{  
unsigned int i;
for(;x>0;x--)
for(i=0;i<4;i++)
 ;
}
//************************************************
//函数功能:写指令
//使用说明:无
//************************************************
void write_com(unsigned char com) 
{
RW=0;
RS=0;
TS1602_DATA=com;
delay(1);
E=1;
delay(1);
E=0;
}
//***************************************************
//函数功能:写数据
//使用说明:无
//****************************************************
void write_date(unsigned char date)
{
 RW=0;
 RS=1;
 TS1602_DATA=date;
 delay(1);
 E=1;
 delay(1);
 E=0;
}
//***************************************************
//函数功能:液晶初始化
//使用说明:无
//****************************************************
void TS1602_INIT(void)
{
RS=0;
RW=0;
write_com(0x38);
write_com(0x0C); //设置液晶光标 不显示
write_com(0x06);
write_com(0x01);  //清屏
write_com(0x80);  //光标的位置
}
//函数功能:显示一位数字
void display_a_num(unsigned char num)
{
write_date(lcd_code[num]);
}
//函数功能:显示字符串
void display_string(unsigned char *P)
{
while(*P)
{
write_date(*P);
P++;
}
}


//****************************************************************
//函数功能:LCD显示
//参数说明:参数为地点代号
//****************************************************************
void LCD1602_display()
{
write_com(0x80); //设置液晶光标起始位置 第一行起点
write_date(N_S[0]); //显示"N"或"S"
write_date(':');
display_a_num(latitude[0]);  //显示十位
display_a_num(latitude[1]);  //显示个位
display_a_num(latitude[2]);  
display_a_num(latitude[3]);
write_date(latitude[4]);  //显示小数点
display_a_num(latitude[5]);
display_a_num(latitude[6]);
display_a_num(latitude[7]);
display_a_num(latitude[8]);
display_a_num(latitude[9]);
write_com(0x8d); //设置液晶光标起始位置
write_date(status[0]);     //显示'A'或'V'
write_com(0xc0); //设置光标位置 第二行起点
write_date(E_W[0]);     //显示"E"或"W"
write_date(':');
display_a_num(longitude[0]);  //百位
display_a_num(longitude[1]);  //十位
display_a_num(longitude[2]);  //个位
display_a_num(longitude[3]);  
display_a_num(longitude[4]);
write_date(longitude[5]);     //显示小数点
display_a_num(longitude[6]);
display_a_num(longitude[7]);
display_a_num(longitude[8]); 
display_a_num(longitude[9]);
display_a_num(longitude[10]); 
}


void main()    
{
TS1602_INIT(); //液晶初始化
TMOD=0X20; //单片机晶振11.0592M
TL1=0XFD;   //256-253=3  波特率:9600bps
TH1=0XFD;
SCON=0X50; //SM0 SM1 SM2 REN TB8 RB8 TI RI 串行方式1
PCON=0X00; //SMOD=0
IE=0X90;   //EA=1; ET1=1;
TR1=1; //开定时器1
delay(100);


while(1) //死循环,程序一直在里面运行

    LCD1602_display();//液晶显示
}
}

void serial()interrupt 4
     {
   RI=0;
if(SBUF=='$')
  {  flag1=1;
     igps=0;
 Num_comma=0;
  }
  else flag1=0;
if((SBUF=='G')&&(flag1==1))flag2=1;
                        else flag2=0;
   if((SBUF=='P')&&(flag2==1))flag3=1;
                        else flag3=0;
if((SBUF=='R')&&(flag3==1))flag4=1;
                        else flag4=0;
if((SBUF=='M')&&(flag4==1))flag5=1;
                        else flag5=0;
if((SBUF=='C')&&(flag5==1))read_start=1;
                        else read_start=0;
if(read_start==1)
  { 
      if(SBUF==',')
     { Num_comma++;
 }
  if(Num_comma==2)
 { status[igps]=SBUF;
 }
  if(Num_comma==3)
 { for(i=0;i<j;i++)latitude[igps]=SBUF;
   
 }
  if(Num_comma==4)
 { N_S[igps]=SBUF;
 }
      if(Num_comma==5)
 { for(i=0;i<k;i++)longitude[igps]=SBUF;
  }
  if(Num_comma==6)
 { E_W[igps]=SBUF;
igps++;
 }
if(SBUF=='*')
 {  
  Num_comma=0;
read_start=0;
igps=0;
 }

}
 }




 

最佳答案

查看完整内容[请看2#楼]

还是将1602调试好再说
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-5-6 18:17:37 | 显示全部楼层
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2014-4-21
在线时间
0 小时
 楼主| 发表于 2014-5-6 21:04:10 | 显示全部楼层
回复【2楼】Badu_Space:
---------------------------------
怎么单独调试1602
回复

使用道具 举报

11

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2013-4-27
在线时间
14 小时
发表于 2014-5-6 21:15:00 | 显示全部楼层
写个简单显示程序,先测试下液晶,没有问题再往下进行
回复

使用道具 举报

2

主题

15

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2014-4-21
在线时间
0 小时
 楼主| 发表于 2014-5-7 19:46:28 | 显示全部楼层
回复【4楼】xurids:
---------------------------------
液晶显示是没有问题的,就是单片机接收不到数据。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165353
金钱
165353
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-5-7 22:51:27 | 显示全部楼层
回复【5楼】huangchangfen:
---------------------------------
那就是串口通信部分有问题了
检查这部分代码.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2013-7-31
在线时间
12 小时
发表于 2014-5-11 22:22:26 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
原子哥,我的串口收发数据正常,GPS经过蓝牙直接发回电脑显示正常,但是gps发给单片机后再经过蓝牙发给电脑端,串口助手接收数在增加,但却什么也不显示,如果改为16进制格式输出全是00 不知道为什么  难道是电平问题?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165353
金钱
165353
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-5-11 22:38:44 | 显示全部楼层
回复【7楼】beyoung:
---------------------------------
单独测试单片机--蓝牙--电脑,是不是正常。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2013-7-31
在线时间
12 小时
发表于 2014-5-12 12:30:29 | 显示全部楼层
回复【8楼】正点原子:
---------------------------------
正常 蓝牙和单片机一切正常,我一直都是在用蓝牙当串口的,单独测了下也没问题,就是GPS给了单片机,单片机再由蓝牙发给电脑显示不正常,接收数在增加,但界面却什么也不显示
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 22:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表