2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  課 程 設(shè) 計 報 告</p><p>  課程設(shè)計名稱:物聯(lián)網(wǎng)綜合課程設(shè)計</p><p>  課程設(shè)計題目:高度測量 </p><p>  院(系):計算機學(xué)院</p><p>  專 業(yè):計算機科學(xué)與技術(shù)(物聯(lián)網(wǎng)技術(shù)方向)</p><p><b>  班 級: <

2、/b></p><p><b>  學(xué) 號: </b></p><p><b>  姓 名: </b></p><p><b>  指導(dǎo)教師: </b></p><p>  說明:結(jié)論(優(yōu)秀、良好、中等、及格、不及格)作為相關(guān)教環(huán)節(jié)考核必要依據(jù);格式不符合要求

3、;數(shù)據(jù)不實,不予通過。報告和電子數(shù)據(jù)必須作為實驗現(xiàn)象重復(fù)的關(guān)鍵依據(jù)。</p><p><b>  目 錄</b></p><p><b>  學(xué)術(shù)誠信聲明I</b></p><p>  第1章 總體設(shè)計方案1</p><p>  1.1 課程設(shè)計的內(nèi)容和要求1</p>

4、<p>  1.2 課程設(shè)計原理1</p><p>  1.2.1 GPS原理敘述:1</p><p>  1.2.2 NMEA格式解釋3</p><p>  1.2.3GPS模組電路4</p><p>  1.3 課程設(shè)計思路6</p><p>  第2章 詳細(xì)設(shè)計方案7</p>

5、;<p>  2.1 課程設(shè)計環(huán)境搭建7</p><p>  2.1.1 Ubuntu 10.10 的安裝7</p><p>  2.1.2通過網(wǎng)線和串口將PC和A8實驗箱進行連接8</p><p>  2.1.3 GPS模塊的連接10</p><p>  2.1.4軟件設(shè)計與實現(xiàn)10</p><p

6、>  2.2 實施方案12</p><p>  第3章 調(diào)試及結(jié)果分析14</p><p><b>  3.1 調(diào)試14</b></p><p>  3.1.1 軟件測試14</p><p>  3.1.2 硬件調(diào)試14</p><p><b>  3.2 結(jié)果14&l

7、t;/b></p><p>  附 錄(關(guān)鍵部分程序清單)16</p><p>  第1章 總體設(shè)計方案</p><p>  1.1 課程設(shè)計的內(nèi)容和要求</p><p>  1.1.1課程設(shè)計內(nèi)容:</p><p>  文獻檢索,查閱資料了解凌陽A8實驗箱和GPS模塊的相關(guān)知識;</p>

8、<p>  通過GPS模塊采集相關(guān)的信息;</p><p>  將NMEA回傳給凌陽實驗箱;</p><p>  通過超級終端將解析出來的高度信息顯示在計算機上。</p><p>  1.1.2課程設(shè)計要求:</p><p><b>  認(rèn)真查閱相關(guān)資料;</b></p><p>  

9、獨立設(shè)計,調(diào)試并通過指導(dǎo)老師現(xiàn)場驗收;</p><p><b>  撰寫課程設(shè)計報告。</b></p><p>  1.2 課程設(shè)計原理</p><p>  1.2.1GPS原理敘述:</p><p>  GPS(全球定位系統(tǒng))是美國從本世紀(jì) 70 年代開始研制,歷時20 年,耗資 200 億美元,具有在海、陸、空進行

10、全方位實時三維導(dǎo)航與定位能力的新一代衛(wèi)星導(dǎo)航與定位系統(tǒng)。</p><p>  GPS 在空間中有21顆工作衛(wèi)星3顆備用衛(wèi)星,在地面上有1 個主控站, 3 個注入站, 5 個監(jiān)測站組成,用戶通過設(shè)備接收GPS衛(wèi)星發(fā)射的衛(wèi)星信號獲得導(dǎo)航和定位信息,經(jīng)過數(shù)據(jù)解析和處理獲取高度,經(jīng)緯度等信息。</p><p>  GPS 具有如下特性:</p><p>  全球,全天候工作

11、:能為用戶提供連續(xù)、實時的三維位置、三維速度和精密時間。不受天氣的影響。</p><p>  定位精度高:單機定位精度優(yōu)于 10 米;采用差分定位精度可達(dá)厘米或毫米級。</p><p>  功能多,應(yīng)用廣:目前已廣泛應(yīng)用于大地測量、工程測量、航空攝影測量、運載工具導(dǎo)航和管制、地殼運動監(jiān)測、工程變形監(jiān)測、資源勘察、地球動力學(xué)等學(xué)科領(lǐng)域。</p><p>  GPS 由

