基于單片機(jī)GPS定位信息顯示系統(tǒng)設(shè)計(jì)_第1頁(yè)
基于單片機(jī)GPS定位信息顯示系統(tǒng)設(shè)計(jì)_第2頁(yè)
基于單片機(jī)GPS定位信息顯示系統(tǒng)設(shè)計(jì)_第3頁(yè)
基于單片機(jī)GPS定位信息顯示系統(tǒng)設(shè)計(jì)_第4頁(yè)
基于單片機(jī)GPS定位信息顯示系統(tǒng)設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩30頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、目錄一、系統(tǒng)整體概述2(一)主要內(nèi)容2(二)系統(tǒng)方案的總體設(shè)計(jì)2二、硬件設(shè)計(jì)3(一)硬件總體結(jié)構(gòu)框圖3(二)單片機(jī)的介紹41. STC89C52的簡(jiǎn)介42. STC89C52引腳圖4(三)GPS(UBLOX NEO 6M)模塊介紹41. UBLOX NEO 6M簡(jiǎn)介42. UBLOX NEO 6M性能和管腳定義5(四)LCD(12864)模塊介紹61. LCD(12864)簡(jiǎn)介62. LCD(12864)引腳介紹63. LCD(12864)操作時(shí)序6(五)硬件電路PCB板的繪制71. 原理圖的繪制72. PCB板的繪制73. 實(shí)際硬件電路8三、軟件設(shè)計(jì)9(一)軟件設(shè)計(jì)思路9(二)模塊化軟件設(shè)計(jì)

2、91. GPS接收模塊設(shè)計(jì)92. 單片機(jī)模塊設(shè)計(jì)113. 顯示模塊設(shè)計(jì)11四、系統(tǒng)調(diào)試與結(jié)果13(一)硬件調(diào)試13(二)軟件調(diào)試13(三)設(shè)計(jì)結(jié)果14五、總 結(jié)16參考文獻(xiàn)17附錄18一、系統(tǒng)整體概述(一)主要內(nèi)容在學(xué)習(xí)C51系列單片機(jī)和GPS定位原理以及GPS相關(guān)知識(shí)的理論知識(shí)基礎(chǔ)上,我們需要在種類(lèi)繁多的單片機(jī)和GPS類(lèi)型中選擇合適的單片機(jī)和GPS模塊,GPS模塊的作用是用來(lái)接收衛(wèi)星信號(hào)然后提取相應(yīng)的信息,單片機(jī)作為本次設(shè)計(jì)系統(tǒng)的控制核心,對(duì)GPS模塊接收到的信息進(jìn)行處理,然后用液晶顯示屏實(shí)時(shí)顯示預(yù)設(shè)的數(shù)據(jù)信息。系統(tǒng)的具體實(shí)現(xiàn)主要由軟硬件設(shè)計(jì)結(jié)合完成。硬件設(shè)計(jì)核心是單片機(jī)最小系統(tǒng)的設(shè)計(jì),然后

3、在最小系統(tǒng)的基礎(chǔ)上設(shè)計(jì)本次設(shè)計(jì)所需的外圍電路,借助成品GPS模塊,完成硬件電路的焊接,該設(shè)計(jì)硬件電路設(shè)計(jì)并不復(fù)雜,而且體積小便于攜帶。軟件設(shè)計(jì)的核心內(nèi)容是實(shí)現(xiàn)GPS模塊與單片機(jī)的通信進(jìn)而完成系統(tǒng)設(shè)計(jì)的要求,因?yàn)槟K化設(shè)計(jì)具有功能清晰、調(diào)試方便等優(yōu)點(diǎn),而且在不同平臺(tái)上移植方便,所以這次設(shè)計(jì)的思路是采用模塊化設(shè)計(jì),整個(gè)軟件開(kāi)發(fā)環(huán)境用Keil軟件,采用C語(yǔ)言編程,硬件則為使用Altium Designer。(二)系統(tǒng)方案的總體設(shè)計(jì)本次設(shè)計(jì)的目標(biāo)是要在單片機(jī)的基礎(chǔ)上完成GPS定位信息顯示系統(tǒng)設(shè)計(jì)。根據(jù)設(shè)計(jì)預(yù)設(shè)的要求,我們?cè)O(shè)計(jì)是以單片機(jī)為控制核心,控制GPS接收模塊,最后利用液晶顯示設(shè)備就可以實(shí)現(xiàn)系統(tǒng)設(shè)

