前言

(末尾附文件)

通常的导航仪器主要有两种:陀螺罗经和磁罗盘。对地磁场测量方向的仪器叫做磁罗盘。我国发明指南针就是一个简易的磁罗盘,对整个人类社会发展做出巨大贡献。在公元 50 年左右,磁石已经被运用到导航航啦,并且研制出了司南。在公元 960-1127 年时候,支撑是的指南针——指南龟被研制出来。到 20 世纪初,随着工业的发展,罗盘制造工艺也得到了飞速的发展,材料的选择和机械制造使得罗盘的性能有了显著地提高。尤其是是机械式磁罗盘,现在某些情况下依然使用机械式磁罗盘 。到了20世纪出,陀螺罗盘的问世,对罗盘又是一场革命。罗盘感应这地球的自转,磁性物质对其没有影响。使得陀螺罗盘的标度盘非常稳定,读取数据更加精确。当代GPS虽然有广泛的应用,但是信号经常被物体所遮挡,使其精度大打折扣。有效性也大大降低。数字电子罗盘系统则将填补这一个不足,采用地磁场的工作原理,无论何时何地磁场的水平分量永远指向地磁北极,对GPS信号进行有效补偿。
随着科技发展和道路建设完善,汽车会给人们生活极大方便,汽车将会普及在我们生活中。电子罗盘定向系统将会出现每一辆汽车里;届时很多人会开自己的车旅游,回家,谈生意等等,当置于一个陌生的环境中,导航定向对于行车安全非常重要。所以,迫切需要研究出一种低功耗,便于携带,内置磁场感应器,系统稳定,并且能完成精确定向的微系统,而本课题设计就是研究出一个数字电子罗盘,专门解决这个问题而产生的。

硬件设计

原理图设计 (此次设计采用 Beitian BN-880 双模GPS模块,带HMC5883L电子罗盘。)

程序设计

