版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 畢業(yè)設(shè)計(jì)(論文)</b></p><p> 題 目 基于QT的多媒體車載導(dǎo)航系統(tǒng) </p><p> 學(xué)院名稱 電氣工程學(xué)院 </p><p> 指導(dǎo)教師 </p><p> 職 稱 教
2、授 </p><p> 班 級(jí) </p><p> 學(xué) 號(hào) </p><p> 學(xué)生姓名 </p><p> 2012年5月30日</p><p> 本科生畢業(yè)設(shè)計(jì)(論文
3、)開題報(bào)告</p><p> 摘要:隨著當(dāng)前嵌入式技術(shù)和汽車產(chǎn)業(yè)的迅猛發(fā)展,車載導(dǎo)航系統(tǒng)成為當(dāng)今汽車產(chǎn)業(yè)界的一大熱點(diǎn)之一。在歐美等發(fā)達(dá)國(guó)家,車載導(dǎo)航儀產(chǎn)品已經(jīng)走向成熟,形成了規(guī)?;氖袌?chǎng)需求。但中國(guó)的車載自主導(dǎo)航產(chǎn)品市場(chǎng)剛剛啟動(dòng),許多產(chǎn)品尚處于實(shí)驗(yàn)室研發(fā)階段。</p><p> 中國(guó)地域遼闊、人口眾多并發(fā)展迅速,必將成為巨大的汽車消費(fèi)市場(chǎng),因此隨著未來經(jīng)濟(jì)的發(fā)展,中國(guó)的車載導(dǎo)航產(chǎn)品將具
4、有廣闊的市場(chǎng)空間。研究車載導(dǎo)航系統(tǒng)在提高行車安全性、減輕駕駛者員負(fù)擔(dān)等方面具有很大作用,對(duì)解決城市交通問題具有重要意義。</p><p> 本論文首先討論了車載導(dǎo)航系統(tǒng)的原理和硬件結(jié)構(gòu),然后分析設(shè)計(jì)了軟件系統(tǒng)的工作流程及實(shí)現(xiàn)方案;重點(diǎn)介紹了在ARM處理器和Linux操作系統(tǒng)實(shí)現(xiàn)車載導(dǎo)航終端各功能模塊的詳細(xì)過程。系統(tǒng)由GPS數(shù)據(jù)采集并顯示、地圖顯示兩大部分組成,模擬GPS導(dǎo)航的過程。通過GPS模塊、arm9硬件環(huán)
5、境、嵌入式LINUX操作系統(tǒng)、TFT觸摸屏等模塊來完成整個(gè)體系的運(yùn)作,使其實(shí)時(shí)采集GPS數(shù)據(jù),然后將GPS數(shù)據(jù)對(duì)應(yīng)的地圖顯示出來。本設(shè)計(jì)的特點(diǎn)在于界面友好、用戶易操作、功耗低、便于戶外導(dǎo)航。</p><p> 關(guān)鍵詞:ARM;LINUX;GPS;C++語(yǔ)言;嵌入式操作系統(tǒng)</p><p> Abstract:With the rapid development of embedded
6、technology and automobile industry,vehicle navigation system has been well-known in automobile industry. In developed countries like Europe and US, car-borne navigator has matured and has a big market. However, this prod
7、uct appeared in China only a short time ago, so most of its types are still on trial. Due to its vast land, large population and rapid-developing economy, there will be a high consumption of cars in China. Therefore, car
8、-borne navig</p><p> This Paper first discusses the principle of the vehicle navigation system and the principle of hardware structure,then the analysis has designed sottwaresystem’S work flow and realizes
9、the plan,focused on the ARM processor and theLinux operating system to achieve vehicle navigation terminal and its functionalmodules of the detailed realization process.so this system consists of GPS data collection, map
10、 display composed of two parts, simulated GPS navigation process. Through the GPS module, arm9 </p><p> Keywords: ARM; LINUX; GPS; C + + language; embedded operating system</p><p> 1、 系統(tǒng)方案選擇和論
11、證1</p><p><b> 1.1引言1</b></p><p> 1.2 方案說明1</p><p> 1.2.1、 總體設(shè)計(jì)方案1</p><p> 1.2.2、 系統(tǒng)功能說明2</p><p> 1.3、 部分模塊設(shè)計(jì)方案2</p><p>
12、 1.3.1、 控制模塊設(shè)計(jì)方案2</p><p> 1.3.2、 操作系統(tǒng)選擇方案3</p><p> 1.3.3、 GPS模塊選擇方案3</p><p> 1.3.4、顯示模塊設(shè)計(jì)方案4</p><p> 1.3.5、地圖文件存放方案4</p><p> 1.4、總體方案確定4</p&
13、gt;<p> 1.4.1、系統(tǒng)硬件方案4</p><p> 1.4.2、軟件需求5</p><p> 2、 系統(tǒng)的硬件設(shè)計(jì)與實(shí)現(xiàn)5</p><p> 2.1、 主控芯片電路6</p><p> 2.2、 flash芯片電路7</p><p> 2.2.1、Nand flash芯片電
14、路8</p><p> 2.2.2、 nor flash芯片電路8</p><p> 2.3、 串口電路9</p><p> 2.4、 usb端口電路10</p><p> 2.5、 系統(tǒng)總線及l(fā)cd接口電路10</p><p> 2.6、 電源電路11</p><p>
15、 3、 系統(tǒng)的軟件設(shè)計(jì)11</p><p> 3.1、系統(tǒng)概述11</p><p> 3.2、軟件詳細(xì)設(shè)計(jì)11</p><p> 3.2.1、主函數(shù)11</p><p> 3.2.2、畫布13</p><p> 3.2.3、位圖元素13</p><p> 3.2.4、GP
16、S類14</p><p> 3.2.5、主界面20</p><p> 3.2.6、地圖窗口22</p><p> 3.2.7、多媒體播放窗口23</p><p> 3.2.8、游戲窗口24</p><p> 3.2.9、日歷窗口24</p><p> 3.2.10、電子書
17、窗口25</p><p> 3.2.11、聲卡驅(qū)動(dòng)移植26</p><p> 3.2.12、觸摸屏驅(qū)動(dòng)移植26</p><p> 3.2.13、RTC驅(qū)動(dòng)27</p><p> 4、 移植與測(cè)試28</p><p> 4.1、檢查編譯環(huán)境的搭建29</p><p> 4.
18、2、圖形界面的搭建30</p><p><b> 4.3、測(cè)試32</b></p><p><b> 5、 總結(jié)36</b></p><p> 1、 系統(tǒng)方案選擇和論證</p><p><b> 1.1、引言</b></p><p> G
19、PS 是英文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)航服務(wù),并用于情報(bào)收集、核爆監(jiān)測(cè)和應(yīng)急通訊等一些軍事目的。隨著人民生活水平的發(fā)展,GPS技術(shù)被越來越多的應(yīng)用在個(gè)人PDA、個(gè)人車載終端、手機(jī)等設(shè)備上。人們通過GPS,能準(zhǔn)確知道自己所在的
20、位置,從實(shí)現(xiàn)到導(dǎo)航、確定旅游路線、獲取地理信息等功能。本文介紹的GPS導(dǎo)航系統(tǒng),以ARM作為主控芯片,配以GPS、TFT觸摸屏、嵌入式LINUX操作系統(tǒng),構(gòu)建了一個(gè)集GPS信息顯示、地圖顯示為一體的完整系統(tǒng)。本系統(tǒng)在一定程度上推動(dòng)了GPS導(dǎo)航設(shè)備研究的發(fā)展。</p><p><b> 1.2 方案說明</b></p><p> 1.2.1、 總體設(shè)計(jì)方案</
21、p><p> 個(gè)人手持設(shè)備要求界面美觀、功耗低、易于操作。系統(tǒng)應(yīng)有彩色觸摸屏;低功耗、高速度的處理芯片;帶有嵌入式操作系統(tǒng);GPS信息接收模塊;sd卡用以存放地圖。</p><p> 模塊框圖分別如圖1所示:</p><p> 圖1.1 系統(tǒng)結(jié)構(gòu)框圖</p><p> 1.2.2、 系統(tǒng)功能說明</p><p>
22、<b> (1).定位功能</b></p><p> GPS通過接收衛(wèi)星信號(hào),可以準(zhǔn)確地定出其所在的位置,位置誤差小于10米。利用GPS,在地圖上實(shí)時(shí)顯示車輛當(dāng)前位置。</p><p> (2).地圖導(dǎo)航功能</p><p> 輸入目標(biāo)地點(diǎn)后,自動(dòng)在地圖上顯示出行車路線;假如用戶因?yàn)椴恍⌒腻e(cuò)過路口,沒有走車載GPS導(dǎo)航系統(tǒng)推薦的最佳線路
23、,新為用戶設(shè)計(jì)一條回到主航線路線,或是為用戶設(shè)計(jì)一條從新位置到終點(diǎn)的最佳線路。</p><p><b> (3).娛樂功能</b></p><p> 播放U盤、SD卡中的MP3、MP4文件,也可查看電子書。</p><p> (4).數(shù)據(jù)存儲(chǔ)功能</p><p> 將地圖文件,影音文件,電子書等數(shù)據(jù)存儲(chǔ)在SD卡中
24、。</p><p> 1.3、 部分模塊設(shè)計(jì)方案</p><p> 1.3.1、 控制模塊設(shè)計(jì)方案</p><p> ARM是一種處理器的IP核。英國(guó)ARM公司開發(fā)出處理器結(jié)構(gòu)后向其他芯片廠商授權(quán)制造,芯片廠商可以根據(jù)自己的需要進(jìn)行結(jié)構(gòu)與功能的調(diào)整,因此實(shí)際中使用的ARM處理器有很多種類,主要有三星、飛利浦、ATMEL、INTEL制造的幾大類,功能與使用上均不
25、相同。ARM處理器核還可以嵌入其他專用芯片中作為中央處理單元使用,例如飛利浦的MP3解碼芯片就是采用ARM7核心的。ARM系列處理器很少集成片上硬件資源,更接近今天的處理器范疇,基本不被認(rèn)為是單片機(jī)。 </p><p> AVR單片機(jī)是ATMEL公司研制開發(fā)的一種新型單片機(jī),它與51單片機(jī)、PIC單片機(jī)相比運(yùn)行效率高很多、芯片內(nèi)部的Flsah、EEPROM、SRAM容量較大、全部支持在線編程燒寫(ISP、每個(gè)I
26、O口都可以以推換驅(qū)動(dòng)的方式輸出高、低電平,驅(qū)動(dòng)能力強(qiáng)、內(nèi)部資源豐富,一般都集成AD、DA模數(shù)轉(zhuǎn)換器;PWM;SPI、USART、TWI、I2C通信口;豐富的中斷源等。主要現(xiàn)在使用的型號(hào)是ATMEGA8/16。因此有以下兩種選擇方案。</p><p> 方案一:采用凌陽(yáng)公司的16位單片機(jī),它是16位控制器,具有體積小、驅(qū)動(dòng)能力高、集成度高、易擴(kuò)展、可靠性高、功耗低、結(jié)構(gòu)簡(jiǎn)單、中斷處理能力強(qiáng)等特點(diǎn)。用于語(yǔ)音處理和識(shí)
27、別等領(lǐng)域。滿足系統(tǒng)GPS模塊和語(yǔ)音導(dǎo)航功能的需要。但由于本系統(tǒng)需要彩色人機(jī)交互界面,對(duì)處理速度要求較高,故不采用。</p><p> 方案二:采用三星公司的s3c2440。s3c2440采用ARM920t內(nèi)核,實(shí)現(xiàn)了MMU、ARBA、BUS和Harvard的高速緩沖體系結(jié)構(gòu)。它是一塊高性能、低功耗的嵌入式芯片,并且可植入操作系統(tǒng)。在個(gè)人PDA領(lǐng)域應(yīng)用較廣。植入操作系統(tǒng)后,用戶在GUI編程方面具有很大優(yōu)勢(shì)。它內(nèi)置
28、AD/DA,便于擴(kuò)展語(yǔ)音模塊。故選用此芯片為主控芯片。</p><p> 1.3.2、 操作系統(tǒng)選擇方案</p><p> 本項(xiàng)目選用Linux操作系統(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)的編譯,代碼重用率高。最重要的是
29、開放的源碼使開發(fā)成本降低。</p><p> 1.3.3、 GPS模塊選擇方案</p><p> 方案一:采用串口接口GPS模塊。優(yōu)點(diǎn):便于驅(qū)動(dòng),價(jià)格便宜。缺點(diǎn):嵌入式linux的調(diào)試需要用到串口,若GPS模塊占用了串口會(huì)造成調(diào)試不便。故不采用</p><p> 方案二:采用usb接口GPS模塊。優(yōu)點(diǎn):便于攜帶、連接開發(fā)板。缺點(diǎn):驅(qū)動(dòng)相對(duì)較難、價(jià)格相對(duì)較貴。為
30、了便于調(diào)試和攜帶,采用usb接口GPS模塊。</p><p> 1.3.4、顯示模塊設(shè)計(jì)方案</p><p> 方案一:采用LCD顯示。液晶顯示屏(LCD)具有輕薄短小,低耗電量。但不能實(shí)現(xiàn)觸摸功能,故不采用。</p><p> 方案二:采用TFT顯示。TFT屏幕帶有四線式電阻觸摸膜,能實(shí)現(xiàn)觸摸功能、便于用戶操作,故采用。</p><p&g
31、t; 1.3.5、地圖文件存放方案</p><p> 方案一:采用s3c2440核心板內(nèi)置nand flash 存放。Nand flash 讀取速度快。但容量較小,只有128M,不適合存放大量地圖數(shù)據(jù),故不采用。</p><p> 方案二:采用外置sd卡。Sd卡讀取速度相對(duì)較慢,且會(huì)增加成本。但能存放大量數(shù)據(jù)(1G~8G),地圖更新升級(jí)也很方便。故采用。</p><
32、;p> 1.4、總體方案確定</p><p> 1.4.1、系統(tǒng)硬件方案</p><p> 表1.1系統(tǒng)硬件方案</p><p> 1.4.2、軟件需求</p><p><b> 表1.2 軟件需求</b></p><p> 2、 系統(tǒng)的硬件設(shè)計(jì)與實(shí)現(xiàn)</p>&l
33、t;p> 系統(tǒng)硬件采用友善之臂的mini2440開發(fā)板。Mini2440體積小,便于攜帶;接口豐富,易于擴(kuò)展;功耗低,便于長(zhǎng)時(shí)間戶外導(dǎo)航。</p><p> Mini2440硬件特性如下圖:</p><p> 圖1.2 主控芯片電路</p><p> 2.1、 主控芯片電路</p><p> 主控芯片為s3c2440的6層核心
34、板,該核心板性能穩(wěn)定、工藝精良。</p><p> 圖2.1 主控芯片電路</p><p> 2.2、 flash芯片電路</p><p> flash閃存是非易失存儲(chǔ)器,可以對(duì)稱為塊的存儲(chǔ)器單元塊進(jìn)行擦寫和再編程。任何flash器件的寫入操作只能在空或已擦除的單元內(nèi)進(jìn)行,所以大多數(shù)情況下,在進(jìn)行寫入操作之前必須先執(zhí)行擦除。NAND器件執(zhí)行擦除操作是十分簡(jiǎn)單的
35、,而NOR則要求在進(jìn)行擦除前先要將目標(biāo)塊內(nèi)所有的位都寫為0。 由于擦除NOR器件時(shí)是以64~128KB的塊進(jìn)行的,執(zhí)行一個(gè)寫入/擦除操作的時(shí)間為5s,與此相反,擦除NAND器件是以8~32KB的塊進(jìn)行的,執(zhí)行相同的操作最多只需要4ms。 執(zhí)行擦除時(shí)塊尺寸的不同進(jìn)一步拉大了NOR和NADN之間的性能差距,統(tǒng)計(jì)表明,對(duì)于給定的一套寫入操作(尤其是更新小文件時(shí)),更多的擦除操作必須在基于NOR的單元中進(jìn)行。這樣,當(dāng)選擇存儲(chǔ)
36、解決方案時(shí),設(shè)計(jì)師必須權(quán)衡以下的各項(xiàng)因素。 ● NOR的讀速度比NAND稍快一些。 ● NAND的寫入速度比NOR快很多。 ● NAND的4ms擦除速度遠(yuǎn)比NOR的5s快。 ● 大多數(shù)寫入操作需要先進(jìn)行擦除操作。 ● NAND的擦除單元更小,相應(yīng)的擦除電路更少。 </p><p> 2.2.1、Nand flash芯片電路</p>
37、<p> Nand flash是操作系統(tǒng)的程序存儲(chǔ)區(qū),該芯片掉電不丟失數(shù)據(jù)、壽命長(zhǎng),可反復(fù)擦寫。芯片容量128M。適合存放高密度數(shù)據(jù)結(jié)構(gòu)</p><p> 圖2.2 nand flash芯片電路</p><p> 2.2.2、 nor flash芯片電路</p><p> Norflash是系統(tǒng)BIOS存儲(chǔ)區(qū)。該芯片掉電不丟失數(shù)據(jù)、壽命長(zhǎng),可反
38、復(fù)擦寫。芯片容量8M。適合高速度、低數(shù)據(jù)密度的數(shù)據(jù)結(jié)構(gòu)。NOR flash帶有SRAM接口,有足夠的地址引腳來尋址,可以很容易地存取其內(nèi)部的每一個(gè)字節(jié)。 </p><p> 圖2.3 nor flash芯片電路</p><p><b> 2.3、 串口電路</b></p><p> 采用max3232電平轉(zhuǎn)換芯片與計(jì)算機(jī)通信。&
39、lt;/p><p><b> 圖2.4 串口電路</b></p><p> 2.4、 usb端口電路</p><p> 采用usb2.0協(xié)議,usb接口是用來連接gps模塊。</p><p> 圖2.5 usb端口電路</p><p> 2.5、 系統(tǒng)總線及l(fā)cd接口電路</p>
40、<p> 圖2.6系統(tǒng)總線及l(fā)cd接口電路</p><p><b> 2.6、 電源電路</b></p><p> 系統(tǒng)的輸入電壓為DC5VC,因此可以通過LM1117-1.8、LM1117-33、MAX8869EU18芯片來轉(zhuǎn)換成系統(tǒng)需要的三種電壓分別為:1.8V、3.3V、1.25V。</p><p><b>
41、 圖2.6 電源電路</b></p><p> 3、 系統(tǒng)的軟件設(shè)計(jì)</p><p><b> 3.1、系統(tǒng)概述</b></p><p> 本系統(tǒng)的所有程序均采用C++語(yǔ)言編寫,開發(fā)工具為Qt,開發(fā)環(huán)境為ubuntu 11.10。應(yīng)用軟件開發(fā)的模塊化思想來開發(fā)這個(gè)項(xiàng)目,程序定義了許多類來分別管理各個(gè)模塊,通過對(duì)各個(gè)類的操作,
42、來構(gòu)建整個(gè)程序框架。各個(gè)類對(duì)象即可單獨(dú)提取出作為獨(dú)立的一個(gè)有機(jī)代碼,大大增加了項(xiàng)目的健壯性及可移植性。在將要進(jìn)行的以下的代碼介紹中一般只給出了定義,某些類的具體實(shí)現(xiàn)未給出。</p><p> 3.2、軟件詳細(xì)設(shè)計(jì)</p><p><b> 3.2.1、主函數(shù)</b></p><p> 主函數(shù),項(xiàng)目入口,用于啟動(dòng)其他模塊,并在屏幕上顯示主界
43、面窗口。</p><p> #ifndef MAINWINDOW_H</p><p> #define MAINWINDOW_H</p><p> #include <QMainWindow></p><p> #include <QCalendarWidget></p><p> #
44、include "gps.h"</p><p> #include "mplayer.h"</p><p> #include "ebook.h"</p><p> #include "minesweeping.h"</p><p> #include &
45、quot;ui_mainwindow.h"</p><p> /*namespace Ui {</p><p> class MainWindow;</p><p><b> }*/</b></p><p> class MainWindow : public QMainWindow,public Ui
46、::MainWindow</p><p><b> {</b></p><p><b> Q_OBJECT</b></p><p><b> public:</b></p><p> explicit MainWindow(QWidget *parent = 0);&l
47、t;/p><p> ~MainWindow();</p><p> public slots:</p><p> void ShowMplayer();</p><p> void ShowGps();</p><p> void ShowMine();</p><p> void Sh
48、owCalendar();</p><p> void ShowEbook();</p><p><b> private:</b></p><p> //Ui::MainWindow *ui;</p><p><b> };</b></p><p> #endif
49、 // MAINWINDOW_H</p><p> #include <QtGui/QApplication></p><p> #include "mainwindow.h"</p><p> int main(int argc, char *argv[])</p><p><b> {&l
50、t;/b></p><p> QApplication a(argc, argv);</p><p> MainWindow w;</p><p><b> w.show();</b></p><p> return a.exec();</p><p><b> }<
51、;/b></p><p><b> 3.2.2、畫布</b></p><p> 定義畫布,在此畫布上進(jìn)行圖形界面的生成,繪制,畫布也就相當(dāng)于一個(gè)窗口界面。我們所要展示的內(nèi)容都通過畫布產(chǎn)生界面,內(nèi)容在該界面生成,并且予以顯示。</p><p> #ifndef MYCAVANS_H</p><p> #def
52、ine MYCAVANS_H</p><p> #include <QGraphicsScene></p><p> #include "mypixitem.h"</p><p> class MyCavans:public QGraphicsScene</p><p><b> {</
53、b></p><p><b> Q_OBJECT</b></p><p><b> public:</b></p><p> explicit MyCavans(QObject *parent = 0);</p><p> ~MyCavans();</p><p&g
54、t; int pd(int x,int y)</p><p><b> {</b></p><p> if(x<0||x>9||y<0||y>9)</p><p><b> return 0;</b></p><p><b> return 1;</
55、b></p><p><b> }</b></p><p> void changeblock(int x,int y)</p><p> {pItem[x][y].changeMe();}</p><p> protected:</p><p> MyPixItem pItem[
56、10][10];</p><p> bool mineFlag[100];</p><p><b> int mNum;</b></p><p><b> };</b></p><p> #endif // MYCAVANS_H</p><p> 3.2.3、位圖元
57、素</p><p> 定義位圖元素,具體繪畫對(duì)象,以及在畫布上對(duì)繪畫對(duì)象的鼠標(biāo)事件的回應(yīng)。</p><p> #ifndef MYPIXITEM_H</p><p> #define MYPIXITEM_H</p><p> #include <QGraphicsPixmapItem></p><p&g
58、t; #include <QObject></p><p> class MyPixItem:public QGraphicsPixmapItem</p><p><b> {</b></p><p><b> public:</b></p><p> MyPixItem();
59、</p><p> bool getMflag()</p><p> {return mineflag;}</p><p> void changeMflag(bool m)</p><p> {mineflag = m;}</p><p> void addM()</p><p>
60、 {isMine++;}</p><p> void makex(int a)</p><p><b> {x = a;}</b></p><p> void makey(int a)</p><p><b> {y = a;}</b></p><p> stati
61、c void addok()</p><p> {okNum++;}</p><p> static int getok()</p><p> {return okNum;}</p><p> void changeMe();</p><p> int pd(int x,int y)</p>&
62、lt;p><b> {</b></p><p> if(x<0||x>9||y<0||y>9)</p><p><b> return 0;</b></p><p><b> return 1;</b></p><p><b>
63、 }</b></p><p><b> signals:</b></p><p> //void Pcheck(MyPixItem* p);</p><p> protected:</p><p> virtual void mousePressEvent(QGraphicsSceneMouseEve
64、nt *event);</p><p> bool okflag;</p><p> bool mineflag;</p><p> bool markflag;</p><p> int isMine;</p><p><b> int x;</b></p><p&
65、gt;<b> int y;</b></p><p> static int okNum;</p><p><b> };</b></p><p> #endif // MYPIXITEM_H</p><p> 3.2.4、GPS類</p><p> 定義類GPS
66、,用來讀取GPS接收器傳來的數(shù)據(jù),并進(jìn)行分析處理,用于汽車定位等。</p><p> #ifndef GPS_H</p><p> #define GPS_H</p><p> #include <QDialog></p><p> //#include "ui_gps.h"</p>&l
67、t;p> namespace Ui {</p><p> class gps;</p><p><b> }</b></p><p> class gps : public QDialog</p><p><b> {</b></p><p><b>
68、; Q_OBJECT</b></p><p><b> public:</b></p><p> explicit gps(QWidget *parent = 0);</p><p><b> ~gps();</b></p><p> int gpsState;</p&g
69、t;<p> void locate(float lng, float lat);</p><p> protected:</p><p> virtual void timerEvent ( QTimerEvent * event );</p><p> private slots:</p><p> void on
70、_pushButton_clicked();</p><p><b> private:</b></p><p> Ui::gps *ui;</p><p><b> };</b></p><p> int initGPS();</p><p> void clos
71、eGPS();</p><p> int getLngLat(float *longitude, float *latitude);</p><p> #endif // GPS_H</p><p> #include "gps.h"</p><p> #include<stdio.h></p&g
72、t;<p> #include<stdlib.h></p><p> #include "ui_gps.h"</p><p> #include<string.h></p><p> #include<sys/types.h></p><p> #include&
73、lt;sys/stat.h></p><p> #include<fcntl.h></p><p> #include<unistd.h></p><p> //#include<termios.h></p><p> #include<string.h></p>&
74、lt;p> #include <QtWebKit/QWebFrame></p><p> #include <QMessageBox></p><p> #include <iostream></p><p> using namespace std;</p><p> gps::gps(Q
75、Widget *parent) :</p><p> QDialog(parent),</p><p> ui(new Ui::gps)</p><p><b> {</b></p><p> ui->setupUi(this);</p><p> gpsState = initG
76、PS();</p><p> if (gpsState != 0)</p><p> cerr<<"GPS device can not be opend "<<gpsState<<endl;</p><p><b> }</b></p><p> gps:
77、:~gps()</p><p><b> {</b></p><p> closeGPS();</p><p> delete ui;</p><p><b> }</b></p><p> void gps::locate(float lng, float lat
78、)</p><p><b> {</b></p><p> QString call = "locateLngLat(";</p><p> QString num;</p><p> num.setNum(lng);</p><p> call += num;<
79、;/p><p> call += ", ";</p><p> num.setNum(lat);</p><p> call += num;</p><p> call += ")";</p><p> cout << "lng: " <
80、;< lng << "\t"</p><p> << "lat: " << lat << endl;</p><p> ui->webView->page()->mainFrame()->evaluateJavaScript(call);</p><
81、p><b> }</b></p><p> void gps::timerEvent ( QTimerEvent * event )</p><p><b> {</b></p><p> static float lng = 121.49704f;</p><p> static
82、float lat = 31.276478f;</p><p> lng += 0.00005f;</p><p> lat += 0.00005f;</p><p> int result = 0;</p><p> if ((result = getLngLat(&lng, &lat)) == 0) {</p
83、><p> cout<<"lng "<<lng<<'\t'<<lat<<endl;</p><p> locate(lng/100.0f, lat/100.0f);</p><p><b> }</b></p><p>&l
84、t;b> else</b></p><p> cerr<<"getLngLat error "<<result<<endl;</p><p><b> }</b></p><p> void gps::on_pushButton_clicked()</p&g
85、t;<p><b> {</b></p><p> static int timer = 0;</p><p> if (timer == 0) {</p><p> if (gpsState != 0) {</p><p> QMessageBox::information(</p>
86、<p><b> this,</b></p><p><b> "GPS",</b></p><p> "gps device can not be opened!",</p><p> QMessageBox::Ok);</p><p>
87、;<b> return;</b></p><p><b> }</b></p><p> timer = startTimer(5000);</p><p> cout<<"timer "<<timer<<"started"<<
88、;endl;</p><p><b> }</b></p><p><b> else {</b></p><p> killTimer(timer);</p><p> cout<<"timer "<<timer<<"sto
89、pped"<<endl;</p><p> timer = 0;</p><p><b> }</b></p><p><b> }</b></p><p> int set_opt(int fd,int nSpeed, int nBits, char nEvent,
90、int nStop)</p><p><b> {</b></p><p> struct termios newtio,oldtio;</p><p> if ( tcgetattr( fd,&oldtio) != 0) {</p><p> perror("SetupSerial 1&
91、quot;);</p><p> return -1;</p><p><b> }</b></p><p> bzero( &newtio, sizeof( newtio ) );</p><p> newtio.c_cflag |= CLOCAL | CREAD;</p><p
92、> newtio.c_cflag &= ~CSIZE;</p><p> switch( nBits )</p><p><b> {</b></p><p><b> case 7:</b></p><p> newtio.c_cflag |= CS7;</p>
93、<p><b> break;</b></p><p><b> case 8:</b></p><p> newtio.c_cflag |= CS8;</p><p><b> break;</b></p><p><b> }</b&
94、gt;</p><p> switch( nEvent )</p><p><b> {</b></p><p><b> case 'O':</b></p><p> newtio.c_cflag |= PARENB;</p><p> newti
95、o.c_cflag |= PARODD;</p><p> newtio.c_iflag |= (INPCK | ISTRIP);</p><p><b> break;</b></p><p><b> case 'E':</b></p><p> newtio.c_ifl
96、ag |= (INPCK | ISTRIP);</p><p> newtio.c_cflag |= PARENB;</p><p> newtio.c_cflag &= ~PARODD;</p><p><b> break;</b></p><p><b> case 'N'
97、:</b></p><p> newtio.c_cflag &= ~PARENB;</p><p><b> break;</b></p><p><b> }</b></p><p> switch( nSpeed )</p><p><b
98、> {</b></p><p> case 2400:</p><p> cfsetispeed(&newtio, B2400);</p><p><b> break;</b></p><p> case 4800:</p><p> cfsetispeed
99、(&newtio, B4800);</p><p> cfsetospeed(&newtio, B4800);</p><p><b> break;</b></p><p> case 9600:</p><p> cfsetispeed(&newtio, B9600);</p&g
100、t;<p> cfsetospeed(&newtio, B9600);</p><p><b> break;</b></p><p> case 115200:</p><p> cfsetispeed(&newtio, B115200);</p><p> cfsetospee
101、d(&newtio, B115200);</p><p><b> break;</b></p><p> case 460800:</p><p> cfsetispeed(&newtio, B460800);</p><p> cfsetospeed(&newtio, B460800)
102、;</p><p><b> break;</b></p><p><b> default:</b></p><p> cfsetispeed(&newtio, B9600);</p><p> cfsetospeed(&newtio, B9600);</p>
103、<p><b> break;</b></p><p><b> }</b></p><p> if( nStop == 1 )</p><p> newtio.c_cflag &= ~CSTOPB;</p><p> else if ( nStop == 2 )&l
104、t;/p><p> newtio.c_cflag |= CSTOPB;</p><p> newtio.c_cc[VTIME] = 0;</p><p> newtio.c_cc[VMIN] = 100;</p><p> tcflush(fd,TCIFLUSH);</p><p> if((tcsetat
105、tr(fd,TCSANOW,&newtio))!=0)</p><p><b> {</b></p><p> perror("com set error");</p><p> return -1;</p><p><b> }</b></p>&
106、lt;p><b> return 0;</b></p><p><b> }</b></p><p> static FILE *fp = NULL;</p><p> int initGPS()</p><p><b> {</b></p>&l
107、t;p> int nset1;</p><p> fp = fopen("/dev/ttyUSB0", "r");</p><p> if(NULL == fp)</p><p><b> {</b></p><p><b> return 1;</
108、b></p><p><b> }</b></p><p> nset1 = set_opt(fileno(fp),4800, 8, 'N', 1);</p><p> if (nset1 == -1) {</p><p> fclose(fp);</p><p>&
109、lt;b> return 2;</b></p><p><b> }</b></p><p><b> return 0;</b></p><p><b> }</b></p><p> void closeGPS()</p><
110、p><b> {</b></p><p><b> if (fp) {</b></p><p> fclose(fp);</p><p> fp = NULL;</p><p><b> }</b></p><p><b>
111、}</b></p><p> int getLngLat(float *longitude, float *latitude)</p><p><b> {</b></p><p> char buf[128];</p><p> char begin[20];</p><p>
112、; char SN[2] = {'\0'};</p><p> char WE[2] = {'\0'};</p><p> char *flager = ",";</p><p> while (1) {</p><p> memset(buf,'\0',128);
113、</p><p> if(NULL == fgets(buf, sizeof(buf), fp))</p><p><b> {</b></p><p><b> return 3;</b></p><p><b> }</b></p><p>
114、 memset(begin, '\0', sizeof(begin));</p><p> strcpy(begin, strtok(buf, flager));</p><p> if(0 == strcmp(begin, "$GPRMC"))</p><p><b> {</b></p>
115、;<p> strtok(NULL, flager);</p><p> strtok(NULL, flager);</p><p> *latitude = atof(strtok(NULL, flager));</p><p> strcpy(SN, strtok(NULL, flager));</p><p>
116、*longitude = atof(strtok(NULL, flager));</p><p> strcpy(WE, strtok(NULL, flager));</p><p><b> return 0;</b></p><p><b> }</b></p><p><b>
117、 }</b></p><p><b> }</b></p><p><b> 3.2.5、主界面</b></p><p> 主窗體通過五個(gè)pushButton發(fā)送信號(hào),彈出導(dǎo)航、多媒體、游戲、日歷和電子書五個(gè)窗體。點(diǎn)擊對(duì)應(yīng)選項(xiàng),將分別出現(xiàn)對(duì)應(yīng)的界面。</p><p> #ifn
118、def MAINWINDOW_H</p><p> #define MAINWINDOW_H</p><p> #include <QMainWindow></p><p> #include <QCalendarWidget></p><p> #include "gps.h"</p
119、><p> #include "mplayer.h"</p><p> #include "ebook.h"</p><p> #include "minesweeping.h"</p><p> #include "ui_mainwindow.h"</
120、p><p> /*namespace Ui {</p><p> class MainWindow;</p><p><b> }*/</b></p><p> class MainWindow : public QMainWindow,public Ui::MainWindow</p><p&g
121、t;<b> {</b></p><p><b> Q_OBJECT</b></p><p><b> public:</b></p><p> explicit MainWindow(QWidget *parent = 0);</p><p> ~MainWindo
122、w();</p><p> public slots:</p><p> void ShowMplayer();</p><p> void ShowGps();</p><p> void ShowMine();</p><p> void ShowCalendar();</p><p&
123、gt; void ShowEbook();</p><p><b> private:</b></p><p> //Ui::MainWindow *ui;</p><p><b> };</b></p><p> #endif // MAINWINDOW_H</p><
124、;p> #include "mainwindow.h"</p><p> MainWindow::MainWindow(QWidget *parent) :</p><p> QMainWindow(parent)</p><p><b> {</b></p><p> setupUi
125、(this);</p><p> connect(pushButton_2,SIGNAL(clicked()),this,SLOT(ShowMplayer()));</p><p> connect(pushButton,SIGNAL(clicked()),this,SLOT(ShowGps()));</p><p> connect(pushButton_3
126、,SIGNAL(clicked()),this,SLOT(ShowMine()));</p><p> connect(pushButton_4,SIGNAL(clicked()),this,SLOT(ShowCalendar()));</p><p> connect(pushButton_5,SIGNAL(clicked()),this,SLOT(ShowEbook()));<
127、;/p><p><b> }</b></p><p> MainWindow::~MainWindow()</p><p><b> {</b></p><p> //delete ui;</p><p><b> }</b></p>
128、<p> void MainWindow::ShowMplayer()</p><p><b> {</b></p><p> mplayer player;</p><p> player.exec();</p><p><b> }</b></p><p
129、> void MainWindow::ShowGps()</p><p><b> {</b></p><p><b> gps gps;</b></p><p> gps.exec();</p><p><b> }</b></p><p&
130、gt; void MainWindow::ShowMine()</p><p><b> {</b></p><p> minesweeping minesweep;</p><p> minesweep.exec();</p><p><b> }</b></p><
131、p> void MainWindow::ShowCalendar()</p><p><b> {</b></p><p> QWidget *widget = new QWidget();</p><p> widget->setGeometry(0,0,320,240);</p><p> wi
132、dget->setWindowFlags(Qt::FramelessWindowHint);</p><p> QCalendarWidget* calendar = new QCalendarWidget(widget);</p><p> calendar->setGeometry(0,0,320,200);</p><p> QPushBu
133、tton* quitButton = new QPushButton("back",widget);</p><p> quitButton->setGeometry(240,210,60,30);</p><p> QObject::connect(quitButton,SIGNAL(clicked()),widget,SLOT(close()));<
134、/p><p> widget->show();</p><p><b> }</b></p><p> void MainWindow::ShowEbook()</p><p><b> {</b></p><p> EBook book;</p>
135、<p> book.exec();</p><p><b> }</b></p><p> 3.2.6、地圖窗口</p><p> 地圖導(dǎo)航主要窗口,可在該窗口上進(jìn)行地圖導(dǎo)航,顯示位置等操作。</p><p> #ifndef GPS_H</p><p> #define G
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 車載多媒體娛樂導(dǎo)航系統(tǒng)-企業(yè)標(biāo)準(zhǔn)
- 基于QT的GPS車載導(dǎo)航系統(tǒng).pdf
- 多媒體車載導(dǎo)航系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 車載多媒體娛樂導(dǎo)航系統(tǒng)基礎(chǔ)知識(shí)
- 基于AU1200的車載多媒體導(dǎo)航系統(tǒng)硬件設(shè)計(jì).pdf
- 基于qt的校園導(dǎo)航系統(tǒng)
- 基于qt的校園導(dǎo)航系統(tǒng)論文.doc
- 購(gòu)物導(dǎo)航系統(tǒng)畢業(yè)論文
- 交通工程畢業(yè)論文基于動(dòng)態(tài)車載導(dǎo)航系統(tǒng)的浮動(dòng)車信息采集技術(shù)
- 【設(shè)計(jì)+論文】基于qt的校園導(dǎo)航系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 網(wǎng)址導(dǎo)航系統(tǒng)開發(fā)畢業(yè)論文
- 多媒體博客系統(tǒng)畢業(yè)論文
- 基于android車載導(dǎo)航系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
- 基于gps的車載導(dǎo)航系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
- 畢業(yè)論文——多媒體課程答疑系統(tǒng)
- 畢業(yè)論文——多媒體課程答疑系統(tǒng)
- 基于Linux的車載導(dǎo)航系統(tǒng)研究.pdf
- 基于SOC技術(shù)的車載定位導(dǎo)航系統(tǒng).pdf
- 東大購(gòu)物導(dǎo)航系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文
- 畢業(yè)論文——自適應(yīng)網(wǎng)絡(luò)課程學(xué)習(xí)導(dǎo)航系統(tǒng)
評(píng)論
0/150
提交評(píng)論