资源简介
利用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
- 上一篇:机载下视圆周SAR三维BP成像
- 下一篇:Hydrus-2D中文程序说明
相关资源
- 基于STC12C5616AD单片机的AD采集程序LC
- DS1302实时时钟,LCD1602显示,可调时间
- AD0809驱动 用LCD1602显示采集的模拟电压
- zw_LCD1602.zip
- PIC16F877A和LCD1602液晶显示以及mpx4250压
- 基于STC15F2K60S2单片机的温湿度+CO2测量
- 1602 基于89C51单片机的DS18B20恒温控制系
- 89C52单片机通过LCD1602显示任意长度字
- DSP2812的LCD1602显示程序
- STC12C5A60S2内部AD+LCD1602显示
- msp430f149单路AD采样电压值并在lcd1602上
- LCD1602封装LCD1602封装
- LCD1602最好最详细的中文资料带字库
- NRF24l01收发程序带LCD1602液晶及串口通
- LCD1602液晶完整中文资料
- 单片机和LCD1602实现的简易计算器
- 基于89c51的等精度频率计lcd1602显示
- 51+bmp180+lcd1602+proteus.zip
- 5Kg电子秤程序LCD1602显示
- 51单片机的步进电机控制,lcd1602显示
- LCD1602显示实时温度代码
- C51单片机密码锁4×4矩阵键盘+LCD1602液
- 基于adc0832的数字电压表
- lcd1602显示时分秒
- 51单片机 lcd1602测试C程序
- 基于LCD1602读取DS18B20序列号proteus仿真
- 基于LCD1602与LED同时的proteus仿真温度测
- 基于cyclone II驱动LCD1602的电子时钟设计
- LCD1602液晶显示函数
- GPS数据解析C程序
评论
共有 条评论