12、三個獨立的部分組成:</p><p>  空間部分:21 顆工作衛(wèi)星,3 顆備用衛(wèi)星。</p><p>  地面支撐系統(tǒng):1 個主控站,3 個注入站,5 個監(jiān)測站。</p><p>  用戶設(shè)備部分:接收 GPS 衛(wèi)星發(fā)射信號,以獲得必要的導(dǎo)航和定位信息,經(jīng)數(shù)據(jù)處理,完成導(dǎo)航和定位工作。GPS 接收機硬件一般由主機、天線和電源組成。</p><p

13、>  圖 GPS全球定位示意圖</p><p>  GPS 定位的基本原理:根據(jù)高速運動的衛(wèi)星瞬間位置作為已知的數(shù)據(jù),采用空間距離后方交會的方法,確定待測點的位置。假設(shè) t 時刻在地面待測點上安置 GPS 接收機,可以測定 GPS 信號到達(dá)接收機的時間△t,再加上接收機所接收到的衛(wèi)星星歷等數(shù)據(jù)可以確定以下四個方程式:</p><p>  上述四個方程式中待測點坐標(biāo) x、y、z 和 V

14、 t0 為未知參數(shù),其中 di=cti (i=△1、2、3、4)。di (i=1、2、3、4) 分別為衛(wèi)星 1、衛(wèi)星 2、衛(wèi)星 3、衛(wèi)星 4 到接收機之間的距離。ti (i=△1、2、3、4) 分別為衛(wèi)星 1、衛(wèi)星 2、衛(wèi)星 3、衛(wèi)星 4 的信號到達(dá)接收機所經(jīng)歷的時間。c 為 GPS 信號的傳播速度(即光速)。</p><p>  四個方程式中各個參數(shù)意義如下:</p><p>  x、y

15、、z 為待測點坐標(biāo)的空間坐標(biāo)。xi 、yi 、zi (i=1、2、3、4) 分別為衛(wèi)星 1、衛(wèi)星 2、衛(wèi)星3、衛(wèi)星 4 在 t 時刻的空間坐標(biāo),可由衛(wèi)星導(dǎo)航電文獲得。Vti (i=1、2、3、4) 分別為衛(wèi)星 1、衛(wèi)星 2、衛(wèi)星 3、衛(wèi)星 4 的衛(wèi)星鐘的鐘差,由衛(wèi)星星歷提供。Vto 為接收機的鐘差。由以上四個方程即可計算出待測點的坐標(biāo) x、y、z 和接收機的鐘差 Vto 。</p><p>  1.2.2 NME

16、A格式解釋</p><p>  GPS模塊返回的位置信息是按照NMEA 協(xié)議格式,NMEA是一套定義接收機輸出的標(biāo)準(zhǔn)信息,有幾種不同的格式,每種都是獨立相關(guān)的ASCII格式,逗點隔開數(shù)據(jù)流,數(shù)據(jù)流長度從30-100字符不等,通常以每秒間隔選擇輸出,通常的的格式為"GP"開頭,它包含了定位時間,緯度,經(jīng)度,高度,定位所用的衛(wèi)星數(shù),其他的有速度,跟蹤,日期等。NMEA-0183協(xié)議定義的語句非常多

17、,但是常用的或者說兼容性最廣的語句只有$GPGGA、$GPGSA、$GPGSV、$GPRMC、$GPVTG、$GPGLL等,說明如下: </p><p>  $GPGGA(定位信息)eg:$GPGGA,092204.999,4250.5589,S,14718.5084,E,1,04,24.4,19.7,M,,,,0000*

18、1F </p><p>  GPGSA(當(dāng)前衛(wèi)星信息)eg:$GPGSA,A,3,01,20,19,13,,,,,,,,,40.4,24.4,32.2*0A </p><p>  $GPGSV(可見衛(wèi)星信息)eg:$GPGSV,3,1,10,20,78,331,45,01,59,235,47,22,41,069,,13,32,252,45*70</p>

19、<p>  $GPVTG(地面速度信息)</p><p>  eg:$GPVTG,89.68,T,,M,0.00,N,0.0,K*5F </p><p>  $GPGLL(地理定位信息)</p><p>  $GPGLL,4250.5589,S,14718.5084,E,092204.999,A*2D</p><p>  

20、其中GPGGA的格式如下:$GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,M,<10>,M,<11>,<12>*hh<CR><LF> </p><p>  <1> UTC時間,hhmmss(時分秒)

