• 大小: 1.08MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-08-29
  • 语言: 其他
  • 标签: GPS  

资源简介

基于51的GPS数据分离,1602显示,使用串口通信,将GPS传回数据中的时间,日期,经纬度分离出来, 在1602液晶上显示

资源截图

代码片段和文件信息

#include
#include “1602.h“
sbit GPS_SPD=P2^1; //GPS模块速率设置
sbit KEY1=P2^0; //显示内容分屏切换
char code TIME_AREA= 8; //时区
//GPS数据存储数组
unsigned char JD[10]; //经度
unsigned char JD_a; //经度方向
unsigned char WD[9]; //纬度
unsigned char WD_a; //纬度方向
unsigned char date[6]; //日期
unsigned char time[6]; //时间
unsigned char speed[5]={‘0‘‘0‘‘0‘‘0‘‘0‘}; //速度
unsigned char high[6]; //高度
unsigned char angle[5]; //方位角
unsigned char use_sat[2]; //使用的卫星数
unsigned char total_sat[2]; //天空中总卫星数
unsigned char lock; //定位状态
//串口中断需要的变量
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 int dsp_count; //刷新次数计数器
unsigned char time_count;
bit page;
void sys_init(void);
bit chk_key(void);
void ser_init()
{
    TMOD=0X20;//设置定时器T1为工作方式2
TR1=1;//启动定时器T1
TH1=0xfd;//T1定时器装初值
TL1=0xfd;
REN=1;//允许串口接收
SM0=0;
SM1=1;//设置串口工作方式1
ES=1;//开串口中断
EA=1;//开总中断


}
main()
{
unsigned char i;
char Bhour;
sys_init();
lock=1;
use_sat[0]=‘0‘;
use_sat[1]=‘0‘;
total_sat[0]=‘0‘;
total_sat[1]=‘0‘;
while(1){
     if(buf_full==0) //无GPS信号时
{
dsp_count++;
if(dsp_count>=65000){
LCD_cls(); //清屏
LCD_write_string(00“No GPS connect..“);
LCD_write_string(01“Please Check..“);
while(buf_full==0);
LCD_cls();
dsp_count=0;
}
}
else{ //有GPS信号时
if(chk_key()){ //检测到按键切换显示
page=!page;
LCD_cls();
}
if(!page){ //页面1
if(buf_full|0x01){ //GGA语句
if(lock==0){ //如果未定位
LCD_write_string(00“*---.--.----  “);
LCD_write_string(01“* --.--.----  “);
}else{ //如果已定位
    LCD_write_char(00JD_a); //显示经度
for(i=0;i<10;i++){
  LCD_write_char(i+10JD[i]);
}
LCD_write_char(01WD_a); //显示纬度
LCD_write_char(11‘ ‘);
for(i=0;i<9;i++){
LCD_write_char(i+21WD[i]);
}
}
LCD_write_char(141use_sat[0]); //显示接收卫星数
LCD_write_char(151use_sat[1]);
buf_full&=~0x01;
dsp_count=0;
}
if(buf_full|0x02){ //GSV语句
LCD_write_char(141total_sat[0]);
LCD_write_char(151total_sat[1]);
buf_full&=~0x02;
dsp_count=0;
}
if(buf_full|0x04){
if(lock==0){ //如果未定位
LCD_write_string(00“*---.--.----  “);
LCD_write_string(01“* --.--.----  “);
}else{ //如果已定位
             LCD_write_char(00JD_a); //显示经度
for(i=0;i<10;i++){
  LCD_write_char(i+10JD[i]);
}
LCD_write_char(01WD_a); //显示纬度
LCD_write_char(11‘ ‘);
for(i=0;i<9;i++){
LCD_write_char(i+21WD[i]);
}
}
LCD_write_char(140use_sat[0]); //显示接收卫星数
LCD_write_char(150use_sat[1]);
buf_full&=~0x04;
dsp_count=0;
}
}
else{ //页面2
if(buf_full|0x01){ //GGA语句
buf_full&=~0x01;
dsp_count=0;
}
if(buf_full|0x02){
buf_full&=~0x02;
dsp_count=0;
}
if(buf_full|0x04){ //RMC语句
Bhour=((time[0]-0x30)*10+time[1]-0x30)+TIME_AREA;
if(Bhour>=24){
Bhour-=24;
}else if(Bhour<0){
Bhour+=24;
}
LCD_write_char(01date[4]);
LCD_write_char(11date[5]);
LCD_writ

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      20731  2016-01-06 15:59  gps数据分离\GPS\1602

     文件       8501  2016-01-06 14:45  gps数据分离\GPS\1602.c

     文件       3686  2016-01-06 13:28  gps数据分离\GPS\1602.h

     文件       6300  2016-01-06 15:59  gps数据分离\GPS\1602.hex

     文件      16863  2016-01-06 14:45  gps数据分离\GPS\1602.LST

     文件      29095  2016-01-06 15:59  gps数据分离\GPS\1602.M51

     文件      25346  2016-01-06 14:45  gps数据分离\GPS\1602.OBJ

     文件       1140  2016-01-06 15:59  gps数据分离\GPS\1602.Opt

     文件        421  2016-01-06 15:59  gps数据分离\GPS\1602.plg

     文件       1990  2016-01-06 15:04  gps数据分离\GPS\1602.Uv2

    .......      1141  2016-01-06 15:59  gps数据分离\GPS\1602_Opt.Bak

    .......         0  2016-01-06 13:01  gps数据分离\GPS\1602_Uv2.Bak

     文件    1109623  2016-01-03 14:27  gps数据分离\对于GPS模块数据接收和提取的问题分析 - telezhaohu的日志 - 电子工程世界-论坛.pdf

     目录          0  2016-01-06 15:59  gps数据分离\GPS

     目录          0  2016-01-06 16:12  gps数据分离

----------- ---------  ---------- -----  ----

              1224837                    15


评论

共有 条评论