• 大小: 40KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-29
  • 语言: 其他
  • 标签: GPS数据  LCD1602  

资源简介

利用Keil C编写的程序,实现解析GPS采集到的数据,包括10位经度、9位纬度、4位速度、6位北京时间、6位日期,用LCD1602显示出来,并显示相应的提示语言。本程序经过本人的测试,将GPS通过串口连接到单片机,再将单片机连接上LCD1602,在空旷的地方可以完全实现GPS数据采集和解析。

资源截图

代码片段和文件信息

/*-------------------主函数---------------------*/
#include “LCD1602.h“

typedef unsigned char uchar;

//GPS数据存储数组
uchar Time[6]; //时间——hhmmss
uchar WD[9]; //纬度
uchar JD[10]; //经度
uchar Speed[4]; //速度
uchar Date[6]; //日期——ddmmyy

//串口中断需要的变量
uchar seg_count; //逗号计数器
uchar byte_count; //位数计数器
uchar cmd_number;  //命令类型
uchar mode; //0:结束模式,1:命令模式,2:数据模式
uchar buf_full; //0:缓存数据无效;1:整句接收完成,相应数据有效
uchar cmd[5]; //命令类型存储数组

//需要显示的变量
unsigned int dsp_count; //刷新次数计数器

void SYS_Init(); //系统初始化

void main() 
{
uchar iTime0Time1;
SYS_Init(); //系统初始化
while(1)
{
if(buf_full==0) //缓冲数据无效,无GPS信号
{
dsp_count++; //刷新次数计数器值自增
if(dsp_count>=65000)
{
LCD_Write_String(00“No GPS Data... “); //从第1行首显示
while(buf_full==0); //当有GPS信号时退出循环,否则阻塞
dsp_count=0;
}
}
else if(buf_full) //有GPS信号
{
LCD_Write_String(00“GPS System!    “);
//显示经度
LCD_Write_String(01“JD:           E“);
for(i=0;i<10;i++)
LCD_Write_Char(3+i1JD[i]);
DelayMs(10000);
//显示纬度
LCD_Write_String(01“WD:           N“);
for(i=0;i<9;i++)
LCD_Write_Char(3+i1JD[i]);
DelayMs(10000);
//显示时间
LCD_Write_String(01“BJT:   :  :    “);
//将格林尼治时间转换为北京时间
if(((Time[1]-0x30)+(Time[0]-0x30)*10)<16)
{
Time0=((Time[1]-0x30)+8)/10+(Time[0]-0x30); //获得小时的十位数
Time1=((Time[1]-0x30)+8)%10; //获得小时的个位数
}
else if(((Time[1]-0x30)+(Time[0]-0x30)*10)>15)
{
Time0=0;
Time1=((Time[1]-0x30)+(Time[0]-0x30)*10)-16;
}
Time0=Time0+0x30; //将数字转换为字符
Time1=Time1+0x30;
LCD_Write_Char(51Time0);
LCD_Write_Char(61Time1);
LCD_Write_Char(81Time[2]);
LCD_Write_Char(91Time[3]);
LCD_Write_Char(111Time[4]);
LCD_Write_Char(121Time[5]);
DelayMs(10000);
//显示速度
LCD_Write_String(01“Speed:        “);
for(i=0;i<4;i++)
LCD_Write_Char(7+i1Speed[i]);
DelayMs(10000);
//显示日期
LCD_Write_String(01“Date:20  -  -  “);
LCD_Write_Char(71Date[4]); //显示年份
LCD_Write_Char(81Date[5]);
LCD_Write_Char(101Date[2]); //显示月份
LCD_Write_Char(111Date[3]);
LCD_Write_Char(131Date[0]); //显示天数
LCD_Write_Char(141Date[1]);
DelayMs(10000);

dsp_count=0; //刷新次数计数器值清0
buf_full&=~0x01;
}
}
}

void SYS_Init()
{
SCON=0x50; //串口工作方式1,10位异步通信,允许接收
TMOD=0x20; //T1工作方式28位初值自动重装
TH1=0xFD; //波特率9600bps,晶振11.0592MHz
TL1=TH1;
TR1=1; //启动定时器1
LCD_Init(); //初始化LCD1602
LCD_Clear(); //清屏
LCD_Write_String(00“GPS System!“);
IE=0x90; //EA=1开总中断,ES=1开串行口中断
}

//串口接收中断
void Serial() interrupt 4
{
uchar temp;
if(RI)
{
temp=SBUF;
switch(temp)
{
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) //命令模

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2012-03-20 14:26  解析GPS数据并显示\
     文件       18244  2012-03-20 14:16  解析GPS数据并显示\GPSData
     文件        4370  2012-03-20 14:16  解析GPS数据并显示\GPSData.c
     文件        3781  2012-03-20 14:16  解析GPS数据并显示\GPSData.hex
     文件          62  2012-03-20 14:16  解析GPS数据并显示\GPSData.lnp
     文件       12298  2012-03-20 14:16  解析GPS数据并显示\GPSData.LST
     文件       18132  2012-03-20 14:16  解析GPS数据并显示\GPSData.M51
     文件       11983  2012-03-20 14:16  解析GPS数据并显示\GPSData.OBJ
     文件        5380  2012-03-20 14:26  解析GPS数据并显示\GPSData.plg
     文件       55655  2012-03-20 14:26  解析GPS数据并显示\GPSData.uvopt
     文件       13403  2012-03-19 18:54  解析GPS数据并显示\GPSData.uvproj
     文件       55659  2012-03-20 14:26  解析GPS数据并显示\GPSData_uvopt.bak
     文件       13235  2012-03-19 18:52  解析GPS数据并显示\GPSData_uvproj.bak
     文件        3145  2012-03-20 10:37  解析GPS数据并显示\LCD1602.c
     文件         658  2012-03-20 10:37  解析GPS数据并显示\LCD1602.h
     文件        6933  2012-03-20 14:16  解析GPS数据并显示\LCD1602.LST
     文件        8797  2012-03-20 14:16  解析GPS数据并显示\LCD1602.OBJ

评论

共有 条评论