21、格式 </p><p>  <2> 緯度ddmm.mmmm(度分)格式(前面的0也將被傳輸) </p><p>  <3> 緯度半球N(北半球)或S(南半球) </p><p>  <4> 經(jīng)度dddmm.mmmm(度分)格式(前面的0也將被傳輸) </p><p>  <5> 經(jīng)度半球E(東

22、經(jīng))或W(西經(jīng)) </p><p>  <6> GPS狀態(tài):0=未定位,1=非差分定位,2=差分定位,6=正在估算 </p><p>  <7> 正在使用解算位置的衛(wèi)星數(shù)量(00~12)(前面的0也將被傳輸) </p><p>  <8> HDOP水平精度因子(0.5~99.9) </p><p>  &

23、lt;9> 海拔高度(-9999.9~99999.9) </p><p>  <10> 地球橢球面相對大地水準(zhǔn)面的高度 </p><p>  <11> 差分時間(從最近一次接收到差分信號開始的秒數(shù),如果不是差分定位將為空) </p><p>  <12> 差分站ID號0000~1023(前面的0也將被傳輸,如果不是差分定位

24、將為空)</p><p>  1.2.3GPS模組電路</p><p>  GPS 模組的電路如下圖所示,該模組采用 APM7101 主芯片,它集成了 SiRFstarIII GPS 處理器,LNA 電路,SAW 濾波器,振蕩和校準(zhǔn)電路;模組引出了 UART 通信接口和復(fù)位接口。</p><p>  圖 GPS模組電路圖</p><p>  

25、GPS 模組具有以下特性:</p><p><b>  20 個通道接收</b></p><p>  弱信號下快速 TTFFs(Time to First Fix)</p><p>  兩個 UART 收發(fā)通道</p><p>  接收靈敏度可達(dá)-159dBm</p><p>  支持 NMEA-

26、0183 和 SiRF 協(xié)議</p><p>  支持 SBAS(WAAS、EGONS)</p><p>  GPS 模塊帶有一個 10 針的接口,該接口可以直接和 MCU 相連接或者通過 RS232 轉(zhuǎn)換模塊和PC 機相連接使用。</p><p>  GPS 模塊需通過 MCU 向 GPS 模塊的 RST(Pin2)引腳輸入如圖所示的上電時序 GPS 才能被啟動,

27、啟動后 GPS 的信號指示燈會周期閃爍。</p><p>  圖 GPS模塊啟動時序圖</p><p>  GPS 啟動后會間隔一定時間返回一次接收信息,其返回信息包括:GGA(1sec) / GSA(1sec) / MC(1sec) / GSV(5sec),通常我們僅關(guān)注其中 RMC 信息。</p><p>  1.3 課程設(shè)計思路</p><

28、;p>  根據(jù)課程設(shè)計題目要求,首先要對實驗箱和PC機以及GPS模塊進行連接,并對通信傳輸速率以及IP進行設(shè)置,其次要在PC機上對實驗程序進行編輯,并復(fù)制到Ubuntu系統(tǒng)中,最后將在Ubuntu系統(tǒng)下編譯的文件下載到A8實驗箱,使其運行顯示結(jié)果。</p><p>  第2章 詳細(xì)設(shè)計方案</p><p>  2.1 課程設(shè)計環(huán)境搭建</p><p>  嵌

29、入式開發(fā)環(huán)境一般為Linux環(huán)境,通常的嵌入式系統(tǒng)的軟件開發(fā)采用一種交叉編譯調(diào)試的方式。交叉編譯調(diào)試環(huán)境建立在宿主機(即一臺 PC 機)上,對應(yīng)的開發(fā)板叫做目標(biāo)板。宿主機和目標(biāo)板的處理器一般不相同,宿主機為 x86 處理器,而目標(biāo)板如凌陽的 A8 實驗箱為三星 S5PV210,其為 ARM A8 架構(gòu)的處理器。 GNU 編譯器提供這樣的功能,在編譯器編譯時可以選擇開發(fā)所需的宿主機和目標(biāo)機從而建立開發(fā)環(huán)境。所以在進行嵌入式開發(fā)前第一步的工

30、作就是要安裝一臺裝有指定操作系統(tǒng)的 PC 機作宿主開發(fā)機,對于嵌入式 Linux,宿主機上的操作系統(tǒng)一般要求為 Linux 的各種發(fā)行版,本次課程設(shè)計采用Ubuntu10.10,同時安裝gcc交叉編譯器。環(huán)境搭建流程如圖:</p><p>  2.1.1 Ubuntu 10.10 的安裝</p><p>  嵌入式 Linux 的 PC 開發(fā)環(huán)境有幾個方案:</p><