4、計(jì)目標(biāo)。市場(chǎng)上單片機(jī)種類(lèi)很多,C51系列單片機(jī),STM系列單片機(jī)等等。通過(guò)考慮單片機(jī)的普適性、所具備的功能、具體I/0口的性能以及價(jià)格是否經(jīng)濟(jì)實(shí)用等因素,本次設(shè)計(jì)采用C51系列單片機(jī)。系統(tǒng)整體是由硬件設(shè)計(jì)和軟件設(shè)計(jì)兩部分設(shè)計(jì)而成,采用C51系列單片機(jī)、GPS定位模塊、LCD液晶顯示模塊設(shè)計(jì)而成。硬件設(shè)計(jì)主要由單片機(jī)(STC89C52)、GPS模塊(UBLOX NEO 6M)、LCD12864液晶顯示模塊等組成;接收GPS模塊傳送的數(shù)據(jù)信息是軟件設(shè)計(jì)的重點(diǎn),進(jìn)而獲得當(dāng)前所處位置的經(jīng)緯度、航向和海拔等信息。二、硬件設(shè)計(jì)(一)硬件總體結(jié)構(gòu)框圖 硬件總體結(jié)構(gòu)框圖如圖2-1所示。液晶顯示電路 STC89

5、C52GPS接收模塊GPS信號(hào) 電源 圖2-1 硬件總體結(jié)構(gòu)框圖本次設(shè)計(jì)系統(tǒng)的硬件電路主要由下面幾部分構(gòu)成:第一,接收模塊電路。GPS模塊負(fù)責(zé)鎖定衛(wèi)星,然后把信息傳送給單片機(jī)。第二,控制模塊電路。以STC89C52單片機(jī)為控制核心,讀取GPS模塊傳送的數(shù)據(jù),然后把讀取的數(shù)據(jù)送到液晶顯示屏即實(shí)現(xiàn)了單片機(jī)的控制作用。第三,液晶顯示電路。51單片機(jī)控制液晶顯示電路,在液晶顯示屏進(jìn)而可以顯示GPS模塊讀取的數(shù)據(jù)信息。第四,電源部分電路。整個(gè)系統(tǒng)的正常工作需要電源部分為其提供電源。此外,硬件電路中還會(huì)涉及一些使單片機(jī)正常工作的外圍電路,以保證單片機(jī)正常工作。(二)單片機(jī)的介紹1. STC89C52的簡(jiǎn)介

6、STC89C52是STC公司生產(chǎn)的一種控制器。MCS-51內(nèi)核是該單片機(jī)的經(jīng)典內(nèi)核,而且在STC89C52上做了很多的創(chuàng)新,使其不僅具有傳統(tǒng)51單片機(jī)所具有的功能,而且引進(jìn)了很多創(chuàng)新的功能,使STC89C52的應(yīng)用范圍更加廣泛。STC89C52具體的使用標(biāo)準(zhǔn)可以查閱相關(guān)書(shū)籍和芯片技術(shù)手冊(cè),更多資料不再說(shuō)明。2. STC89C52引腳圖 圖2-2 STC89C52引腳圖(三)GPS(UBLOX NEO 6M)模塊介紹 1. UBLOX NEO 6M簡(jiǎn)介本次課程設(shè)計(jì)使用的GPS(UBLOX NEO 6M)模塊是一個(gè)完整的成品接收模塊,具有高性能、低功耗的優(yōu)點(diǎn),能滿(mǎn)足我們本次設(shè)計(jì)定位的要求。GPS模

