版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 測量旗桿的高度教學(xué)設(shè)計
- 測量旗桿的高度教案
- 《測量旗桿的高度》教案
- 測量學(xué)校旗桿的高度
- 數(shù)學(xué)活動—測量旗桿的高度說課稿
- 《測量旗桿的高度》教學(xué)設(shè)計(附教學(xué)反思)
- 好,測量旗桿的高度活動課
- 高度卡尺校準(zhǔn)測量不確定度評估
- 優(yōu)質(zhì)課競賽教案---《測量旗桿的高度》
- 礦山測量課程設(shè)計
- 礦山測量課程設(shè)計
- 礦山測量課程設(shè)計
- 工程測量課程設(shè)計
- 工程測量課程設(shè)計
- 研究性學(xué)習(xí)課題 測量旗桿的高度
- 優(yōu)質(zhì)課競賽教案《測量旗桿的高度》
- 電阻測量課程設(shè)計
- 控制測量課程設(shè)計
- 礦上測量課程設(shè)計
- 溫度測量課程設(shè)計
評論
0/150
提交評論