31、p>  基于 PC 機 Windows 操作系統(tǒng)下 Cygwin</p><p>  2.在 Windows 下安裝虛擬機后,再在虛擬機中安裝 Linux 操作系統(tǒng)</p><p>  3.直接安裝 Linux 操作系統(tǒng)</p><p>  以上三種方案各有千秋,方案一容易存在兼容性問題;方案二在 PC 配置比較低的情況下會比較慢,但是既可以使用 Window

32、s 上的一些軟件又可以使用到比較好的 Linux 環(huán)境,熟悉 Windows的用戶用此方案比較順手;方案三無法使用 Windows 上的一些常用軟件,并且不熟悉的人操作起來比較困難。簽于此筆者建議初學(xué)者選擇方案二。</p><p>  方案二首先要在 Windows 上安裝一個虛擬機軟件,常用的虛擬機軟件為 Vmware。然后再在Vmware 上安裝 Ubuntu 10.10。在安裝完 Ubuntu 10.10

33、后還要安裝嵌入式 Linux 的交叉編譯器和開發(fā)庫以及 ARM-Linux 的所有源代碼,這些包安裝后的總共需要空間大約為 800M。</p><p>  2.1.2通過網(wǎng)線和串口將PC和A8實驗箱進行連接</p><p>  通過操作PC機的超級終端登陸實驗箱的系統(tǒng),通過網(wǎng)線連接是有兩種方案:</p><p>  1. 實驗箱的以太網(wǎng)接口與 PC 的網(wǎng)卡直接相連。

34、</p><p>  2. 將實驗箱與路由器相連。</p><p>  當(dāng)在實驗室通過方案2連接PC機和A8實驗箱時,容易出現(xiàn)ip沖突等問題,所以直接將用網(wǎng)線將實驗箱的以太網(wǎng)接口和PC的網(wǎng)卡直接相連。此時需要將A8實驗箱和PC機設(shè)置在同一網(wǎng)段才能正常通信。具體步驟如下:</p><p>  通過超級終端建立連接并登陸到A8實驗箱的系統(tǒng)中(賬號:root,密碼:111

35、111)</p><p><b>  登陸成功</b></p><p>  2)對A8實驗箱的IP進行配置,并重啟網(wǎng)絡(luò)服務(wù)器。(主要用到的Linux語句:ipconfig eth0 -i 192.168.1.100 -m 255.255.255.0 -g 192.168.1.1和service network restart)</p><p>

36、  更改IP并重啟網(wǎng)絡(luò)服務(wù)器</p><p>  3)更改主機電腦的IP(注意將宿主機和實驗箱IP設(shè)置在同一網(wǎng)段)</p><p><b>  更改宿主機IP</b></p><p>  2.1.3 GPS模塊的連接</p><p>  實驗箱引出了 GPS 接口 J33,直接把 GPS 模組插接到該接口上,即可實現(xiàn)對

37、GPS 模組的控制。其中 GPS 模組的復(fù)位信號由實驗箱 GPJ4_0 來控制,通信由實驗箱的 UART2 來完成。按照APM7101 的通訊要求,UART 通訊波特率為 4800 或者 9600bps。</p><p>  2.1.4軟件設(shè)計與實現(xiàn)</p><p>  軟件實現(xiàn)是本設(shè)計的重點,使用的是嵌入式 C語言編程,采用模塊化的設(shè)計思想,根據(jù)系統(tǒng)要求和相關(guān)的硬件電路。</p&g

38、t;<p>  本設(shè)計中,程序首先通過 GPJ4_0 輸出 GPS 模組開啟所需時序,從而打開 GPS 模組,接下來即可通過 UART2 等待從 GPS 模組中讀取 GPS 信息,并將這些這些信息進行解析,即可得到所需信息。本設(shè)計的程序流程如下圖所示:</p><p><b>  圖 軟件程序流程圖</b></p><p>  具體的軟件程序流程為:&l

39、t;/p><p>  打開 Linux 下相應(yīng)的設(shè)備掛載點,開啟 GPS 模塊并進行初始化。本設(shè)計中,程序通過 GPJ4_0 輸出 GPS 模組開啟所需時序,從而打開 GPS 模組,接下來可通過 UART2 等待從 GPS 模組中讀取 GPS 信息,并將這些信息進行解析,即可得到所需信息。</p><p>  打開并設(shè)置 UART2 屬性。為了實驗箱能夠正確地與 PC 進行通信,必須按照制定要

