




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
年4月19日基于單片機GPS定位信息顯示系統(tǒng)設(shè)計文檔僅供參考目錄TOC\o"1-3"\h\u23631一、系統(tǒng)整體概述 25937(一)主要內(nèi)容 27167(二)系統(tǒng)方案的總體設(shè)計 225763二、硬件設(shè)計 35412(一)硬件總體結(jié)構(gòu)框圖 35898(二)單片機的介紹 4325231.STC89C52的簡介 4179472.STC89C52引腳圖 423330(三)GPS(UBLOXNEO6M)模塊介紹 4263931.UBLOXNEO6M簡介 412802.UBLOXNEO6M性能和管腳定義 515639(四)LCD(12864)模塊介紹 666221.LCD(12864)簡介 613002.LCD(12864)引腳介紹 6196513.LCD(12864)操作時序 628662(五)硬件電路PCB板的繪制 753861.原理圖的繪制 7167572.PCB板的繪制 7210423.實際硬件電路 825388三、軟件設(shè)計 95913(一)軟件設(shè)計思路 930063(二)模塊化軟件設(shè)計 982021.GPS接收模塊設(shè)計 9295892.單片機模塊設(shè)計 11210663.顯示模塊設(shè)計 1128636四、系統(tǒng)調(diào)試與結(jié)果 1322792(一)硬件調(diào)試 1319210(二)軟件調(diào)試 1321218(三)設(shè)計結(jié)果 1411895五、總結(jié) 16817參考文獻(xiàn) 1726296附錄 18一、系統(tǒng)整體概述(一)主要內(nèi)容在學(xué)習(xí)C51系列單片機和GPS定位原理以及GPS相關(guān)知識的理論知識基礎(chǔ)上,我們需要在種類繁多的單片機和GPS類型中選擇合適的單片機和GPS模塊,GPS模塊的作用是用來接收衛(wèi)星信號然后提取相應(yīng)的信息,單片機作為本次設(shè)計系統(tǒng)的控制核心,對GPS模塊接收到的信息進(jìn)行處理,然后用液晶顯示屏實時顯示預(yù)設(shè)的數(shù)據(jù)信息。系統(tǒng)的具體實現(xiàn)主要由軟硬件設(shè)計結(jié)合完成。硬件設(shè)計核心是單片機最小系統(tǒng)的設(shè)計,然后在最小系統(tǒng)的基礎(chǔ)上設(shè)計本次設(shè)計所需的外圍電路,借助成品GPS模塊,完成硬件電路的焊接,該設(shè)計硬件電路設(shè)計并不復(fù)雜,而且體積小便于攜帶。軟件設(shè)計的核心內(nèi)容是實現(xiàn)GPS模塊與單片機的通信進(jìn)而完成系統(tǒng)設(shè)計的要求,因為模塊化設(shè)計具有功能清晰、調(diào)試方便等優(yōu)點,而且在不同平臺上移植方便,因此這次設(shè)計的思路是采用模塊化設(shè)計,整個軟件開發(fā)環(huán)境用Keil軟件,采用C語言編程,硬件則為使用AltiumDesigner。(二)系統(tǒng)方案的總體設(shè)計本次設(shè)計的目標(biāo)是要在單片機的基礎(chǔ)上完成GPS定位信息顯示系統(tǒng)設(shè)計。根據(jù)設(shè)計預(yù)設(shè)的要求,我們設(shè)計是以單片機為控制核心,控制GPS接收模塊,最后利用液晶顯示設(shè)備就能夠?qū)崿F(xiàn)系統(tǒng)設(shè)計目標(biāo)。市場上單片機種類很多,C51系列單片機,STM系列單片機等等。經(jīng)過考慮單片機的普適性、所具備的功能、具體I/0口的性能以及價格是否經(jīng)濟實用等因素,本次設(shè)計采用C51系列單片機。系統(tǒng)整體是由硬件設(shè)計和軟件設(shè)計兩部分設(shè)計而成,采用C51系列單片機、GPS定位模塊、LCD液晶顯示模塊設(shè)計而成。硬件設(shè)計主要由單片機(STC89C52)、GPS模塊(UBLOXNEO6M)、LCD12864液晶顯示模塊等組成;接收GPS模塊傳送的數(shù)據(jù)信息是軟件設(shè)計的重點,進(jìn)而獲得當(dāng)前所處位置的經(jīng)緯度、航向和海拔等信息。二、硬件設(shè)計(一)硬件總體結(jié)構(gòu)框圖硬件總體結(jié)構(gòu)框圖如圖2-1所示。液晶顯示電路STC89C52GPS接收模塊GPS信號液晶顯示電路STC89C52GPS接收模塊GPS信號電源電源圖2-1硬件總體結(jié)構(gòu)框圖本次設(shè)計系統(tǒng)的硬件電路主要由下面幾部分構(gòu)成:第一,接收模塊電路。GPS模塊負(fù)責(zé)鎖定衛(wèi)星,然后把信息傳送給單片機。第二,控制模塊電路。以STC89C52單片機為控制核心,讀取GPS模塊傳送的數(shù)據(jù),然后把讀取的數(shù)據(jù)送到液晶顯示屏即實現(xiàn)了單片機的控制作用。第三,液晶顯示電路。51單片機控制液晶顯示電路,在液晶顯示屏進(jìn)而能夠顯示GPS模塊讀取的數(shù)據(jù)信息。第四,電源部分電路。整個系統(tǒng)的正常工作需要電源部分為其提供電源。另外,硬件電路中還會涉及一些使單片機正常工作的外圍電路,以保證單片機正常工作。(二)單片機的介紹1.STC89C52的簡介STC89C52是STC公司生產(chǎn)的一種控制器。MCS-51內(nèi)核是該單片機的經(jīng)典內(nèi)核,而且在STC89C52上做了很多的創(chuàng)新,使其不但具有傳統(tǒng)51單片機所具有的功能,而且引進(jìn)了很多創(chuàng)新的功能,使STC89C52的應(yīng)用范圍更加廣泛。STC89C52具體的使用標(biāo)準(zhǔn)能夠查閱相關(guān)書籍和芯片技術(shù)手冊,更多資料不再說明。2.STC89C52引腳圖圖2-2STC89C52引腳圖(三)GPS(UBLOXNEO6M)模塊介紹1.UBLOXNEO6M簡介本次課程設(shè)計使用的GPS(UBLOXNEO6M)模塊是一個完整的成品接收模塊,具有高性能、低功耗的優(yōu)點,能滿足我們本次設(shè)計定位的要求。GPS模塊實物圖如圖2-2所示。圖2-3GPS模塊實物2.UBLOXNEO6M性能和管腳定義定位時間(TTFF):精準(zhǔn)的定位時間和當(dāng)前環(huán)境有關(guān)。(2)靈敏度MinLypMax單位跟蹤-160dBm捕獲-147dBm表2-4GPS靈敏度(3)精度2D平面:2.5m[平均]漂移:<0.02m/s2D平面:2m[平均],有WAAS輔助授時精度:1us(4)UBLOXNEO6M管腳定義見表2-5所示。序號名稱I/O描述特性1VCC1模塊主電源,直流輸入DC3.0V-5.2V2GND0接地3TX0UART接口OH>=2.1375V,OL<=0.7125V4RX1UART接口3.15V>=OH>=1.995V-0.3V<=OL<=0.855V5PPS0模塊定位脈沖OH>=2.1375V,OL<=0.7125V表2-5GPS管腳定義(更加詳細(xì)資料可參考UBLOXNEO6M數(shù)據(jù)手冊)(四)LCD(12864)模塊介紹1.LCD(12864)簡介LCD(12864)液晶顯示模塊類型屬于漢字圖形類型的液晶模塊,可在顯示屏上顯示數(shù)字、符號和漢字等字符。可與CPU直接連接,設(shè)有串行和并行這兩種控制方式。具有多種功能可供使用,具體使用哪種功能可查閱芯片資料。2.LCD(12864)引腳介紹D0~D7是數(shù)據(jù)口,RS(CS)是數(shù)據(jù)/命令選擇端(串片選),R/W(SID)端口是讀/寫選擇端(串?dāng)?shù)據(jù)口),E(SCLK)是使能信號(串同步時鐘信號),PSB端口是串/并選擇端口,RST是我們熟悉而且常見的復(fù)位端口(低電平有效),BLA與BLK則是并不常見的背光電源正極端和負(fù)極端。LCD(12864)的引腳如圖2-6所示。圖2-6LCD12864引腳3.LCD(12864)操作時序12864控制可使用兩種時序,分別為并行操作時序和串行操作時序。(具體內(nèi)容太多,可參考12864數(shù)據(jù)手冊。)(五)硬件電路PCB板的繪制大二時由于自學(xué)過AltiumDesigner,又參加飛思卡爾智能車競賽繪制電路板,加上平時經(jīng)常繪制一些較為復(fù)雜的PCB,因此此系統(tǒng)所有硬件由AltiumDesigner設(shè)計完成。1.原理圖的繪制根據(jù)系統(tǒng)要求繪制的硬件原理圖如圖2-6所示。其中包括了單片機最小系統(tǒng)電路(復(fù)位、震蕩、程序下載接口等電路)、電源電路、12864顯示屏接口電路和led指示燈電路。圖2-7硬件電路原理圖2.PCB板的繪制根據(jù)系統(tǒng)要求及原理圖繪制的PCB圖如圖2-8所示。圖2-8硬件電路PCB圖3.實際硬件電路 由于資金原因,設(shè)計好的PCB并沒有送某寶賣家打印,實際電路板由洞洞板焊接而成,如圖2-9所示。圖2-9實際硬件圖三、軟件設(shè)計(一)軟件設(shè)計思路實現(xiàn)GPS接收模塊與單片機的通信是軟件設(shè)計的核心模塊,然后能夠?qū)崿F(xiàn)在液晶顯示屏上實時顯示當(dāng)前的數(shù)據(jù)信息。整個編程是用keil軟件,采用C語言編程。功能清晰、調(diào)試方便等特點是軟件模塊化設(shè)計所具有的優(yōu)點,因此采用模塊化設(shè)計,GPS數(shù)據(jù)接收模塊、單片機模塊、LCD模塊和實時顯示模塊是軟件程序設(shè)計的四個組成部分。程序的設(shè)計思路是GPS模塊接收信息,然后向單片機發(fā)送固定格式的數(shù)據(jù),單片機經(jīng)過串口接收數(shù)據(jù),并對數(shù)據(jù)進(jìn)行解析,最終實現(xiàn)在LCD顯示屏上顯示時間、經(jīng)緯度和高度等信息。詳細(xì)源代碼見附錄。模塊化軟件設(shè)計1.GPS接收模塊設(shè)計首先在搜索衛(wèi)星時顯示“華水課程設(shè)計”、“江濤12712”和“GPS顯示項目”,然后進(jìn)行識別判斷GPS模塊收到的信息是否完成發(fā)送給單片機的操作,若有信息發(fā)送給單片機,但接收到的信息我們并不是全部需要,因此需要進(jìn)行識別判斷相應(yīng)語句的操作,然后把需要的信息存入到GPRMC語句中。GPS接收模塊程序流程圖如圖3-1所示。結(jié)束開始顯示界面初始化GPRMC判斷有效性分析緯度、經(jīng)度、速度、海拔、航向、高度、時間、日期提取數(shù)據(jù)存儲和處理結(jié)束開始顯示界面初始化GPRMC判斷有效性分析緯度、經(jīng)度、速度、海拔、航向、高度、時間、日期提取數(shù)據(jù)存儲和處理圖3-1GPS接收模塊流程圖2.單片機模塊設(shè)計GPS模塊接收到數(shù)據(jù)信息后,需要把信息傳送到單片機,單片機經(jīng)過分析以及對數(shù)據(jù)信息進(jìn)行篩選處理,然后送到液晶顯示屏實時顯示相應(yīng)的位置信息,具體主要經(jīng)過兩個界面顯示。單片機模塊程序設(shè)計流程圖如圖3-2所示。開始接收GPS模塊數(shù)據(jù)單片機模塊設(shè)置初始化數(shù)據(jù)處理數(shù)據(jù)寫入STC89C52進(jìn)行顯示開始接收GPS模塊數(shù)據(jù)單片機模塊設(shè)置初始化數(shù)據(jù)處理數(shù)據(jù)寫入STC89C52進(jìn)行顯示結(jié)束圖3-2單片機模塊流程圖3.顯示模塊設(shè)計GPS模塊接收信息后,把信息傳送給單片機,單片機首先對數(shù)據(jù)進(jìn)行篩選和處理等操作,然后就能夠把信息送到液晶顯示模塊,就實現(xiàn)了在液晶顯示屏實時顯示當(dāng)前位置我們所需的信息。液晶顯示屏主要分為兩個界面顯示,界面一實時顯示當(dāng)前的日期、時間和經(jīng)緯度信息,界面二實時顯示當(dāng)前所處位置的速度、航向、高度和海拔。顯示模塊程序設(shè)計流程圖如圖3-3所示。界面一顯示設(shè)置界面二顯示設(shè)置開始初始化設(shè)置分頁顯示結(jié)束界面一顯示設(shè)置界面二顯示設(shè)置開始初始化設(shè)置分頁顯示結(jié)束圖3-3顯示模塊流程圖四、系統(tǒng)調(diào)試與結(jié)果(一)硬件調(diào)試檢測電路設(shè)計和工藝設(shè)計等方面的故障是硬件調(diào)試的主要任務(wù)。1.檢查電路設(shè)計中所有元件的焊接以及引腳是否有故障。首先用萬用表逐個檢查焊點,目的是檢測是否出現(xiàn)短路和斷路故障。然后接入電源,觀察電源指示燈的工作狀態(tài),硬件電路加入電源指示燈能夠方便的檢測硬件電路焊接是否正常。2.進(jìn)行仿真操作。用單片機控制仿真操作,目的是用來檢查系統(tǒng)所涉及的接口是否達(dá)到設(shè)計的要求。把程序下載到單片機上。利用Keil軟件,將已經(jīng)完成的程序進(jìn)行選擇生成頭文件的操作,然后把文件下載到STC89C52單片機。4.檢查單個模塊。經(jīng)過下載51單片機自帶的程序到單片機,然后查看液晶顯示屏(LCD12864)的顯示情況判斷單個模塊是否工作正常。(二)軟件調(diào)試軟件調(diào)試時我們是使用Keil軟件進(jìn)行仿真和調(diào)試,能夠檢查程序是否出錯,而且同時能夠糾正程序的錯誤,若硬件設(shè)計有問題,就能夠檢查出硬件的故障然后我們就能夠進(jìn)行修改。因為程序設(shè)計是模塊化的,因此在調(diào)試時能夠逐個模塊進(jìn)行調(diào)試,若模塊調(diào)試結(jié)果正常,就能夠進(jìn)行整個程序的調(diào)試。特別注意查看各個模塊的語法正確而參數(shù)設(shè)計不正確的情況。1.檢查已經(jīng)編譯完成的LCD(12864)液晶顯示模塊程序,查看液晶顯示屏能否正常顯示。2.檢查已經(jīng)編譯完成的GPS模塊程序,查看液晶顯示屏顯示的信息和預(yù)設(shè)結(jié)果的差距進(jìn)而修改GPS接收模塊程序。3.運行整個程序,觀察液晶顯示屏的結(jié)果是否實時顯示當(dāng)前位置我們所設(shè)想的信息,經(jīng)過顯示效果進(jìn)行相應(yīng)的軟硬件修改。(三)設(shè)計結(jié)果軟件調(diào)試初各個模塊工作正常,但一旦運行整個程序,液晶顯示屏在GPS搜索衛(wèi)星界面后出現(xiàn)亂碼,經(jīng)過多次的調(diào)試和檢測,原來是晶振不符合要求,更換晶振后,再次進(jìn)行調(diào)試和檢測,最終液晶顯示屏顯示了預(yù)想的結(jié)果,即實現(xiàn)了實時顯示當(dāng)前位置的日期、時間、緯度、經(jīng)度等信息。調(diào)試結(jié)果初始化界面如圖4-1所示。圖4-1初始化界面把當(dāng)前位置液晶顯示屏顯示的信息與谷歌地圖顯示的位置信息進(jìn)行對比,日期、時間非常精確,但經(jīng)度與緯度出現(xiàn)了誤差。究其原因:一是由于本次設(shè)計所采用的GPS接收模塊精度并不高,不能進(jìn)行精確定位接收;二是在實驗中不可避免會受障礙物、天氣等因素的干擾,試驗環(huán)境并不理想;三是在谷歌地圖中我們手動點選的位置沒有和GPS測量位置達(dá)到同步??墒钦`差是在誤差范圍內(nèi),我們是能夠接受的。因此本次設(shè)計是有意義的,可靠的。即實現(xiàn)了實時顯示當(dāng)前位置的數(shù)據(jù)信息。界面一和二顯示結(jié)果如圖5-2,5-3所示。圖4-2界面一顯示結(jié)果圖4-3界面二顯示結(jié)果五、總結(jié)本次課程設(shè)計以單片機為控制核心,控制GPS接收模塊,GPS模塊把接收到的信息傳送給單片機,單片機把數(shù)據(jù)信息送到液晶顯示屏顯示,實現(xiàn)實時顯示當(dāng)前位置的數(shù)據(jù)信息。經(jīng)過完成本次的課程設(shè)計,做到了單片機的理論知識和實踐相結(jié)合。我們在初學(xué)習(xí)單片機時,曾把精力主要放在學(xué)習(xí)單片機的內(nèi)部結(jié)構(gòu)上??上攵瑢W(xué)起來非常痛苦。實踐證明,這不是正確的方法,我們應(yīng)該把精力放在單片機的應(yīng)用上,在掌握應(yīng)用過程中我們發(fā)現(xiàn)也逐步掌握了單片機的內(nèi)部結(jié)構(gòu),也學(xué)會了充分地利用了單片機的資源。經(jīng)過學(xué)習(xí)單片機知識,進(jìn)而了解了計算機的原理和結(jié)構(gòu)。計算機的功能主要體現(xiàn)在控制功能上,比如現(xiàn)在流行的智能家居領(lǐng)域也是單片機控制功能的體現(xiàn)。經(jīng)過本次的單片機課程設(shè)計,不但學(xué)習(xí)了GPS接收模塊的知識、單片機和液晶顯示模塊相關(guān)知識,也提高了自己的焊接能力,使自己明確了拿到一個課題自己應(yīng)該從哪著手去做,使自己有明確的系統(tǒng)設(shè)計思路,也懂得了當(dāng)實驗結(jié)果不理想時,該如何去糾錯,如何去尋找問題,解決問題。參考文獻(xiàn)[1]數(shù)字電子技術(shù)基礎(chǔ)/巖石主編;清華大學(xué)電子學(xué)教研組編.-5版.-北京:高等教育出版社,.5[2]模擬電子技術(shù)基礎(chǔ)/童詩白,華成英主編;清華大學(xué)電子學(xué)教研組編.-4版.-北京:高等教育出版社,.5[3]潘談.基于STC89C58芯片的小型GPS船舶航跡儀的設(shè)計[J].艦船科學(xué)技術(shù),,(12):124-127.[4]杜俊,董松.基于單片機的GPS定位系統(tǒng)的設(shè)計與實現(xiàn)[J].甘肅科技,,(19):25-27.[5]張亮紅,劉文怡,王紅亮.基于單片機的GPS定位系統(tǒng)的設(shè)計與實現(xiàn)[J].電子器件,,(5):1187-1191.[6]譚昕.基于單片機的GPS導(dǎo)航裝置分析[J].中國新通信,,(18):115.[7]劉穎.基于單片機的GPS導(dǎo)航裝置的設(shè)計研究[J].科技展望,,(18):157.[8]高芳.單片機在GPS系統(tǒng)中的應(yīng)用[J].電子制作,,(19):57.[9]GuangLiLong.DesignofGPSbasedonSingleChipMicrocomputer[J].TransTech期刊,:2192-2195.附錄系統(tǒng)設(shè)計部分代碼:Main.c//======================================================================//工程名稱: GPS模塊測試程序//文件名稱:main.c//功能描述: GPS模塊接收定位信息,在LCD上顯示//組成文件: main.cLCD.cGPS.cdisplay.c//頭文件:LCD.hGPS.hdisplay.h//程序分析: GPS模塊經(jīng)過串口向單片機發(fā)送固定格式的數(shù)據(jù)// 單片機的串口接收到數(shù)據(jù)后,進(jìn)行解析,在LCD上顯示// 定位信息包括:日期時間,經(jīng)緯度,速度,角度,高度 //======================================================================#include<reg52.h>#include<stdio.h>#include<string.h>#include"GPS.h"#include"LCD.h"#include"display.h"sbitled1=P2^3;//接收數(shù)據(jù)指示燈sbitled2=P2^4;//GPRMC數(shù)據(jù)有效指示燈sbitled3=P2^5;//GPGGA數(shù)據(jù)有效指示燈#defineREV_YESled1=0#defineREV_NOled1=1#defineRMC_YESled2=0#defineRMC_NOled2=1#defineGGA_YESled3=0#defineGGA_NOled3=1charxdatarev_buf[80];//接收緩存ucharxdatarev_start=0;//接收開始標(biāo)志ucharxdatarev_stop=0;//接收停止標(biāo)志ucharxdatagps_flag=0;//GPS處理標(biāo)志ucharxdatachange_page=0;//換頁顯示標(biāo)志ucharxdatanum=0;//externGPS_INFOGPS;//在display.c中定義,使用時要加externucharcodeinf[]={"華水江濤"};voidUart_Init(void){ TMOD=0x21; //00100001 PCON=0X00; TH0=0x3c; TL0=0xb0; TH1=0xfd; // TL1=0xfd; // TR1=1;//開啟定時器1 REN=1;//允許接收數(shù)據(jù) SM0=0; SM1=1; TI=0; RI=0; EA=1;//開總中斷 ES=1;//串口1中斷允許 ET0=1;//定時器1中斷允許}/****************************************主函數(shù) /****************************************/voidmain(void){ ucharerror_num=0; Uart_Init();//初始化串口 Lcd_Init(); //初始化LCD GPS_Init();//初始化GPS rev_stop=0; REV_NO; while(1) { if(1)//如果接收完一行 { TR0=1;//開啟定時器 REV_YES; if(change_page%2==1)//換頁 { if(GPS_GGA_Parse(rev_buf,&GPS))//解析GPGGA { GGA_YES; GPS_DisplayTwo();//顯示第二頁信息 error_num=0; gps_flag=0; rev_stop=0; REV_NO; } else { error_num++; if(error_num>=20)//如果數(shù)據(jù)無效超過20次 { GGA_NO; error_num=20; GPS_Init();//返回初始化 } gps_flag=0; rev_stop=0; REV_NO; } } else { if(GPS_RMC_Parse(rev_buf,&GPS))//解析GPRMC { RMC_YES; GPS_DisplayOne(); //顯示GPS第一頁信息 error_num=0; gps_flag=0; rev_stop=0; led1=1; } else { error_num++; if(error_num>=20)//如果數(shù)據(jù)無效超過20次 { RMC_NO; error_num=20; GPS_Init();//返回初始化 } gps_flag=0; rev_stop=0; REV_NO; } } } }}//定時器0服務(wù)函數(shù)voidtimer0(void)interrupt1{ staticucharcount=0; TH0=0x3c; TL0=0xb0; count++; if(count==200)//2*5秒鐘 { count=0; change_page++;//換頁 if(change_page==10) change_page=0; } }//串口接受中斷服務(wù)函數(shù)voidUart_Receive(void)interrupt4{ ucharch; ES=0; led1=~led1; if(RI) { ch=SBUF; if((ch=='$')&&(gps_flag==0))//如果收到字符'$',便開始接收 { rev_start=1; rev_stop=0; } if(rev_start==1)//標(biāo)志位為1,開始接收 { rev_buf[num++]=ch;//字符存到數(shù)組中 if(ch=='\n')//如果接收到換行 { rev_buf[num]='\0'; rev_start=0; rev_stop=1; gps_flag=1; num=0; } } } RI=0; //RI清0,重新接收 ES=1; }===============================================================================GPS.c#include"GPS.h"#include"LCD.h"#include<string.h>ucharcodeinit1[]={"華水課程設(shè)計"};ucharcodeinit2[]={"江濤12712"};ucharcodeinit3[]={"GPS顯示項目"};ucharcodeinit4[]={"搜索定位衛(wèi)星"};staticucharGetComma(ucharnum,char*str);staticdoubleGet_Double_Number(char*s);staticfloatGet_Float_Number(char*s);staticvoidUTC2BTC(DATE_TIME*GPS);voidGPS_Init(void){ Lcd_DispLine(0,0,init1); Lcd_DispLine(1,0,init2); Lcd_DispLine(2,0,init3); Lcd_DispLine(3,0,init4);}intGPS_RMC_Parse(char*line,GPS_INFO*GPS){ ucharch,status,tmp; floatlati_cent_tmp,lati_second_tmp; floatlong_cent_tmp,long_second_tmp; floatspeed_tmp; char*buf=line; ch=buf[5]; status=buf[GetComma(2,buf)]; if(1)//如果第五個字符是C,($GPRMC) { if(status=='A')//如果數(shù)據(jù)有效,則分析 { GPS->NS=buf[GetComma(4,buf)]; GPS->EW=buf[GetComma(6,buf)]; GPS->latitude=Get_Double_Number(&buf[GetComma(3,buf)]); GPS->longitude=Get_Double_Number(&buf[GetComma(5,buf)]); GPS->latitude_Degree=(int)GPS->latitude/100;//分離緯度 lati_cent_tmp=(GPS->latitude-GPS->latitude_Degree*100); GPS->latitude_Cent=(int)lati_cent_tmp; lati_second_tmp=(lati_cent_tmp-GPS->latitude_Cent)*60; GPS->latitude_Second=(int)lati_second_tmp; GPS->longitude_Degree=(int)GPS->longitude/100; //分離經(jīng)度 long_cent_tmp=(GPS->longitude-GPS->longitude_Degree*100); GPS->longitude_Cent=(int)long_cent_tmp; long_second_tmp=(long_cent_tmp-GPS->longitude_Cent)*60; GPS->longitude_Second=(int)long_second_tmp; speed_tmp=Get_Float_Number(&buf[GetComma(7,buf)]);//速度(單位:海里/時) GPS->speed=speed_tmp*1.85;//1海里=1.85公里 GPS->direction=Get_Float_Number(&buf[GetComma(8,buf)]);//角度 GPS->D.hour=(buf[7]-'0')*10+(buf[8]-'0'); //時間 GPS->D.minute=(buf[9]-'0')*10+(buf[10]-'0'); GPS->D.second=(buf[11]-'0')*10+(buf[12]-'0'); tmp=GetComma(9,buf); GPS->D.day=(buf[tmp+0]-'0')*10+(buf[tmp+1]-'0');//日期 GPS->D.month=(buf[tmp+2]-'0')*10+(buf[tmp+3]-'0'); GPS->D.year=(buf[tmp+4]-'0')*10+(buf[tmp+5]-'0')+; UTC2BTC(&GPS->D); return1; } } return0;}intGPS_GGA_Parse(char*line,GPS_INFO*GPS){ ucharch,status; char*buf=line; ch=buf[4]; status=buf[GetComma(2,buf)]; if(ch=='G')//$GPGGA { if(status!=',') { GPS->height_sea=Get_Float_Number(&buf[GetComma(9,buf)]); GPS->height_ground=Get_Float_Number(&buf[GetComma(11,buf)]); return1; } } return0;}staticfloatStr_To_Float(char*buf){ floatrev=0; floatdat; intinteger=1; char*str=buf; inti; while(*str!='\0') { switch(*str) { case'0': dat=0; break; case'1': dat=1; break; case'2': dat=2; break; case'3': dat=3; break; case'4': dat=4; break; case'5': dat=5; break; case'6': dat=6; break; case'7': dat=7; break; case'8': dat=8; break; case'9': dat=9; break; case'.': dat='.'; break; } if(dat=='.') { integer=0; i=1; str++; continue; } if(integer==1) { rev=rev*10+dat; } else { rev=rev+dat/(10*i); i=i*10; } str++; } returnrev;} staticfloatGet_Float_Number(char*s){ charbuf[10]; uchari; floatrev; i=GetComma(1,s); i=i-1; strncpy(buf,s,i); buf[i]=0; rev=Str_To_Float(buf); returnrev; }staticdoubleStr_To_Double(char*buf){ doublerev=0; doubledat; intinteger=1; char*str=buf; inti; while(*str!='\0') { switch(*str) { case'0': dat=0; break; case'1': dat=1; break; case'2': dat=2; break; case'3': dat=3; break; case'4': dat=4; break; case'5': dat=5; break; case'6': dat=6; break; case'7': dat=7; break; case'8': dat=8; break; case'9': dat=9; break; case'.': dat='.'; break; } if(dat=='.') { integer=0; i=1; str++; continue; } if(integer==1) { rev=rev*10+dat; } else { rev=rev+
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)村出售地皮合同范本
- 出口定金合同范本
- 業(yè)務(wù)用車租賃合同范本
- 入股果園合同范例
- 第五單元第14課文藝復(fù)興運動2023-2024學(xué)年九年級上冊歷史同步教學(xué)設(shè)計(部編版)
- 專利實施使用合同范本
- epc項目銷售合同范本
- 2024年溫州龍港農(nóng)商銀行招聘筆試真題
- 借條合同范本范文
- 保安顧問合同范本
- 新風(fēng)施工合同
- 2025-2030年園藝修剪機器人行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報告
- 人教版四年級數(shù)學(xué)下冊第四單元測試卷(含答案)
- 2025年湖北省技能高考(建筑技術(shù)類)《建筑工程測量》模擬練習(xí)試題庫(含答案)
- 2024-2027年中國網(wǎng)絡(luò)安全評估行業(yè)發(fā)展監(jiān)測及投資戰(zhàn)略研究報告
- 失智老年人照護(hù)X證書制度試點工作養(yǎng)老護(hù)理職業(yè)和失智老人照護(hù)員工種的發(fā)展講解
- 2025年湖南食品藥品職業(yè)學(xué)院高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 企業(yè)數(shù)字化轉(zhuǎn)型戰(zhàn)略-深度研究
- 新種子法律法規(guī)培訓(xùn)講解
- 2025年東營科技職業(yè)學(xué)院高職單招數(shù)學(xué)歷年(2016-2024)頻考點試題含答案解析
- 2025-2030年中國民用通信天線行業(yè)發(fā)展趨勢規(guī)劃研究報告
評論
0/150
提交評論