7、塊實(shí)物圖如圖2-2所示。 圖2-3 GPS模塊實(shí)物2. UBLOX NEO 6M性能和管腳定義(1) 定位時(shí)間(TTFF):精準(zhǔn)的定位時(shí)間和當(dāng)前環(huán)境有關(guān)。 (2)靈敏度 Min Lyp Max 單位 跟蹤 -160 dBm 捕獲 -147 dBm表2-4 GPS靈敏度(3)精度2D平面:2.5m平均 漂移:<0.02m/s2D平面:2m平均,有WAAS輔助 授時(shí)精度:1us(4)UBLOX NEO 6M管腳定義見(jiàn)表2-5所示。 序號(hào) 名稱(chēng) I/O 描述 特性 1 VCC 1 模塊主電源,直流輸入 DC3.0V-5.2V 2 GND 0 接地 3 TX 0 UART接口OH>=2.1

8、375V,OL<=0.7125V 4 RX 1 UART接口 3.15V>=OH>=1.995V -0.3V<=OL<=0.855V 5 PPS 0 模塊定位脈沖OH>=2.1375V,OL<=0.7125V表2-5 GPS管腳定義(更加詳細(xì)資料可參考UBLOX NEO 6M數(shù)據(jù)手冊(cè))(四)LCD(12864)模塊介紹1. LCD(12864)簡(jiǎn)介L(zhǎng)CD(12864)液晶顯示模塊類(lèi)型屬于漢字圖形類(lèi)型的液晶模塊,可在顯示屏上顯示數(shù)字、符號(hào)和漢字等字符??膳cCPU直接連接,設(shè)有串行和并行這兩種控制方式。具有多種功能可供使用,具體使用哪種功能可查閱芯片資料。

9、2. LCD(12864)引腳介紹D0D7是數(shù)據(jù)口,RS(CS)是數(shù)據(jù)/命令選擇端(串片選),R/W(SID)端口是讀/寫(xiě)選擇端(串?dāng)?shù)據(jù)口),E(SCLK)是使能信號(hào)(串同步時(shí)鐘信號(hào)),PSB端口是串/并選擇端口,RST是我們熟悉而且常用的復(fù)位端口(低電平有效),BLA與BLK則是并不常用的背光電源正極端和負(fù)極端。LCD(12864)的引腳如圖2-6所示。 圖2-6 LCD12864引腳3. LCD(12864)操作時(shí)序12864控制可使用兩種時(shí)序,分別為并行操作時(shí)序和串行操作時(shí)序。(具體內(nèi)容太多,可參考12864數(shù)據(jù)手冊(cè)。)(五)硬件電路PCB板的繪制大二時(shí)由于自學(xué)過(guò)Altium Desig