40、求格式對通信串口進行初始化操作。本設(shè)計選擇實驗箱主電路板上的 UART2 串口進行與 PC 的通信,并設(shè)置通信波特率為 115200、數(shù)據(jù)位為 8 位、無奇偶校驗位、1 位停止位和無數(shù)據(jù)流控制。具體實現(xiàn)過程可以通過向設(shè)備中發(fā)送起始信號,設(shè)備地址和寫信號,然后發(fā)送內(nèi)部寄存器的地址和數(shù)據(jù),發(fā)送結(jié)束后便發(fā)送停止信號。</p><p>  讀取 GPS 信息并解析。GPS 模組返回的信息遵循 NMEA 協(xié)議格式。為了正確

41、無誤地讀取 GPS 模組中返回的信息,我們必須按照 NMEA 消息格式對緩沖區(qū)中的消息進行讀取并存儲并通過函數(shù)GetComma(int num,char *str) 得到指定序號的逗號位置,以解析各個定義段?;?NMEA 指令是一個 ASCII 字符串,它以‘$‘字符開始、以<CR><LF>序列結(jié)束。NMEA標(biāo)準(zhǔn)消息以“GP”開始,接著是三個字符的消息標(biāo)識碼。消息頭和后面的內(nèi)容通過逗號進行分隔,消息以校檢碼結(jié)束(校檢碼由一個‘*’和兩

42、個 16 位的校驗字組成。校驗碼字段并不用逗號進行分隔。目前,校驗碼得到的方式是從‘$’到‘*’之間的字符進行逐位計算。)</p><p><b>  2.2 實施方案</b></p><p>  按照設(shè)計原理及設(shè)計思路在PC機上編寫程序,保存成 .c 源代碼文件,并將文件拷貝到Ubuntu系統(tǒng)中。</p><p>  在 Ubuntu 操作系

43、統(tǒng)中打開一個終端,進入到源程序所在目錄下,在Ubuntu中進行交叉編譯,運行命令行(通過ls查看查看到GPS216文件):arm-linux-gcc -o GPS216 GPS.c</p><p>  在 PC 機,通過 ftp 協(xié)議訪問實驗箱的 IP 地址,將編譯好的GPS216 文件傳輸?shù)綄嶒炏渲小?lt;/p><p>  在超級終端中,賦予文件可執(zhí)行權(quán)限并運行。(授權(quán)語句:chmod +

44、x GPS216)</p><p>  第3章 調(diào)試及結(jié)果分析</p><p><b>  3.1 調(diào)試</b></p><p>  3.1.1 軟件測試</p><p>  通過查找眾多資料,終于確定了整個設(shè)計方案,即使用S5PV210 CPU板模塊和GPS模塊作為本設(shè)計的核心芯片。在參考了各種GPS解析函數(shù)和以上的電

45、路原理后,開始進行軟件測試。</p><p>  3.1.2 硬件調(diào)試</p><p>  當(dāng)按照以上原理和要求連接調(diào)試后,發(fā)現(xiàn)并沒有出現(xiàn)預(yù)期現(xiàn)象,甚至出現(xiàn)超級終端黑屏現(xiàn)象,所以在課設(shè)源代碼中設(shè)計了輸出“此時的GPS信息為:”以此判斷GPS模組獲取合法信息,同時在經(jīng)過不斷的查閱資料后,發(fā)現(xiàn)GPS模組收到環(huán)境影響比較大,首先就是需要將模組放在里窗比較近的位置才能獲得相應(yīng)的GPS信息。根據(jù)GP

46、S的運行原理,課設(shè)結(jié)果會受到天氣環(huán)境的影響,比如空氣的濕度,大氣層的云層厚度等因素,所以課設(shè)結(jié)果會有些許偏差。</p><p><b>  3.2 結(jié)果</b></p><p>  當(dāng)根據(jù)實驗原理設(shè)計并運行后,超級終端可以出現(xiàn)如下實驗結(jié)果:</p><p><b>  參考文獻</b></p><p&g

47、t;  [1] 青島東合信息技術(shù)有限公司. 無線傳感器網(wǎng)絡(luò)技術(shù)原理及應(yīng)用[M]. 西安:西安電子科技大學(xué)出版社,2013</p><p>  [2] 凌陽愛普科技有限公司. 物聯(lián)網(wǎng)多網(wǎng)技術(shù)綜合教學(xué)開發(fā)平臺實驗指導(dǎo)書[M],2013</p><p>  [3] 王小強,歐陽俊,黃寧淋. ZigBee無線傳感器網(wǎng)絡(luò)設(shè)計與實現(xiàn)[M]. 北京:化學(xué)工業(yè)出版社,2012</p><

