




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、南 陽 理 工 學(xué) 院本科生畢業(yè)設(shè)計(jì)論文學(xué)院系:計(jì)算機(jī)與信息工程學(xué)院專 業(yè): 通信工程 學(xué) 生: 劉丹 指導(dǎo)教師: 周國(guó)運(yùn) 完成日期 2021 年 4 月南陽理工學(xué)院本科生畢業(yè)設(shè)計(jì)論文基于ARM-LINUX的GPS導(dǎo)航系統(tǒng)Design and Development of Office Automation System總 計(jì):畢業(yè)設(shè)計(jì)論文-頁表 格:-個(gè)插 圖:-幅南 陽 理 工 學(xué) 院 本 科 畢 業(yè) 設(shè) 計(jì)論文基于ARM-LINUX的GPS導(dǎo)航系統(tǒng)Design and Development of Office Automation System學(xué) 院系: 計(jì)算機(jī)與信息工程學(xué)院 專 業(yè):
2、 通信工程 學(xué) 生 姓 名: 劉丹 學(xué) 號(hào): 0671080 指 導(dǎo) 教 師職稱: 周國(guó)運(yùn)教授 評(píng) 閱 教 師: 完 成 日 期: 2021年4月 基于ARM-LINUX的GPS導(dǎo)航系統(tǒng) 劉丹 摘要:本系統(tǒng)由GPS數(shù)據(jù)采集并顯示、地圖顯示兩大局部組成,模擬GPS導(dǎo)航的過程。通過GPS模塊、arm9硬件環(huán)境、嵌入式LINUX操作系統(tǒng)、TFT觸摸屏等模塊來完成整個(gè)體系的運(yùn)作,使其實(shí)時(shí)采集GPS數(shù)據(jù),然后將GPS數(shù)據(jù)對(duì)應(yīng)的地圖顯示出來,再利用串口將數(shù)據(jù)送入PC機(jī)數(shù)據(jù)庫中實(shí)現(xiàn)查詢等一系列功能。本設(shè)計(jì)的特點(diǎn)在于界面友好、用戶易操作、功耗低、便于長(zhǎng)時(shí)間戶外導(dǎo)航。關(guān)鍵詞:ARM;LINUX;GPS;C+語言
3、;SHELL編程;嵌入式操作系統(tǒng) The ARM-LINUX-based GPS navigation systemLiu dan Abstract: This system consists of GPS data collection, map display composed of two parts, simulated GPS navigation process. Through the GPS module, arm9 hardware environment, embedded LINUX operating system, TFT touch screen and other
4、 modules to complete the operation of the entire system to collect real-time GPS data, GPS data and then display the corresponding map, re-use the data into the PC serial port machine in the database queries, and so to achieve a series of functions. This design feature is user-friendly, user easy to
5、 operate, low power consumption, easy to navigate a long time outdoors.Keywords: ARM; LINUX; GPS; C + + language; SHELL programming; embedded operating system 目錄2.3.4.引言GPS 是英文Global Positioning System全球定位系統(tǒng)的簡(jiǎn)稱,而其中文簡(jiǎn)稱為“球位系。GPS是20世紀(jì)70年代由美國(guó)陸??杖娐?lián)合研制的新一代空間衛(wèi)星導(dǎo)航定位系統(tǒng) 。其主要目的是為陸、海、空三大領(lǐng)域提供實(shí)時(shí)、 全天候和全球性的導(dǎo)航效勞,并用
6、于情報(bào)收集、核爆監(jiān)測(cè)和應(yīng)急通訊等一些軍事目的。隨著人民生活水平的法杖,GPS技術(shù)被越來越多的應(yīng)用在個(gè)人PDA、個(gè)人車載終端、 等個(gè)人設(shè)備上。人們通過手持GPS,能準(zhǔn)確知道自己所在的位置,從實(shí)現(xiàn)到導(dǎo)航、確定旅游路線、獲取地理信息等功能。本文介紹的GPS導(dǎo)航系統(tǒng),以ARM作為主控芯片,配以GPS、TFT觸摸屏、嵌入式LINUX操作系統(tǒng),構(gòu)建了一個(gè)集GPS信息顯示、地圖顯示、語音導(dǎo)航為一體的完整系統(tǒng)。本系統(tǒng)在一定程度上推動(dòng)了個(gè)人手持GPS導(dǎo)航設(shè)備研究的開展。1 系統(tǒng)方案選擇和論證1.1 總體設(shè)計(jì)方案?jìng)€(gè)人手持設(shè)備要求界面美觀、功耗低、易于操作。系統(tǒng)應(yīng)有彩色觸摸屏;低功耗、高速度的處理芯片;帶有嵌入式操
7、作系統(tǒng);GPS信息接收模塊;sd卡用以存放地圖;TFT觸摸屏模塊框圖分別如圖1所示:Nor flash Nand flashSd卡存放地圖Gps模塊S3c2440串口調(diào)試及下載電 源圖1 系統(tǒng)結(jié)構(gòu)框圖Fig.1 System Structure Diagram1.2 局部模塊設(shè)計(jì)方案 控制模塊設(shè)計(jì)方案方案一:采用凌陽公司的16位單片機(jī),它是16位控制器,具有體積小、驅(qū)動(dòng)能力高、集成度高、易擴(kuò)展、可靠性高、功耗低、結(jié)構(gòu)簡(jiǎn)單、中斷處理能力強(qiáng)等特點(diǎn)。用于語音處理和識(shí)別等領(lǐng)域。滿足系統(tǒng)GPS模塊和語音導(dǎo)航功能的需要。由于本系統(tǒng)需要彩色人機(jī)交互界面,對(duì)處理速度要求較高,故不采用。方案二:采用samsun
8、g公司的s3c2440。S3c2440采用ARM920t內(nèi)核,實(shí)現(xiàn)了MMU、ARBA、BUS和Harvard高速緩沖體系結(jié)構(gòu)。是一塊高性能、低功耗的嵌入式芯片??芍踩氩僮飨到y(tǒng)。在個(gè)人PDA領(lǐng)域應(yīng)用及廣。植入操作系統(tǒng)后,在用戶GUI編程方面具有很大優(yōu)勢(shì)。內(nèi)置AD/DA,便于擴(kuò)展語音模塊。應(yīng)選用此芯片為主控芯片。1. 2. 2 操作系統(tǒng)選擇方案Linux操作系統(tǒng)廣泛應(yīng)用在嵌入式設(shè)備中,其源代碼開放、免費(fèi);內(nèi)核性能高效、多任務(wù)、可制定;完善的圖形管理、文件管理機(jī)制;良好的開發(fā)環(huán)境、強(qiáng)大的工具集 。可移植QT開發(fā)環(huán)境,可實(shí)現(xiàn)跨平臺(tái)的編譯,代碼重用率高。 GPS模塊選擇方案方案一:采用串口接口
9、GPS模塊。優(yōu)點(diǎn):便于驅(qū)動(dòng),價(jià)格廉價(jià)。缺點(diǎn):嵌入式linux的調(diào)試需要用到串口,假設(shè)GPS模塊占用了串口會(huì)造成調(diào)試不便。故不采用方案二:采用usb接口GPS模塊。優(yōu)點(diǎn):便于攜帶、連接開發(fā)板。缺點(diǎn):驅(qū)動(dòng)相對(duì)較難、價(jià)格相對(duì)較貴。為了便于調(diào)試和攜帶,采用usb接口GPS模塊。顯示模塊設(shè)計(jì)方案方案一:采用LCD顯示。液晶顯示屏LCD具有輕薄短小,低耗電量。但不能實(shí)現(xiàn)觸摸功能,故部采用。方案二:采用TFT顯示。TFT屏幕帶有四線式電阻觸摸膜,能實(shí)現(xiàn)觸摸功能、便于用戶操作,故采用。地圖文件存放方案方案一:采用s3c2440核心板內(nèi)置nand flash 存放。Nand flash 讀取速度快。但容量較小,
10、只有128M,不適合存放大量地圖數(shù)據(jù),故不采用。方案二:采用外置sd卡。Sd卡讀取速度相對(duì)較慢,且會(huì)增加本錢。但能存放大量數(shù)據(jù),地圖更新升級(jí)也很方便。故采用。1.3 總體方案確定1 控制芯片: 采用s3c2440 arm9 處理器2 液晶顯示模塊: 采用NEC TFT 3.5 寸屏幕3 GPS模塊: 采用三星公司的GPS-USBII模塊4 nand flash: 采用 K9F1208;5 nor flash: 采用 AM29LV160DB5 音頻處理芯片: UDA1341TS;6 SD卡 模塊: 采用金士頓公司的 4GB SD卡;7 電源模塊: 采用兩個(gè)8V可充電鋰電池;8 操作系統(tǒng): 采用嵌
11、入式linux操作系統(tǒng)2 系統(tǒng)的硬件設(shè)計(jì)與實(shí)現(xiàn) 系統(tǒng)硬件采用友善之臂的s3c2440 mini2440開發(fā)板。Mini2440 體積小,便于攜帶;接口豐富,易于擴(kuò)展;功耗低,便于長(zhǎng)時(shí)間戶外導(dǎo)航。Mini2440硬件特性如下列圖:圖2 主控芯片電路 Master-chip circuitry2.1 主控芯片電路主控芯片為s3c2440的6層核心板,該核心板性能穩(wěn)定、工藝精良。圖2.1 主控芯片電路Fig. Circuit of ultrasonic transmitting and receiving2.2 flash芯片電路2.21 nand flash芯片電路Nand flash 是操作系統(tǒng)
12、的程序存儲(chǔ)區(qū),該芯片掉電不喪失數(shù)據(jù)、壽命長(zhǎng),可反復(fù)擦寫。芯片容量128M。適合存放高密度數(shù)據(jù)結(jié)構(gòu)圖 主控芯片電路Fig. Circuit of ultrasonic transmitting and receiving 2.22 nor flash芯片電路Nor flash是系統(tǒng) BIOS 存儲(chǔ)區(qū)。該芯片掉電不喪失數(shù)據(jù)、壽命長(zhǎng),可反復(fù)擦寫。芯片容量8M。適合高速度、低數(shù)據(jù)密度的數(shù)據(jù)結(jié)構(gòu)。 圖 主控芯片電路 Fig. nor flash chip circuitry2.3 串口電路 采用max3232電平轉(zhuǎn)換芯片與計(jì)算機(jī)通信圖2.3 串口電路Fig. Serial circuit2.4 usb端
13、口電路采用usb2.0協(xié)議,usb接口用以連接gps模塊圖2.4 usb端口電路Fig. Driving circuit2.5 系統(tǒng)總線及l(fā)cd接口電路系統(tǒng)總線及l(fā)cd接口電路Fig. Driving circuit2.6 電源電路圖2.6 電源電路Fig.6 Power circuit3 系統(tǒng)的軟件設(shè)計(jì)本系統(tǒng)的所有程序均采用C+語言編寫,開發(fā)工具為QT embed 2.0。程序定義了許多類來分別管理各個(gè)模塊,通過對(duì)各個(gè)類的操作,來構(gòu)建整個(gè)程序框架。3.1 程序整體結(jié)構(gòu)框圖圖3.1 maintab類流程圖 Fig.3.1 Diagram of the overall structure of
14、program3.2 Maintab類 Maintab 類負(fù)責(zé)程序外框根本定義及程序初始化 開始 設(shè)置好衛(wèi)星信號(hào)強(qiáng)度數(shù)據(jù)設(shè)置窗口大小、顏色顯示窗口圖3.2 maintab類流程圖 Fig.3.2 maintab Class Flowchart3.3 mainwidgt類Mainwidgt類負(fù)責(zé)對(duì)各個(gè)按鈕部件、頁面部件的初始化開始 定義GPS時(shí)鐘 繪制主框 繪制上下左右四個(gè)按鍵 繪制三個(gè)頁面標(biāo)簽 連接點(diǎn)擊按鈕事件與處理按鍵程序 結(jié)束圖3.3 mainwidget 類流程圖Fig.3.3 mainwidget class Flowchart3.4 config類流程圖Config類用以實(shí)現(xiàn)對(duì)地圖路
15、徑、gps模塊波特率的設(shè)置 開始 設(shè)置地圖路徑 設(shè)置gps的波特率 結(jié)束圖3.4 config 類流程圖Fig.3.4 config class Flowchart 3.5 map類Map類負(fù)責(zé)讀取mapinfo文件里的地圖 ,并顯示對(duì)應(yīng)地圖。地圖顯示算法:首先把地圖分割成n*n小塊。然后系統(tǒng)通過得知整張地圖四角的坐標(biāo),計(jì)算出地圖每個(gè)像素點(diǎn)所對(duì)應(yīng)的坐標(biāo)。最后根據(jù)讀取的gps信息,找到對(duì)應(yīng)的地圖,并顯示到lcd上。 開始 讀取地圖的根本信息根據(jù)當(dāng)前gps信息找到對(duì)應(yīng)的地圖并顯示 N 地圖按鍵按下 Y 修改顯示的地圖 結(jié)束圖 map 類流程圖Fig.3.5 map class Flowchart
16、3.6 gps_diver類gps_diver類負(fù)責(zé)驅(qū)動(dòng)gps模塊,gps驅(qū)動(dòng)原理如下所述: 。L1為民用頻率,L2為軍用。民用GPS信號(hào)調(diào)試成C/A碼發(fā)送,C/A碼又被稱為粗捕獲碼,是1MHz的偽隨機(jī)噪聲碼PRN碼,其碼長(zhǎng)為1023位周期為1ms。用戶機(jī)接受到C/A碼后,通過gps接受器,解調(diào)為發(fā)送次C/A碼的衛(wèi)星時(shí)間。并通過多個(gè)衛(wèi)星發(fā)送的C/A碼時(shí)間差至少3個(gè),來確定當(dāng)前位置。并以串口的形式把經(jīng)緯度數(shù)據(jù)發(fā)送給上位機(jī)。 開始 設(shè)置串口屬性,訪問gps模塊設(shè)置gps時(shí)鐘 驅(qū)動(dòng)gps模塊計(jì)算經(jīng)緯度坐標(biāo)值結(jié)束圖3.6 gps_driver
17、類流程圖Fig. gps_driver class Flowchart 3.7 staSNR類StaSnR類負(fù)責(zé)對(duì)檢測(cè)衛(wèi)星數(shù)量,并告知gps_driver類。 開始 檢測(cè)衛(wèi)星數(shù)量 N 衛(wèi)星數(shù)量>3?Y 結(jié)束圖3.7 strSNR類流程圖Fig.3.7 strSNR class Flowchart 3.8 debugPDF類debugPDF類負(fù)責(zé)提供調(diào)試信息,錯(cuò)誤編號(hào)等內(nèi)容。調(diào)試程序時(shí),配合linux中g(shù)db命令。能實(shí)現(xiàn)斷點(diǎn)調(diào)試、逐步調(diào)試等功能并顯示對(duì)應(yīng)的錯(cuò)誤信息。定義如下:#include <stdlib.h>#include <stdio.h>#ifndef D
18、EBUG_PDF_H#define DEBUG_PDF_H/=debug level for info trace bug #define debug 1#define POP3DEBUG 1#ifdef POP3DEBUG #define PDF(level, fmt, args.) if (debug >= level) printf("%s:%d " fmt, _PRETTY_FUNCTION_, _LINE_ , # args)#else#define PDF(level, fmt, args.) do while(0)#endif0:沒有任何的顯示!1:正常
19、工作的,能顯示工作運(yùn)行主流程error exit fatal show it2:更進(jìn)一顯示信息3:完全跟蹤!3.9 Makefile文件Makefile文件為整個(gè)工程的管理文件 ,作用是連接各個(gè)頭文件、c文件,最終編譯成可執(zhí)行文件。由于使用qt開發(fā)環(huán)境,程序可以在x86平臺(tái)上與arm平臺(tái)上分別運(yùn)行。只需要修改Makefile文件中的編譯期即可。3.10 地圖文件mapinfo.txt 文件地圖文件由一大張成都市區(qū)地圖分割成許多小地圖。Map.cfg文件里包含了整張地圖信息。mapinfo:103.831787,30.687817,104.314155,30.473525,1500,1200,3
20、00。分別代表整個(gè)地圖的左上角經(jīng)緯度、右下角經(jīng)緯度、地圖像素的長(zhǎng)度、地圖像素的寬度、每張地圖的像素寬度。軟件通過讀取map.cfg的內(nèi)容,來獲取地圖的根本信息。地圖軟件獲取方法:采用專業(yè)地圖下載軟件 UMDuniversal maps download,用戶只需在此軟件里輸入想要地圖的四角經(jīng)緯度坐標(biāo)。即可得到所需地圖。保證mapinfo.txtL里的地圖坐標(biāo)與實(shí)際坐標(biāo)一致。4 測(cè)試4.1 操作系統(tǒng)燒寫測(cè)試安裝操作系統(tǒng)測(cè)試的目的是搭建系統(tǒng)的軟件環(huán)境,便于后續(xù)工作安裝linux有如下步驟1. 格式化nand flash2. 安裝bootloader3. 安裝內(nèi)核文件4. 安裝文件系統(tǒng)如下列圖所示圖
21、 燒寫操作系統(tǒng)-vivi界面Fig. Flow chart of program of cooling automatically安裝好操作系統(tǒng)后,重啟系統(tǒng),將出現(xiàn)如下畫面。 圖 操作系統(tǒng)啟動(dòng)畫面Figure operating system to start screen系統(tǒng)燒寫成功4.2 衛(wèi)星接收測(cè)試衛(wèi)星接收測(cè)試的目的是檢測(cè)接收到衛(wèi)星的數(shù)量,以便在接收到相同衛(wèi)星的情況下,檢測(cè)gps信號(hào)。測(cè)試位置:四川省成都市。第一次測(cè)試:位置室內(nèi) 衛(wèi)星數(shù)量 0 如下列圖: 圖 第一次衛(wèi)星接收測(cè)試Figure 4.2.1 The first test satellite reception第二次測(cè)試:位置室
22、外空曠地帶 衛(wèi)星數(shù)量 7 如下列圖: 圖 第二次衛(wèi)星接收測(cè)試Figure 4.2.2 The second test satellite reception第三次測(cè)試:位置街道 衛(wèi)星數(shù)量 6 如下列圖:圖 第三次衛(wèi)星接收測(cè)試Figure 4.2.2 The third test satellite reception經(jīng)測(cè)試,在室內(nèi)不能接收到衛(wèi)星的gps信號(hào)。故此系統(tǒng)只能在戶外使用。4.3 地圖顯示測(cè)試地圖顯示測(cè)試的目的是測(cè)試載入地圖的正誤、驗(yàn)證地圖上下左右移動(dòng)的功能。第一次測(cè)試: 能實(shí)現(xiàn)上下左右移動(dòng),顯示地圖如下列圖: 圖 第一次地圖顯示測(cè)試 Figure The first map show
23、s test第二次測(cè)試:能實(shí)現(xiàn)上下左右移動(dòng),顯示地圖如下列圖: 圖 第二次地圖顯示測(cè)試 Figure 4.3.2 The second map shows test第三次測(cè)試:能實(shí)現(xiàn)上下左右移動(dòng),顯示地圖如下列圖: 圖 第三次地圖顯示測(cè)試 Figure 4.3.3 The third map shows test經(jīng)測(cè)試地圖能準(zhǔn)確的載入,并能實(shí)現(xiàn)上下左右移動(dòng)的功能4.4 gps信號(hào)檢測(cè)測(cè)試 Gps信號(hào)測(cè)試的目的是測(cè)試gps信號(hào)的精確度,測(cè)試數(shù)據(jù)列于表3中。表3 gps數(shù)據(jù)測(cè)量表測(cè)試次數(shù)次第一次第二次第三次顯示經(jīng)緯度北緯: 106.09684 實(shí)際經(jīng)緯度北緯:106.080235 北緯:106.0
24、9851 誤差計(jì)算 0.013 0.012 0.0011%從上表可以看出,gps數(shù)據(jù)精確度較高,誤差都在0.01%左右4.5 功耗測(cè)試測(cè)試環(huán)境:戶外系統(tǒng)使用硬件:gps模塊、sd卡、液晶屏測(cè)試次數(shù)次第一次第二次第三次電流 300毫安 350 毫安 320毫安電壓功耗從上表可看出,系統(tǒng)功耗在1w左右。能滿足設(shè)計(jì)技術(shù)指標(biāo)。4.6 其他測(cè)試1地圖路徑變更測(cè)試 。 功能實(shí)現(xiàn),測(cè)試通過2gps串口波特率設(shè)置。 功能實(shí)現(xiàn),測(cè)試通過 4.7 測(cè)試結(jié)果分析由以上的測(cè)試數(shù)據(jù)可以看出:本GPS導(dǎo)航系統(tǒng)能很好地實(shí)現(xiàn)題目要求的各項(xiàng)功能。測(cè)試期間運(yùn)行穩(wěn)定,根本到達(dá)了設(shè)計(jì)要求。5 總結(jié)本系統(tǒng)成功的模擬了個(gè)人手持gps導(dǎo)航
25、系統(tǒng)。用戶通過點(diǎn)擊觸摸屏幕、方便的使用軟件。實(shí)現(xiàn)了地圖的顯示、拖動(dòng);gps信息、衛(wèi)星數(shù)量的顯示;地圖路徑的更改;gps波特率的更改的功能。系統(tǒng)低功耗、高處理速度、操作簡(jiǎn)易、界面有好。已具有一定的實(shí)用價(jià)值。通過這次畢業(yè)設(shè)計(jì),我在更加牢固、靈活地掌握了所學(xué)的專業(yè)知識(shí)的同時(shí)。大量學(xué)習(xí)了嵌入式方面的相關(guān)知識(shí):arm體系結(jié)構(gòu)、操作系統(tǒng)、c+編程、shell編程、硬件驅(qū)動(dòng)程序。參考文獻(xiàn):1 杜春雷 ARM體系結(jié)構(gòu)與編程 清華大學(xué)出版社 2003-08-12 2 c+語言程序設(shè)計(jì)第三版 鄭莉 董淵 張瑞豐 編著 清華大學(xué)出版社 2001-10-113 嵌入式系統(tǒng)開發(fā) 齊宇 徐俊 編著 人民郵電出版社 200
26、5-06-054 美Douglas Boling 嵌入式linux編程 北京科彥科技開展公司 譯 北京大學(xué)出版社 2003-03-125 張洪斌 QT編程指南 電子科技大學(xué)出版社 2006-06-126 李先力 文蒼茂 GPS原理及應(yīng)用清華大小而出版社 2004-08-278 李新峰 何廣生 趙秀文 基于ARM9的嵌入式Linux開發(fā)技術(shù) 電子工業(yè)出版社2003-03-189Thomas L.Floyd.Electronic Devices M. Prentice-Hall Inc, New jersey 1999-05-19致謝至此,我的畢業(yè)設(shè)計(jì)已經(jīng)根本完成?;叵脒^去的點(diǎn)點(diǎn)滴滴,如果沒有學(xué)校
27、、學(xué)院、老師、同學(xué)的關(guān)心和幫助,我也無法按期完成這令我滿意的作品。在此,我首先感謝學(xué)校和學(xué)院為我提供優(yōu)越的實(shí)驗(yàn)場(chǎng)所和器材,使我能夠更加方便、順利地進(jìn)行作品設(shè)計(jì)與調(diào)試,減少了設(shè)計(jì)周期;其次,我要感謝指導(dǎo)老師周國(guó)運(yùn)老師在百忙之中抽出時(shí)間同我一起探討系統(tǒng)構(gòu)架和軟件的編寫,并不厭其煩地替我修改論文,給我了莫大的幫助,并使我學(xué)到了很多東西。周老師嚴(yán)謹(jǐn)負(fù)責(zé)的治學(xué)態(tài)度,給我留下了深刻的印象,將使我終身受益。我再次對(duì)周老師這一年多來對(duì)我的關(guān)心和幫助表示最誠摯的謝意;最后,向在整個(gè)設(shè)計(jì)過程中關(guān)心和幫助過我的其他老師和同學(xué)致謝。附錄:附錄1:測(cè)試儀器表7 測(cè)試儀器設(shè)備清單序號(hào)型號(hào)、名稱用途數(shù)量1PC機(jī)編譯程序12
28、UT33D 數(shù)字萬用表測(cè)量各電路工作情況13Gps導(dǎo)航儀測(cè)試顯示的gps正誤14vm虛擬機(jī)測(cè)試操作系統(tǒng)15成都、南充市區(qū)地圖測(cè)試顯示地圖正誤26精密電流、電壓表測(cè)試系統(tǒng)功耗2附錄2:局部參考源程序Maintab 類程序:#include <qapplication.h>#include <qcanvas.h>#include <qfont.h>#include <qimage.h>#include <qpainter.h>#include <qrect.h>#include <qwidget.h>#includ
29、e <qimage.h>#include <qpixmap.h>#include <qpushbutton.h>#include <qlabel.h>#include <qdialog.h>#include <qpainter.h>#include <qapplication.h>#include <qwidget.h>#include <qglobal.h>#include <qcolor.h>#include <qlayout.h>#include <s
30、tdlib.h>#include <stdio.h>#include <qpalette.h>#include <qcolor.h>/=#include "MainWidget.h"#include "zhMap.h"#include "gps_driver.h"#include "maintab.h"#include "GPS.h"MainTab:MainTab(QWidget *parent,const char * name):QTabWidget
31、(parent,name)GpMainLayout=new MainLayout;GpGPS=new GPS;GpConfig=new Config;GpConfig->GetObject(GpMainLayout);GpConfig->GetObject(GpGPS);GpConfig->setCOMBDRate();GpConfig->setMapPath();addTab(GpMainLayout,QString("MAP");addTab(GpGPS,QString("GPS INFO");addTab(GpConfig,
32、QString("CONFIG");timerid=startTimer(1000);void MainTab:timerEvent(QTimerEvent * event)GPS_DATA mGPSData;int i;PDF(3,"TABMaster timer alarm!n");/=設(shè)置好衛(wèi)星信號(hào)強(qiáng)度數(shù)據(jù)!GpGPS->mpSatSNR->SetData(GpMainLayout->pzhDrawRect->pGpsdriver->mGPSStaSNR);/=GpMainLayout->pzhDrawRect-
33、>pGpsdriver->GetData(mGPSData);GpGPS->mpGPSinfo->SetData(mGPSData);/=PDF(3,"TABMaster timer endn");int main(int argc, char* argv) QApplication app(argc,argv);MainTab t;app.setMainWidget(&t);t.show();return app.exec();Gps_driver 類程序:#include <string.h> #include "g
34、ps_driver.h"#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>/*NMEA 0183 的 Checksum 只能作8位異或包括","的運(yùn)算,但不包括"$" 及 "*" 定義符號(hào)的運(yùn)算。 最后的兩位是檢驗(yàn)碼的hex(16進(jìn)制)轉(zhuǎn)成ASCII 兩個(gè)符號(hào) (0-9, A-F)。*/char nmea_checksum(char *sentence)/* is th
35、e checksum on the specified sentence good? */unsigned char sum = '0'char c, *p = sentence,csum2; c = *p; while (c != '*') sum = c;p+;c=*p; /= csum0=sum&0x0f; if(csum0>=10) csum0+='A' else csum0+='0'/= csum1=(sum&0xf0)>>4; if(csum1>=10) csum1+='
36、A' else csum1+='0'c= (csum1=toupper(p1) && csum0=toupper(p2) );return c;/ 0 is error int zh_gpsDriver:fifoctl(FifoType * priv ,int data ,const unsigned char flag)int temp = -1;unsigned int widx = 0; widx = priv->w_idx; /* Save the old index before proceeding */ if (flag = WR)
37、/write data /* Save it to buffer */ if (priv->w_idx + 1) % BUFSIZE) = priv->r_idx) /* Adjust read index since buffer is full */ /* 無法寫入來處理fifo滿。can wd to fifo */ /priv->r_idx = (priv->r_idx + 1) % BUFSIZE;/保證是環(huán)狀的FIFO。 PDF(2,"buffer fulln");return -1; priv->bufferpriv->w_i
38、dx = data; priv->w_idx = (priv->w_idx + 1) % BUFSIZE;/保證是環(huán)狀的FIFO。 return 0; else /read data if (priv->r_idx = widx) PDF(2, "buffer emptyn");return -1; else temp= priv->bufferpriv->r_idx; priv->r_idx = (priv->r_idx + 1) % BUFSIZE;/保證是環(huán)狀的FIFO。return temp; PDF(2, "fl
39、ag errorn");return -1;zh_gpsDriver:zh_gpsDriver(QObject * parent,const char * name):QObject(parent,name)COM_PARAM mCOMParam;mCOMParam.SerialDevicePath="/dev/ttyUSB0"mCOMParam.BaudRate=9600;id=startTimer(200);buf.pos=0;buf.sw=0;mpGPS_GPRMC=&mGPS_GPRMC;mpGPS_GPRMC->gps_sw='V&
40、#39;mpGPS_GPGSV=&mGPS_GPGSV;PDF(1,"gps driver construct!n");/* Open modem device for reading and writing and not as controlling * tty. | O_NONBLOCK*/fd=-1;setCOM(mCOMParam);int zh_gpsDriver:GPRS_GetTextLineFromFIFO( CMD_BUF * pcmd_buf) / 去掉換行符 int j=0;int idata;do idata=fifoctl(&fi
41、fo,idata,RD);if(idata=-1) return 0;else if(idata='n') pcmd_buf->bufpcmd_buf->pos=(char)(idata&0x00ff);pcmd_buf->pos+;pcmd_buf->sw=1;break;elsepcmd_buf->bufpcmd_buf->pos=idata;pcmd_buf->pos+;while(j+<BUFSIZE);/PDF(4,"end of a line !n"); if(pcmd_buf->po
42、s)>(BUFSIZE-5) PDF(2,"potential fiflo overflow!n");CMDBUF_Init(pcmd_buf);PDF(2,"pos=%dn",pcmd_buf->pos);pcmd_buf->bufpcmd_buf->pos='0'/PDF(4,"pos=%d ibufpos=%d a msg=%sn",pos,ibufpos,pStrBuffer); return 1;int zh_gpsDriver:zh_getGPSdata(GPS_DATA &
43、 gpsdata)PDF(3,"zh_getGPSdata!n");gpsdata.lati=mpGPS_GPRMC->latitude;gpsdata.lont=mpGPS_GPRMC->longitude ;return mpGPS_GPRMC->gps_sw;double ddmm2dddd(double ddmm)double fi,ffz,ffx;int fz;fi=ddmm;fz=(int)fi; ffz=(double)fz;/取整數(shù)局部ffx=fi-ffz;/取小數(shù)局部fi=ffz+ffx/0.6; PDF(2,"ddmm=%lf
44、 dddd:%lfn" ,ddmm,fi ); return fi; int zh_gpsDriver:GPGSV_Analysis( GPS_GPGSV * pGPS_GPGSV)switch(pGPS_GPGSV->GSV_ID)case 1:memcpy(&(mGPSStaSNR.Sta0),&(pGPS_GPGSV->Sta1),sizeof(STA_INFO);memcpy(&(mGPSStaSNR.Sta1),&(pGPS_GPGSV->Sta2),sizeof(STA_INFO);memcpy(&(mGPSSta
45、SNR.Sta2),&(pGPS_GPGSV->Sta3),sizeof(STA_INFO);memcpy(&(mGPSStaSNR.Sta3),&(pGPS_GPGSV->Sta4),sizeof(STA_INFO);break;case 2:memcpy(&(mGPSStaSNR.Sta4),&(pGPS_GPGSV->Sta1),sizeof(STA_INFO);memcpy(&(mGPSStaSNR.Sta5),&(pGPS_GPGSV->Sta2),sizeof(STA_INFO);memcpy(&
46、;(mGPSStaSNR.Sta6),&(pGPS_GPGSV->Sta3),sizeof(STA_INFO);memcpy(&(mGPSStaSNR.Sta7),&(pGPS_GPGSV->Sta4),sizeof(STA_INFO);break;case 3:memcpy(&(mGPSStaSNR.Sta8),&(pGPS_GPGSV->Sta1),sizeof(STA_INFO);memcpy(&(mGPSStaSNR.Sta9),&(pGPS_GPGSV->Sta2),sizeof(STA_INFO);me
47、mcpy(&(mGPSStaSNR.Sta10),&(pGPS_GPGSV->Sta3),sizeof(STA_INFO);memcpy(&(mGPSStaSNR.Sta11),&(pGPS_GPGSV->Sta4),sizeof(STA_INFO);break;default:break;int zh_gpsDriver:CMD_Analysis( CMD_BUF * pcmd_buf )char* pcmd;int i;if( pcmd_buf->sw =1) PDF(3,"sentence: %sn endn",pcm
48、d_buf->buf);pcmd=strstr(&pcmd_buf->buf0,"$GPRMC");/只對(duì)此語句解析if (pcmd!=NULL) if (!nmea_checksum(&pcmd1) PDF(2,"check sum errorn");/*CMDBUF_Init(&buf); return 1;*/ /2:判斷有效性。i= sscanf(pcmd,"%*AV%c,",&mpGPS_GPRMC->gps_sw);PDF(3,"gpsSwFiled=%cn&qu
49、ot;,mpGPS_GPRMC->gps_sw);if(mpGPS_GPRMC->gps_sw='V') PDF(3,"V invalid datan"); CMDBUF_Init(&buf); return 2; /sscanf 并不能由空值來輸入浮點(diǎn)數(shù)。 / printf("Gpsid=%sn utc_time=%sn gps_sw=%cn latitude=%lfn lati_ns=%cn longitude=%lfn longi_ew=%cn spd=%lf",/Gpsid,utc_time,gps_sw,la
50、titude, lati_ns,longitude,longi_ew,spd); i= sscanf(pcmd,"%,%,%c,%lf,%c,%lf,%c,%lf,%lf,%,%lf,%c,%s",mpGPS_GPRMC->Gpsid, mpGPS_GPRMC->utc_time,&mpGPS_GPRMC->gps_sw, &mpGPS_GPRMC->latitude,&mpGPS_GPRMC->lati_ns, &mpGPS_GPRMC->longitude,&mpGPS_GPRMC->longi_ew,/*7*/&mpGPS_GPRMC->speed,&mpGPS_GPRMC->angle,mpGPS_GPRMC->utc_date,&mpGPS_GPRMC->magneDeclinat,&mpGPS_GPRMC->magneDeclinatAngle,mpGPS_GPRMC->sumCheck);/請(qǐng)檢查 sscanf 的返回值,可能會(huì)失敗,如果小于要收得的數(shù)目。if(i<13) /轉(zhuǎn)換失敗, PDF(2,"sscanf
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年貴州省畢節(jié)地區(qū)單招職業(yè)傾向性測(cè)試題庫新版
- 2025年廣西科技職業(yè)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫匯編
- 藥學(xué)模擬練習(xí)題+參考答案
- 2025年Γ-FE2O3項(xiàng)目發(fā)展計(jì)劃
- 2025年地(水)面效應(yīng)飛機(jī)項(xiàng)目合作計(jì)劃書
- 2025年貴州航空職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫帶答案
- 第15課 向世界介紹我的學(xué)校-創(chuàng)作與發(fā)布-教學(xué)設(shè)計(jì) 2024-2025學(xué)年浙教版(2023)初中信息技術(shù)七年級(jí)上冊(cè)
- 2025年聚光太陽灶項(xiàng)目發(fā)展計(jì)劃
- 2025年湖南電子科技職業(yè)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫一套
- 2025年廣西工業(yè)職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)傾向性測(cè)試題庫一套
- 2024年河南鄭州二七區(qū)侯寨中心衛(wèi)生院招聘筆試真題
- 中國(guó)糖尿病防治指南+2024+解讀
- 數(shù)學(xué)-山東省天一大聯(lián)考齊魯名校教研共同體2024-2025學(xué)年(下)高三開學(xué)質(zhì)量檢測(cè)聯(lián)考試題和答案
- 崗位職責(zé)心得體會(huì)(2篇)
- 2025年上海寶冶集團(tuán)限公司招聘歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 機(jī)械設(shè)計(jì)基礎(chǔ) 課件 01機(jī)械設(shè)計(jì)概論
- GB/T 6822-2024船體防污防銹漆體系
- 全國(guó)第三屆職業(yè)技能大賽(智能網(wǎng)聯(lián)汽車裝調(diào)運(yùn)維)選拔賽理論考試題庫(含答案)
- 電信網(wǎng)絡(luò)詐騙犯罪的特征、治理困境及對(duì)策建議
- 救護(hù)車掛靠私立醫(yī)院協(xié)議書(2篇)
- 《血透患教》課件
評(píng)論
0/150
提交評(píng)論