10、ner,又參加飛思卡爾智能車(chē)競(jìng)賽繪制電路板,加上平時(shí)經(jīng)常繪制一些較為復(fù)雜的PCB,所以此系統(tǒng)所有硬件由Altium Designer設(shè)計(jì)完成。 1. 原理圖的繪制根據(jù)系統(tǒng)要求繪制的硬件原理圖如圖2-6所示。其中包括了單片機(jī)最小系統(tǒng)電路(復(fù)位、震蕩、程序下載接口等電路)、電源電路、12864顯示屏接口電路和led指示燈電路。 圖2-7 硬件電路原理圖 2. PCB板的繪制根據(jù)系統(tǒng)要求及原理圖繪制的PCB圖如圖2-8所示。 圖2-8 硬件電路PCB圖3. 實(shí)際硬件電路 由于資金原因,設(shè)計(jì)好的PCB并沒(méi)有送某寶賣(mài)家打印,實(shí)際電路板由洞洞板焊接而成,如圖2-9所示。圖2-9 實(shí)際硬件圖三、軟件設(shè)計(jì)(一

11、)軟件設(shè)計(jì)思路實(shí)現(xiàn)GPS接收模塊與單片機(jī)的通信是軟件設(shè)計(jì)的核心模塊,然后可以實(shí)現(xiàn)在液晶顯示屏上實(shí)時(shí)顯示當(dāng)前的數(shù)據(jù)信息。整個(gè)編程是用keil軟件,采用C語(yǔ)言編程。功能清晰、調(diào)試方便等特點(diǎn)是軟件模塊化設(shè)計(jì)所具有的優(yōu)點(diǎn),所以采用模塊化設(shè)計(jì),GPS數(shù)據(jù)接收模塊、單片機(jī)模塊、LCD模塊和實(shí)時(shí)顯示模塊是軟件程序設(shè)計(jì)的四個(gè)組成部分。程序的設(shè)計(jì)思路是GPS模塊接收信息,然后向單片機(jī)發(fā)送固定格式的數(shù)據(jù),單片機(jī)通過(guò)串口接收數(shù)據(jù),并對(duì)數(shù)據(jù)進(jìn)行解析,最終實(shí)現(xiàn)在LCD顯示屏上顯示時(shí)間、經(jīng)緯度和高度等信息。詳細(xì)源代碼見(jiàn)附錄。(2) 模塊化軟件設(shè)計(jì)1. GPS接收模塊設(shè)計(jì) 首先在搜索衛(wèi)星時(shí)顯示“華水課程設(shè)計(jì)”、“江濤201

12、412712”和“GPS顯示項(xiàng)目”,然后進(jìn)行識(shí)別判斷GPS模塊收到的信息是否完成發(fā)送給單片機(jī)的操作,若有信息發(fā)送給單片機(jī),但接收到的信息我們并不是全部需要,所以需要進(jìn)行識(shí)別判斷相應(yīng)語(yǔ)句的操作,然后把需要的信息存入到GPRMC語(yǔ)句中。GPS接收模塊程序流程圖如圖3-1所示。結(jié) 束 圖3-1GPS接收模塊流程圖2. 單片機(jī)模塊設(shè)計(jì)GPS模塊接收到數(shù)據(jù)信息后,需要把信息傳送到單片機(jī),單片機(jī)經(jīng)過(guò)分析以及對(duì)數(shù)據(jù)信息進(jìn)行篩選處理,然后送到液晶顯示屏實(shí)時(shí)顯示相應(yīng)的位置信息,具體主要通過(guò)兩個(gè)界面顯示。單片機(jī)模塊程序設(shè)計(jì)流程圖如圖3-2所示。 圖3-2 單片機(jī)模塊流程圖3. 顯示模塊設(shè)計(jì)GPS模塊接收信息后,把

13、信息傳送給單片機(jī),單片機(jī)首先對(duì)數(shù)據(jù)進(jìn)行篩選和處理等操作,然后就可以把信息送到液晶顯示模塊,就實(shí)現(xiàn)了在液晶顯示屏實(shí)時(shí)顯示當(dāng)前位置我們所需的信息。液晶顯示屏主要分為兩個(gè)界面顯示,界面一實(shí)時(shí)顯示當(dāng)前的日期、時(shí)間和經(jīng)緯度信息,界面二實(shí)時(shí)顯示當(dāng)前所處位置的速度、航向、高度和海拔。顯示模塊程序設(shè)計(jì)流程圖如圖3-3所示。界面一顯示設(shè)置界面二顯示設(shè)置 圖3-3 顯示模塊流程圖四、系統(tǒng)調(diào)試與結(jié)果(一)硬件調(diào)試檢測(cè)電路設(shè)計(jì)和工藝設(shè)計(jì)等方面的故障是硬件調(diào)試的主要任務(wù)。1. 檢查電路設(shè)計(jì)中所有元件的焊接以及引腳是否有故障。首先用萬(wàn)用表逐個(gè)檢查焊點(diǎn),目的是檢測(cè)是否出現(xiàn)短路和斷路故障。然后接入電源,觀察電源指示燈的工作狀