48、;p>  [4] 凌陽愛普科技有限公司. A8實驗箱綜合教學(xué)開發(fā)平臺實驗指導(dǎo)書[M],2013</p><p>  [5] 王毓銀.數(shù)字電路邏輯設(shè)計.高等教育出版社,1999</p><p>  [6] 梁德厚.數(shù)字電路技術(shù)及應(yīng)用.機械工業(yè)出版社,2004</p><p>  [7] 楊松華.數(shù)字電子技術(shù)基礎(chǔ).西安電子科技大學(xué)出版社,2000</p>

49、;<p>  附 錄(關(guān)鍵部分程序清單)</p><p>  #include <stdio.h></p><p>  #include <stdlib.h></p><p>  #include <string.h></p><p>  #include <assert.h>

50、</p><p>  #include <unistd.h></p><p>  #include <termios.h></p><p>  #include <fcntl.h></p><p>  #include <sys/stat.h></p><p>  #in

51、clude <sys/time.h></p><p>  #include <sys/types.h></p><p>  #include <sys/ioctl.h></p><p>  typedef struct{</p><p><b>  int year;</b></

52、p><p>  int month;</p><p><b>  int day;</b></p><p><b>  int hour;</b></p><p>  int minute;</p><p>  int second;</p><p>  

53、char time_c[10];//ACSII形式的時間</p><p>  }date_time;</p><p>  typedef struct{</p><p>  date_time D;//時間</p><p>  char status; //接收狀態(tài)</p><p>  doub

54、le latitude; //緯度</p><p>  char latitude_c[11];//ASCII形式的緯度</p><p>  double longitude; //經(jīng)度</p><p>  char longitude_c[11];//ASCII形式的經(jīng)度</p><p>  char NS;

55、 //南北極</p><p>  char EW; //東西</p><p>  double speed; //速度</p><p>  char speed_c[10];//ASCII形式的速度</p><p>  double high; //高度</

56、p><p>  }GPS_INFO;</p><p>  int GPS_Read(int fd, char *Data_Buff, int len);</p><p>  int GetComma(int num,char* str);</p><p>  void UTC2BTC(date_time *GPS);</p><

57、;p>  double Get_Double_Number(char *s);</p><p>  void Get_Char(char *s);</p><p>  char buf_t[128];</p><p>  int main()</p><p><b>  {</b></p><

58、;p>  struct termios options, oldoptions;</p><p>  // 定義串口屬性結(jié)構(gòu)體變量,其中options用于重新設(shè)置串口屬性,oldoptions用于原設(shè)置,用于恢復(fù)到原來的屬性</p><p>  GPS_INFO GPS;</p><p>  unsigned int Degree = 0;</p>

59、<p>  float Cent;</p><p>  char buf[1024];</p><p>  int len = 1024;</p><p>  int nByte;</p><p>  int rdadByte;</p><p><b>  int i=0;</b>&

60、lt;/p><p><b>  int fd;</b></p><p>  fd = open("/dev/gpJ4", O_RDWR);// open GPJ4</p><p>  ioctl(fd, 0x01, 0); // set GPJ4_0 output

61、</p><p>  ioctl(fd, 0x10, 0); // GPJ4_0 output low level</p><p>  usleep(30000);</p><p>  ioctl(fd, 0x11, 0); // GPJ4_0 outpu

62、t high level</p><p>  fd = open("/dev/s3c2410_serial2", O_RDWR); // open serial 2</p><p>  tcgetattr(fd, &oldoptions); // 獲得當(dāng)前的串口設(shè)置信息</p><p> 

63、 tcgetattr(fd, &options);</p><p>  cfsetispeed(&options, B9600); // 設(shè)置輸入波特率為115200</p><p>  cfsetospeed(&options, B9600); // 設(shè)置輸出波特率為115200</p&

64、gt;<p>  options.c_cflag &= ~PARENB; // 設(shè)置串口屬性為:數(shù)據(jù)位為8位,停止位為1位,無奇偶校驗</p><p>  options.c_cflag &= ~CSTOPB;</p><p>  options.c_cflag |= CSTOPB;</p><p&g

65、t;  options.c_cflag &= ~CSIZE;</p><p>  options.c_cflag &= ~CS8;</p><p>  options.c_cflag |= CS8;</p><p>  options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); // 設(shè)置串口為Ra