#include <reg52.h>
#include <string.h>
#include "gps.h"
#include "lcd12864.h"
#include "delay.h"uchar code init1[] = {"       GPS      "};
uchar code init2[] = {"    显示项目    "};
uchar code init3[] = {"GPS 初始化......"};
uchar code init4[] = {"搜索定位卫星...."};
u8 code beiwei[]     = "北纬";
u8 code nanwei[]     = "南纬";
u8 code dongjing[]   = "东经";
u8 code xijing[]     = "西经";
u8 code date[]       = "    年  月  日  ";
u8 code speed[]      = "速度: ";
u8 code jie[]        = "节";
u8 xdata rev_buf[80];        //接收缓存
u8 xdata num = 0;
u8 error_num = 0;
bit rev_start = 0;     //接收开始标志
bit rev_stop  = 0;     //接收停止标志
bit gps_flag  = 0;      //GPS处理标志static u8 GetComma(u8 num,s8 *str)
{u8 i,j = 0;u16 len=strlen(str);for(i = 0;i < len;i ++){if(str[i] == ',')j++;if(j == num)return i + 1; }return 0;
}
void displaytime(void)//显示GPS时间函数
{u8 tmp; u8 hour;tmp = GetComma(9,rev_buf);Lcd_DispLine(0,0,date);  //年月日Lcd_DispLine(0,0,"20"); Lcd_SetPos(0,1);Lcd_WriteDat(rev_buf[tmp+4]);  Lcd_WriteDat(rev_buf[tmp+5]);  Lcd_SetPos(0,3); Lcd_WriteDat(rev_buf[tmp+2]); Lcd_WriteDat(rev_buf[tmp+3]);Lcd_SetPos(0,5);Lcd_WriteDat(rev_buf[tmp+0]);    Lcd_WriteDat(rev_buf[tmp+1]);  Lcd_SetPos(1,1);hour=((rev_buf[7]-0x30)*10+(rev_buf[8]-0x30)+8)%24;//时分秒Lcd_WriteDat(hour/10+0x30);Lcd_WriteDat(hour%10+0x30);Lcd_DispLine(1,2," :");Lcd_SetPos(1,3);Lcd_WriteDat(rev_buf[9]);Lcd_WriteDat(rev_buf[10]);Lcd_DispLine(1,4," :");Lcd_SetPos(1,5);Lcd_WriteDat(rev_buf[11]);Lcd_WriteDat(rev_buf[12]);
}
void displaywd(void) //显示GPS纬度函数
{u16 weidunum;Lcd_SetPos(2, 0);if(rev_buf[30]=='N') Lcd_DispLine(2, 0, beiwei);else if(rev_buf[30]=='S')  Lcd_DispLine(2, 0, nanwei);Lcd_SetPos(2, 2);Lcd_WriteDat(rev_buf[19]);Lcd_WriteDat(rev_buf[20]);Lcd_DispLine(2,3,"  ");Lcd_WriteDat(0xA1);Lcd_WriteDat(0xE3);   Lcd_WriteDat(rev_buf[21]);Lcd_WriteDat(rev_buf[22]);Lcd_WriteDat(0xA1);Lcd_WriteDat(0xE4);weidunum=(((rev_buf[24]-48)*10)+((rev_buf[25]-48)))*6;  if(weidunum>=100){ if(weidunum%100%10>=5){ Lcd_WriteDat(weidunum/100+0x30);Lcd_WriteDat(weidunum%100/10+1+0x30);}else{Lcd_WriteDat(weidunum/100+0x30);Lcd_WriteDat(weidunum%100/10+0x30);}}if(weidunum<100&&weidunum>=10){ if(weidunum%10>=5){ Lcd_WriteDat('0');Lcd_WriteDat(weidunum/10+1+0x30);}else{Lcd_WriteDat('0');Lcd_WriteDat(weidunum/10+0x30);}}if(weidunum<10){ if(weidunum>=5){ Lcd_WriteDat('0');Lcd_WriteDat('1');}else{Lcd_WriteDat('0');Lcd_WriteDat('0');}}
}
void displayjd(void) //显示GPS精度函数
{u8 i;u16 jingdunum;if(rev_buf[44]=='E') Lcd_DispLine(3,0,dongjing);else if(rev_buf[44]=='W')  Lcd_DispLine(3,0,xijing);Lcd_SetPos(3, 2);for(i=32;i<35;i++)Lcd_WriteDat(rev_buf[i]);Lcd_WriteDat(' ');Lcd_WriteDat(0xA1);Lcd_WriteDat(0xE3);Lcd_WriteDat(rev_buf[35]);Lcd_WriteDat(rev_buf[36]);Lcd_WriteDat(0xA1);Lcd_WriteDat(0xE4);jingdunum=(((rev_buf[38]-48)*10)+((rev_buf[39]-48)))*6; if(jingdunum>=100){ if(jingdunum%100%10>=5){ Lcd_WriteDat(jingdunum/100+0x30);Lcd_WriteDat(jingdunum%100/10+1+0x30);}else{Lcd_WriteDat(jingdunum/100+0x30);Lcd_WriteDat(jingdunum%100/10+0x30);}}if(jingdunum<100&&jingdunum>=10){ if(jingdunum%10>=5){ Lcd_WriteDat('0');Lcd_WriteDat(jingdunum/10+1+0x30);}else{Lcd_WriteDat('0');Lcd_WriteDat(jingdunum/10+0x30);}}if(jingdunum<10){ if(jingdunum>=5){ Lcd_WriteDat('0');Lcd_WriteDat('1');}else{Lcd_WriteDat('0');Lcd_WriteDat('0');}}
}
void displayspeed(void) //显示GPS速度函数
{u8 aa,bb,i;Lcd_DispLine(3,0,speed);  //速度Lcd_DispLine(3,6,jie);if (rev_stop)//GPS搜索到卫星{if(rev_buf[0]=='$'&&rev_buf[1]=='G'&&rev_buf[2]=='N'&&rev_buf[3]=='R'&&rev_buf[4]=='M'&&rev_buf[5]=='C'&&rev_buf[17]=='A'){if(RI==0){aa=GetComma(7,rev_buf);bb=GetComma(8,rev_buf)-3;if((bb-aa)==3){Lcd_DispLine(3,3,"00");Lcd_SetPos(3,4);}else if((bb-aa)==4){Lcd_SetPos(3,3);Lcd_WriteDat('0');} else if((bb-aa)==5){Lcd_SetPos(3,3);}                  for(i=aa;i<bb;i++){Lcd_WriteDat(rev_buf[i]); }}  }rev_stop  = 0;gps_flag = 0;}
}
void GPS_Init(void) //GPS初始化函数
{Lcd_DispLine(0, 0, init1);Lcd_DispLine(1, 0, init2);Lcd_DispLine(2, 0, init3);Lcd_DispLine(3, 0, init4);
}
void GPS_DisplayOne(void) //第一屏显示函数
{if (rev_stop)//GPS搜索到卫星{if(rev_buf[0]=='$'&&rev_buf[1]=='G'&&rev_buf[2]=='N'&&rev_buf[3]=='R'&&rev_buf[4]=='M'&&rev_buf[5]=='C'&&rev_buf[17]=='A'){if(RI==0){displaytime();displaywd();displayjd();error_num=0;}    }rev_stop  = 0;gps_flag = 0;}else//GPS卫星通讯断开{error_num++;DelayMS(50);} if(error_num==20){GPS_Init(); error_num=0;}
}

.

文件仅供参考:
链接:https://pan.baidu.com/s/1JAGteF7odF1i1nV3uoCIhQ
提取码:rkou

.