14、態(tài),硬件電路加入電源指示燈可以方便的檢測(cè)硬件電路焊接是否正常。 2. 進(jìn)行仿真操作。用單片機(jī)控制仿真操作,目的是用來(lái)檢查系統(tǒng)所涉及的接口是否達(dá)到設(shè)計(jì)的要求。 把程序下載到單片機(jī)上。利用Keil軟件,將已經(jīng)完成的程序進(jìn)行選擇生成頭文件的操作,然后把文件下載到STC89C52單片機(jī)。4. 檢查單個(gè)模塊。通過(guò)下載51單片機(jī)自帶的程序到單片機(jī),然后查看液晶顯示屏(LCD12864)的顯示情況判斷單個(gè)模塊是否工作正常。(二)軟件調(diào)試軟件調(diào)試時(shí)我們是使用Keil軟件進(jìn)行仿真和調(diào)試,可以檢查程序是否出錯(cuò),而且同時(shí)可以糾正程序的錯(cuò)誤,若硬件設(shè)計(jì)有問(wèn)題,就可以檢查出硬件的故障然后我們就可以進(jìn)行修改。因?yàn)槌绦蛟O(shè)計(jì)

15、是模塊化的,所以在調(diào)試時(shí)可以逐個(gè)模塊進(jìn)行調(diào)試,若模塊調(diào)試結(jié)果正常,就可以進(jìn)行整個(gè)程序的調(diào)試。尤其注意查看各個(gè)模塊的語(yǔ)法正確而參數(shù)設(shè)計(jì)不正確的情況。1. 檢查已經(jīng)編譯完成的LCD(12864)液晶顯示模塊程序,查看液晶顯示屏能否正常顯示。2. 檢查已經(jīng)編譯完成的GPS模塊程序,查看液晶顯示屏顯示的信息和預(yù)設(shè)結(jié)果的差距進(jìn)而修改GPS接收模塊程序。3. 運(yùn)行整個(gè)程序,觀察液晶顯示屏的結(jié)果是否實(shí)時(shí)顯示當(dāng)前位置我們所設(shè)想的信息,通過(guò)顯示效果進(jìn)行相應(yīng)的軟硬件修改。(三)設(shè)計(jì)結(jié)果軟件調(diào)試初各個(gè)模塊工作正常,但一旦運(yùn)行整個(gè)程序,液晶顯示屏在GPS搜索衛(wèi)星界面后出現(xiàn)亂碼,通過(guò)多次的調(diào)試和檢測(cè),原來(lái)是晶振不符合要

16、求,更換晶振后,再次進(jìn)行調(diào)試和檢測(cè),最終液晶顯示屏顯示了預(yù)想的結(jié)果,即實(shí)現(xiàn)了實(shí)時(shí)顯示當(dāng)前位置的日期、時(shí)間、緯度、經(jīng)度等信息。調(diào)試結(jié)果初始化界面如圖4-1所示。 圖4-1 初始化界面把當(dāng)前位置液晶顯示屏顯示的信息與谷歌地圖顯示的位置信息進(jìn)行對(duì)比,日期、時(shí)間非常精確,但經(jīng)度與緯度出現(xiàn)了誤差。究其原因:一是由于本次設(shè)計(jì)所采用的GPS接收模塊精度并不高,不能進(jìn)行精確定位接收;二是在實(shí)驗(yàn)中不可避免會(huì)受障礙物、天氣等因素的干擾,試驗(yàn)環(huán)境并不理想;三是在谷歌地圖中我們手動(dòng)點(diǎn)選的位置沒(méi)有和GPS測(cè)量位置達(dá)到同步。但是誤差是在誤差范圍內(nèi),我們是可以接受的。所以本次設(shè)計(jì)是有意義的,可靠的。即實(shí)現(xiàn)了實(shí)時(shí)顯示當(dāng)前位置