66、w模式</p><p>  options.c_oflag &= ~OPOST;</p><p>  tcsetattr(fd, TCSANOW, &options); // 將上述設(shè)置生效</p><p><b>  while(1)</b></p><p><b>

67、;  {</b></p><p>  GPS_Read(fd, buf , len);</p><p>  if(GPS_Parse(buf,&GPS))</p><p><b>  {</b></p><p>  if(GPS.status == 'A')// 如果接收到

68、有效的數(shù)據(jù)</p><p><b>  {</b></p><p>  printf("時間: %2d:%2d:%2d\n",// 顯示時間</p><p>  GPS.D.hour,GPS.D.minute,GPS.D.second);</p><p>  printf("日期:

69、%d年%02d月%02d日\n",// 顯示日期</p><p>  GPS.D.year,GPS.D.month,GPS.D.day);</p><p>  printf("此時的海拔高度為:%10.4f \n",GPS.high);</p><p>  Degree = GPS.latitude/100;// 計算緯度的&q

70、uot;度"和"分"</p><p>  Cent = GPS.latitude - (Degree * 100);</p><p>  printf("緯度: ");// 顯示緯度</p><p>  if(GPS.NS == 'N')</p><p>  pr

71、intf("北緯(N)%d度%lf分 ",Degree,Cent);</p><p>  if(GPS.NS == 'S')</p><p>  printf("南緯(S)%d度%lf分 ",Degree,Cent);</p><p>  printf("\n");</p>

72、<p>  Degree = GPS.longitude/100;// 計算經(jīng)度的"度"和"分"</p><p>  Cent = GPS.longitude - (Degree * 100);</p><p>  printf("經(jīng)度: ");// 顯示經(jīng)度</p><p>

73、  if(GPS.EW == 'E')</p><p>  printf("東經(jīng)(E)%d度%lf分",Degree,Cent);</p><p>  if(GPS.EW == 'W')</p><p>  printf("西經(jīng)(W)%d度%lf分",Degree,Cent);</p>

74、;<p>  printf("\n\n\n");</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p&

75、gt;<p>  /******************************************</p><p>  * GPS_Read : read MSG from GPS module *</p><p>  *******************************************/</p><p>  int G

76、PS_Read(int fd, char *Data_Buff, int len)</p><p><b>  {</b></p><p>  int count = 0;</p><p>  int Flag = 0;</p><p>  while(Flag==0)</p><p><b

77、>  {</b></p><p>  read(fd, Data_Buff, 1);</p><p>  if(*Data_Buff == '\n')</p><p><b>  {</b></p><p><b>  Flag = 1;</b></p>

78、<p>  count = 0;</p><p><b>  }</b></p><p>  Data_Buff++;</p><p><b>  }</b></p><p><b>  return 0;</b></p><p><

79、b>  }</b></p><p>  /********************************************************</p><p>  * GPS_Parse : change MFS from GPS to sturct GPS_INFO *</p><p>  *******************

80、**************************************/</p><p>  int GPS_Parse(const char *line,GPS_INFO *GPS)</p><p><b>  {</b></p><p><b>  int tmp;</b></p><p&g

81、t;<b>  char c;</b></p><p>  char* buf ;</p><p>  buf = (char *)line;</p><p><b>  c=buf[5];</b></p><p>  if(c=='C'){//"GPRMC"&l

82、t;/p><p>  GPS->D.hour =(buf[ 7]-'0')*10+(buf[ 8]-'0');</p><p>  GPS->D.minute =(buf[ 9]-'0')*10+(buf[10]-'0');</p><p>  GPS->D.second =(buf[

83、11]-'0')*10+(buf[12]-'0');</p><p>  tmp = GetComma(9,buf);</p><p>  GPS->D.day =(buf[tmp+0]-'0')*10+(buf[tmp+1]-'0');</p><p>  GPS->D.month

84、 =(buf[tmp+2]-'0')*10+(buf[tmp+3]-'0');</p><p>  GPS->D.year =(buf[tmp+4]-'0')*10+(buf[tmp+5]-'0')+2000;</p><p>  Get_Char(&buf[7]);</p><p>

85、  strcpy(GPS->D.time_c,buf_t);</p><p>  //------------------------------</p><p>  GPS->status =buf[GetComma(2,buf)];</p><p>  #define ddd</p><p>  GPS->lati

86、tude =Get_Double_Number(&buf[GetComma(3,buf)]);</p><p>  printf("GPS->latitude = %f\n",GPS->latitude);</p><p>  GPS->NS =buf[GetComma(4,buf)];</p><p>

87、  Get_Char(&buf[GetComma(3,buf)]);</p><p>  strcpy(GPS->latitude_c,buf_t);</p><p>  GPS->longitude =Get_Double_Number(&buf[GetComma(5,buf)]);</p><p>  GPS->EW

88、 =buf[GetComma(6,buf)];</p><p>  Get_Char(&buf[GetComma(5,buf)]);</p><p>  strcpy(GPS->longitude_c,buf_t);</p><p>  UTC2BTC(&GPS->D);</p><p><b>  r

89、eturn 1;</b></p><p><b>  }</b></p><p>  if(c=='A'){ //"$GPGGA" </p><p>  GPS->high = Get_Double_Number(&buf[GetComma(9,buf)]); </

90、p><p>  return 1; </p><p><b>  }</b></p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  /***************************

91、******************************************</p><p>  * Get_Double_Number : change string before the frist ',' to double *</p><p>  *****************************************************

92、****************/</p><p>  double Get_Double_Number(char *s)</p><p><b>  {</b></p><p>  char buf[128];</p><p><b>  int i;</b></p><p&g

93、t;  double rev;</p><p>  i=GetComma(1,s);</p><p><b>  i=i-1;</b></p><p>  strncpy(buf,s,i);</p><p><b>  buf[i]=0;</b></p><p>  rev=

94、atof(buf);</p><p>  return rev;</p><p><b>  }</b></p><p>  /******************************************</p><p>  * Get_Char : get char before frist ",&

95、quot; *</p><p>  *******************************************/</p><p>  void Get_Char(char *s)</p><p><b>  {</b></p><p><b>  int i;</b></p&g

96、t;<p>  i=GetComma(1,s);</p><p><b>  i=i-1;</b></p><p>  if(i>9)i=9;</p><p>  strncpy(buf_t,s,i);</p><p>  buf_t[i]='\n';</p><p

97、><b>  }</b></p><p>  /******************************************</p><p>  * GetComma : get poistion of num-th "," *</p><p>  ***************************

98、****************/</p><p>  int GetComma(int num,char *str)</p><p><b>  {</b></p><p>  int i,j=0;</p><p>  int len=strlen(str);</p><p>  for(i=0

99、;i<len;i++)</p><p><b>  {</b></p><p>  if(str[i]==',')j++;</p><p>  if(j==num)return i+1;</p><p><b>  }</b></p><p><b

100、>  return 0;</b></p><p><b>  }</b></p><p>  /******************************************</p><p>  * UTC2BTC : get BeiJing time *</p><p>  *

101、******************************************/</p><p>  void UTC2BTC(date_time *GPS)</p><p><b>  {</b></p><p>  GPS->second++;</p><p>  if(GPS->second>

102、;59){</p><p>  GPS->second=0;</p><p>  GPS->minute++;</p><p>  if(GPS->minute>59){</p><p>  GPS->minute=0;</p><p>  GPS->hour++;</p>

103、;<p><b>  }</b></p><p><b>  }</b></p><p>  //------------------------------轉(zhuǎn)化為北京時間-----------------------------//</p><p>  GPS->hour=GPS->hour +

104、 8;</p><p>  if(GPS->hour>23)</p><p><b>  {</b></p><p>  GPS->hour-=24;</p><p>  GPS->day+=1;</p><p>  if(GPS->month==2 ||</p

105、><p>  GPS->month==4 ||</p><p>  GPS->month==6 ||</p><p>  GPS->month==9 ||</p><p>  GPS->month==11 ){</p><p>  if(GPS->day>30){</p>

106、<p>  GPS->day=1;</p><p>  GPS->month++;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else{</b></p><p>  

107、if(GPS->day>31){</p><p>  GPS->day=1;</p><p>  GPS->month++;</p><p><b>  }</b></p><p><b>  }</b></p><p>  if(GPS->ye

108、ar % 4 == 0 ){//</p><p>  if(GPS->day > 29 && GPS->month ==2){</p><p>  GPS->day=1;</p><p>  GPS->month++;</p><p><b>  }</b></p>

109、;<p><b>  }</b></p><p><b>  else{</b></p><p>  if(GPS->day>28 &&GPS->month ==2){</p><p>  GPS->day=1;</p><p>  GPS-&g

110、t;month++;</p><p><b>  }</b></p><p><b>  }</b></p><p>  if(GPS->month>12){</p><p>  GPS->month-=12;</p><p>  GPS->year+

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論