资源简介
利用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中文程序说明
相关资源
- [免费]msp430f149控制PS2键盘并用1602显示
- vhdl与lcd1602实现的多控制电子钟
- ADC0809数字电压表 LCD1602显示 汇编程序
- 根据GPS数据计算航向公式
- 基于GPS数据的露天矿道路网自动提取
- LCD1602显示程序
- GPS数据转换X.Y坐标
- 第四章 畅学多功能实验箱液晶资源详
- proteus仿真、keil4、DHT11、LCD1602
- DS18B20温度+DHT11湿度+LCD1602
- Trimble GPS data convert to rinex
- 基于FPGA的LCD1602实时显示DS18b20温度
- GPS数据提取轨迹重现系统
- STM32+ZE08-CH2O甲醛传感器+LCD1602显示.r
- 基于51单片机的电机转速监测
- 用出租车GPS数据分析深圳道路交通情
- FPGA VGA lcd1602 显示时钟 闹钟 按键控制
- STM32f103电压采样并用LCD1602显示
- STM32CubeMX+LCD1602 + PCF8574AT
- GPS数据分析工具——ublox
- 基于STM32的LCD1602驱动程序
- 基于stm32的lcd1602
- EC20状态机代码TCP传GPS数据
- LCD1602硬件结构及程序设计
- 基于stm32 和LCD1602的电子密码锁课程设
- STM32-串口能显示-超声波测距SR04 - LC
- VHDL利用PCF8591采集4个电压在LCD1602上进
- STM32F407VET6_SMART_LCD1602显示
- 基于STM32单片机的饮水机水位控制系统
- stm32F103C8T6+LCD1602.rar
评论
共有 条评论