17、的數(shù)據(jù)信息。界面一和二顯示結(jié)果如圖5-2,5-3所示。 圖4-2 界面一顯示結(jié)果 圖4-3 界面二顯示結(jié)果五、總 結(jié)本次課程設(shè)計(jì)以單片機(jī)為控制核心,控制GPS接收模塊,GPS模塊把接收到的信息傳送給單片機(jī),單片機(jī)把數(shù)據(jù)信息送到液晶顯示屏顯示,實(shí)現(xiàn)實(shí)時(shí)顯示當(dāng)前位置的數(shù)據(jù)信息。通過(guò)完成本次的課程設(shè)計(jì),做到了單片機(jī)的理論知識(shí)和實(shí)踐相結(jié)合。我們?cè)诔鯇W(xué)習(xí)單片機(jī)時(shí),曾把精力主要放在學(xué)習(xí)單片機(jī)的內(nèi)部結(jié)構(gòu)上。可想而知,學(xué)起來(lái)非常痛苦。實(shí)踐證明,這不是正確的方法,我們應(yīng)該把精力放在單片機(jī)的應(yīng)用上,在掌握應(yīng)用過(guò)程中我們發(fā)現(xiàn)也逐步掌握了單片機(jī)的內(nèi)部結(jié)構(gòu),也學(xué)會(huì)了充分地利用了單片機(jī)的資源。通過(guò)學(xué)習(xí)單片機(jī)知識(shí),進(jìn)而了解

18、了計(jì)算機(jī)的原理和結(jié)構(gòu)。計(jì)算機(jī)的功能主要體現(xiàn)在控制功能上,比如現(xiàn)在流行的智能家居領(lǐng)域也是單片機(jī)控制功能的體現(xiàn)。經(jīng)過(guò)本次的單片機(jī)課程設(shè)計(jì),不僅學(xué)習(xí)了GPS接收模塊的知識(shí)、單片機(jī)和液晶顯示模塊相關(guān)知識(shí),也提高了自己的焊接能力,使自己明確了拿到一個(gè)課題自己應(yīng)該從哪著手去做,使自己有明確的系統(tǒng)設(shè)計(jì)思路,也懂得了當(dāng)實(shí)驗(yàn)結(jié)果不理想時(shí),該如何去糾錯(cuò),如何去尋找問(wèn)題,解決問(wèn)題。參考文獻(xiàn)1數(shù)字電子技術(shù)基礎(chǔ)/巖石主編;清華大學(xué)電子學(xué)教研組編.-5版.-北京:高等教育出版社,2006.52模擬電子技術(shù)基礎(chǔ)/童詩(shī)白,華成英主編;清華大學(xué)電子學(xué)教研組編.-4版.-北京:高等教育出版社,2006.53潘談.基于STC89C

19、58芯片的小型GPS船舶航跡儀的設(shè)計(jì)J.艦船科學(xué)技術(shù),2014,(12):124-127.4杜俊,董松.基于單片機(jī)的GPS定位系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)J.甘肅科技,2016,(19):25-27.5張亮紅,劉文怡,王紅亮.基于單片機(jī)的GPS定位系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)J.電子器件,2015,(5):1187-1191.6譚昕.基于單片機(jī)的GPS導(dǎo)航裝置分析J.中國(guó)新通信,2015,(18):115.7劉穎.基于單片機(jī)的GPS導(dǎo)航裝置的設(shè)計(jì)研究J.科技展望,2015,(18):157.8高芳.單片機(jī)在GPS系統(tǒng)中的應(yīng)用J.電子制作,2013,(19):57.9Guang Li Long.Design of GP

20、S based on Single Chip MicrocomputerJ.Trans Tech期刊,2012:2192-2195.附錄系統(tǒng)設(shè)計(jì)部分代碼:Main.c/=/ 工程名稱(chēng):GPS模塊測(cè)試程序/ 文件名稱(chēng): main.c/ 功能描述: GPS模塊接收定位信息,在LCD上顯示/ 組成文件:main.c LCD.c GPS.c display.c / 頭文件: LCD.h GPS.h display.h/ 程序分析:GPS模塊通過(guò)串口向單片機(jī)發(fā)送固定格式的數(shù)據(jù)/單片機(jī)的串口接收到數(shù)據(jù)后,進(jìn)行解析,在LCD上顯示/定位信息包括:日期時(shí)間,經(jīng)緯度,速度,角度,高度/=#include <

