日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

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

發布時間:2023/12/14 windows 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于51单片机和GPS的经纬度时间速度航向系统设计定位电子罗盘原理图程序设计 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

(末尾附文件)

通常的導航儀器主要有兩種:陀螺羅經和磁羅盤。對地磁場測量方向的儀器叫做磁羅盤。我國發明指南針就是一個簡易的磁羅盤,對整個人類社會發展做出巨大貢獻。在公元 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的经纬度时间速度航向系统设计定位电子罗盘原理图程序设计的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。