基于51单片机和GPS的经纬度时间速度航向系统设计定位电子罗盘原理图程序设计相关推荐

  1. 基于51单片机的智能化交通灯控制系统防止堵车疏散系统方案原理图程序设计

    硬件电路的设计 (末尾附文件) 3.1系统的功能分析及体系结构设计 3.1.1系统功能分析 本设计由STC89C52单片机电路+LED灯指示电路+红外避障传感器电路+lcd1602显示+电源电路组成. ...

  2. 基于51单片机的指纹识别锁管理门禁密码锁系统方案原理图程序设计

    硬件电路的设计 (附文件) 3.1系统的功能分析及体系结构设计 3.1.1系统功能分析 本系统由STC89C52单片机电路+指纹模块传感器电路+LCD1602液晶显示电路+继电器电路+按键电路+电源电 ...

  3. 【033】基于51单片机的步进电机角度测量与速度设定Proteus仿真设计

    一.压缩包资料内容 (1).基于51单片机的步进电机角度测量与速度设定proteus仿真设计一份: (2).基于51单片机的步进电机角度测量与速度设定proteus仿真设计keli源代码一份: (3) ...

  4. 基于51单片机的智能加湿器设计。 有仿真,程序,原理图,原文

    基于51单片机的智能加湿器设计. 有仿真,程序,原理图,原文. 可做实物. 通过DHT11实时监测环境温湿度,按键设定温湿度阈值,超限加湿器工作. 有水位检测电路,水位不足时候,报警提醒,防止干烧. ...

  5. 基于51单片机的八路电压表采集Proteus仿真(源码+仿真+原理图+全套资料)

    资料编号:110 程序语言:C语言 仿真软件:Proteus8.9版本 功能讲解如下: 利用单片机及其外围器件(A/D转换器等)实现一款简易电压表,实现以下功能: 1   电压表能够进行8路模拟电压测 ...

  6. 51、基于51单片机的GPS定位系统(GSM短信)

    毕设帮助.开题指导.技术解答(有偿)见文末. 目录 摘要 一.硬件方案 二.设计功能 三.实物图 四.原理图 五.程序 六.资料包括 摘要 1978年2月22日第一颗GPS试验卫星的入轨运行,开创了以 ...

  7. 24、基于51单片机公交车语音播报加时间显示系统设计

    摘 要 随着国民经济的快速发展,我国城市人口高度集中并大幅增长, 交通需求不断扩大导致城市道路交通拥挤,乘坐公交车出行是解决我国城市交通发展问题和实践低碳环保绿色出行的有效途径,随着近年来城市公交事业 ...

  8. 7、基于51单片机智能热水器温度水温水位检测控制系统设计

    毕设帮助.开题指导.技术解答(有偿)见文末. 目录 摘要 一.硬件方案 二.设计功能 三.实物图 四.原理图 五.PCB图 六.Proteus仿真 七.程序源码 八.资料包括 摘要 随着社会的发展,人 ...

  9. 29、基于51单片机简易电子琴(有存储功能)系统设计

    摘  要 随着社会的发展进步,音乐逐渐成为我们生活中很重要的一部分,有人曾说喜欢音乐的人不会向恶.我们都会抽空欣赏世界名曲,作为对精神的洗礼.本论文设计一个基于单片机的简易电子琴.我们对于电子琴如何实 ...

  10. 6、基于51单片机智能台灯坐姿定时+光线+红外感应系统设计(程序+原理图+参考论文+开题报告+任务书等)

    摘要 社会在不断进步,人类在不断追求,市场在不断变化,高科技应用含量决定着产品发展的新趋势和前景,智能化技术在电子产品领域的应用意义深远.随着电子产品的快速发展,家用电器也越来越偏向智能化,已经应用于 ...

最新文章

  1. 一个强迫症的Git 选择
  2. IT-标准化-系列-14.用-博客三剑客-写博客
  3. python 下划线转驼峰_json字符串中key值下划线命名转换为驼峰命名
  4. 动态更改echarts 高度_结合Echarts、Ajax技术实现可视化大屏监控 3D
  5. 结构专业规范大全_2019年一、二级注册结构师专业考试所用的规范、标准、规程...
  6. Hadoop节点热拔插
  7. 上线了!游戏企业防沉迷落实情况有了举报平台
  8. opencart 添加新模型
  9. 蓝桥杯 ADV-109 算法提高 征税程序
  10. ubuntu 1404部署tomcat7
  11. 最小二乘法求解线性回归模型及求解
  12. Linux60个小时速成
  13. python怎么设置为中文-python设置中文界面实例方法
  14. 科普:论文上附有的 arXiv 是干嘛的
  15. 部落优势服务器,魔兽怀旧服联盟优势服有哪些?怀旧服联盟优势服务器一览
  16. iOS笔试知识点集锦
  17. C#获取中国免费的天气信息
  18. ERP失败案例:业务流程再造失误
  19. IDA Pro7.0使用技巧总结
  20. Solar Tracker

热门文章

  1. 单片机c语言必背代码_stm32单片机编程用库函数好还是寄存器好?
  2. GoF的23种设计模式
  3. 西南科技大学OJ题 平衡二叉树的判定1077
  4. IAR 软件激活步骤
  5. LESSON 10.3 Halving网格搜索
  6. 【Java】转义字符
  7. 微信小程序云函数 -- 腾讯云通用印刷体识别应用
  8. 藏文印刷体: 乌金体,又称有头体
  9. Swift和Object-C的区别和优缺点
  10. 音视频播放器—快进快退及逐帧播放