21、;reg52.h>#include <stdio.h>#include <string.h>#include "GPS.h"#include "LCD.h"#include "display.h"sbit led1 = P23; /接收數(shù)據(jù)指示燈sbit led2 = P24; /GPRMC數(shù)據(jù)有效指示燈sbit led3 = P25; /GPGGA數(shù)據(jù)有效指示燈#define REV_YES led1 = 0#define REV_NO led1 = 1#define RMC_YES led2 = 0#

22、define RMC_NO led2 = 1#define GGA_YES led3 = 0#define GGA_NO led3 = 1char xdata rev_buf80; /接收緩存uchar xdata rev_start = 0; /接收開(kāi)始標(biāo)志uchar xdata rev_stop = 0; /接收停止標(biāo)志uchar xdata gps_flag = 0; /GPS處理標(biāo)志uchar xdata change_page = 0; /換頁(yè)顯示標(biāo)志uchar xdata num = 0; /extern GPS_INFO GPS; /在display.c中定義,使用時(shí)要加exte

23、rnuchar code inf = " 華水江濤 "void Uart_Init(void)TMOD = 0x21;/0010 0001PCON=0X00;TH0=0x3c;TL0=0xb0;TH1=0xfd; /TL1=0xfd;/TR1=1; /開(kāi)啟定時(shí)器1REN=1; /允許接收數(shù)據(jù) SM0=0;SM1=1;TI=0;RI=0;EA=1; /開(kāi)總中斷ES=1; /串口1中斷允許ET0 = 1; /定時(shí)器1中斷允許/*主函數(shù)/*/void main(void)uchar error_num = 0;Uart_Init(); /初始化串口Lcd_Init(); /初始化

