OpenEdv-开源电子网

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

串口接收gps时间数据,显示到1602上的都为0!求助

[复制链接]

6

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2014-4-21
在线时间
0 小时
发表于 2014-4-28 17:51:57 | 显示全部楼层 |阅读模式
[mw_shl_code=c,true]main() { unsigned char i; sys_init(); while(1) { lcdwritecom(0x80); lcdwritedata('s'); lcdwritedata('j'); lcdwritecom(0x80+0x40); for(i=0;i<6;i++) { lcdwritedata(xianshi[time]); lcddelay(5); }//显示时间 } } //系统初始化 void sys_init() { // unsigned char i; SCON = 0x40; TMOD = 0x20; TH1=TL1=0xfd; TR1 = 1; lcdinit(); //初始化LCD IE=0x90; //开总中断、串口中断 } //串口接收中断 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 '*': mode=0; buf_full=1; 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=1; mode=2; seg_count=0; byte_count=0; } } } } } } } else if((mode==2)&cmd_number){ //接收数据处理 GPGGA,132920.487,,n,,w,0,00,,,M,0.0,M,,0000*56 //$GPRMC,161229.487,A,3723.2475,N,12158.3416,W,0.13,309.62,120598, ,*10 //$GPGGA,161229.487,3723.2475,N,12158.3416,W,1,07,1.0,9.0,M, , , ,0000*18 switch(seg_count){ case 1: if(byte_count<6){ //时间处理 time[byte_count]=tmp; } break; 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: //speed if(byte_count<4){ speed[byte_count]=tmp; } break; // case 9: //date // if(byte_count<6){ // date[byte_count]=tmp; // } // break; } } byte_count++; //接收数位加1 break; } } RI=0; }[/mw_shl_code]

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2014-4-21
在线时间
0 小时
 楼主| 发表于 2014-4-28 17:53:03 | 显示全部楼层
#include <AT89X51.H>
#include <stdio.h>

#define uchar unsigned char
 #define uint unsigned int


//char code TIME_AREA= 8;                  //时区
//GPS数据存储数组
unsigned char JD[10];                  //经度
unsigned char JD_a;                  //经度方向
unsigned char WD[9];                  //纬度
unsigned char WD_a;                  //纬度方向
        uchar time[6];            //时间
//串口中断需要的变量
unsigned char seg_count;            //逗号计数器
//unsigned char dot_count;            //小数点计数器
unsigned char byte_count;            //位数计数器
unsigned char cmd_number;            //命令类型
unsigned char mode;                        //0:结束模式,1:命令模式,2:数据模式
unsigned char buf_full;                  //1:整句接收完成,相应数据有效。0:缓存数据无效。
unsigned char cmd[5];                  //命令类型存储数组
unsigned char speed[4]; 
unsigned char date[6]; 
//uchar nosign[]="no sign";
uchar xianshi[]={'0','1','2','3','4','5','6','7','8','9'} ;


 sbit lcden=P2^7;
 sbit lcdrw=P2^5;
 sbit lcdrd=P2^6;

void lcddelay(uint z);
void lcdwritecom(uchar com);
void lcdwritedata(uchar date);
void lcdinit();

//显示需要的变量
unsigned int dsp_count;            //刷新次数计数器
unsigned char time_count;
void sys_init(void);
回复 支持 反对

使用道具 举报

5

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2014-4-13
在线时间
0 小时
发表于 2014-4-28 18:25:17 | 显示全部楼层
你先单个调程序,看看单片机串口能不能收到数据,返回到电脑上,然后再调1602,另外SCON=0x50;吧
回复 支持 反对

使用道具 举报

6

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2014-4-21
在线时间
0 小时
 楼主| 发表于 2014-4-28 20:08:03 | 显示全部楼层
回复【3楼】szpskk:
---------------------------------
改了SCON=0x05;电脑端的串口助手是收的到数据的
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

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

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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