24、LCDGPS_Init(); /初始化GPSrev_stop=0;REV_NO;while(1)if (1) /如果接收完一行TR0 = 1; /開(kāi)啟定時(shí)器REV_YES;if (change_page % 2 = 1) /換頁(yè)if (GPS_GGA_Parse(rev_buf, &GPS) /解析GPGGAGGA_YES;GPS_DisplayTwo(); /顯示第二頁(yè)信息error_num = 0;gps_flag = 0;rev_stop = 0;REV_NO;elseerror_num+;if (error_num >= 20) /如果數(shù)據(jù)無(wú)效超過(guò)20次GGA_NO;er

25、ror_num = 20;GPS_Init(); /返回初始化gps_flag = 0;rev_stop = 0;REV_NO;elseif (GPS_RMC_Parse(rev_buf, &GPS) /解析GPRMCRMC_YES;GPS_DisplayOne(); /顯示GPS第一頁(yè)信息error_num = 0;gps_flag = 0;rev_stop = 0;led1 = 1;elseerror_num+;if (error_num >= 20) /如果數(shù)據(jù)無(wú)效超過(guò)20次RMC_NO;error_num = 20;GPS_Init(); /返回初始化gps_flag =

26、 0;rev_stop = 0;REV_NO;/定時(shí)器0服務(wù)函數(shù)void timer0(void) interrupt 1static uchar count = 0;TH0 = 0x3c;TL0 = 0xb0;count+;if (count = 200) /2*5秒鐘count = 0;change_page+; /換頁(yè)if (change_page = 10)change_page = 0;/串口接受中斷服務(wù)函數(shù)void Uart_Receive(void) interrupt 4uchar ch;ES = 0;led1 = led1;if (RI)ch = SBUF;if (ch =

27、'$') && (gps_flag = 0) /如果收到字符'$',便開(kāi)始接收rev_start = 1;rev_stop = 0;if (rev_start = 1) /標(biāo)志位為1,開(kāi)始接收rev_bufnum+ = ch; /字符存到數(shù) 組中if (ch = 'n') /如果接收到換行rev_bufnum = '0'rev_start = 0;rev_stop = 1;gps_flag = 1;num = 0;RI = 0; /RI清0,重新接收ES = 1;=GPS.c#include "GPS.h

28、"#include "LCD.h"#include <string.h>uchar code init1 = " 華水課程設(shè)計(jì) "uchar code init2 = " 江濤 201412712 "uchar code init3 = " GPS顯示項(xiàng)目 "uchar code init4 = "搜索定位衛(wèi)星."static uchar GetComma(uchar num,char* str);static double Get_Double_Number(char *

29、s);static float Get_Float_Number(char *s);static void UTC2BTC(DATE_TIME *GPS);void GPS_Init(void)Lcd_DispLine(0, 0, init1);Lcd_DispLine(1, 0, init2);Lcd_DispLine(2, 0, init3);Lcd_DispLine(3, 0, init4);int GPS_RMC_Parse(char *line,GPS_INFO *GPS)uchar ch, status, tmp;float lati_cent_tmp, lati_second_t

30、mp;float long_cent_tmp, long_second_tmp;float speed_tmp;char *buf = line;ch = buf5;status = bufGetComma(2, buf);if (1) /如果第五個(gè)字符是C,($GPRMC)if (status = 'A') /如果數(shù)據(jù)有效,則分析GPS -> NS = bufGetComma(4, buf);GPS -> EW = bufGetComma(6, buf);GPS->latitude = Get_Double_Number(&bufGetComma(3

31、, buf);GPS->longitude = Get_Double_Number(&bufGetComma( 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)

32、* 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->l

33、ongitude_Second = (int)long_second_tmp;speed_tmp = Get_Float_Number(&bufGetComma(7, buf); /速度(單位:海里/時(shí))GPS->speed = speed_tmp * 1.85; /1海里=1.85公里GPS->direction = Get_Float_Number(&bufGetComma(8, buf); /角度GPS->D.hour = (buf7 - '0') * 10 + (buf8 - '0');/時(shí)間GPS->D.minu

34、te = (buf9 - '0') * 10 + (buf10 - '0');GPS->D.second = (buf11 - '0') * 10 + (buf12 - '0');tmp = GetComma(9, buf);GPS->D.day = (buftmp + 0 - '0') * 10 + (buftmp + 1 - '0'); /日期GPS->D.month = (buftmp + 2 - '0') * 10 + (buftmp + 3 - '

35、0');GPS->D.year = (buftmp + 4 - '0') * 10 + (buftmp + 5 - '0')+2000;UTC2BTC(&GPS->D);return 1;return 0;int GPS_GGA_Parse(char *line,GPS_INFO *GPS)uchar ch, status;char *buf = line;ch = buf4;status = bufGetComma(2, buf);if (ch = 'G') /$GPGGAif (status != ',&#

36、39;)GPS->height_sea = Get_Float_Number(&bufGetComma(9, buf);GPS->height_ground = Get_Float_Number(&bufGetComma(11, buf);return 1;return 0;static float Str_To_Float(char *buf)float rev = 0;float dat;int integer = 1;char *str = buf;int i;while(*str != '0')switch(*str)case '0&

37、#39;: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;ca

38、se '.':dat = '.'break;if(dat = '.')integer = 0;i = 1;str +;continue;if( integer = 1 )rev = rev * 10 + dat;elserev = rev + dat / (10 * i);i = i * 10 ;str +;return rev;static float Get_Float_Number(char *s)char buf10;uchar i;float rev;i=GetComma(1, s);i = i - 1;strncpy(buf, s,

39、i);bufi = 0;rev=Str_To_Float(buf);return rev;static double Str_To_Double(char *buf)double rev = 0;double dat;int integer = 1;char *str = buf;int i;while(*str != '0')switch(*str)case '0':dat = 0;break;case '1':dat = 1;break;case '2':dat = 2;break;case '3':dat =

40、 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;elserev = rev + dat / (10 * i);i = i * 10 ;str +;return rev;static double Get_

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論