基于Qt的汽車車速儀表盤的設計講解_第1頁
基于Qt的汽車車速儀表盤的設計講解_第2頁
基于Qt的汽車車速儀表盤的設計講解_第3頁
基于Qt的汽車車速儀表盤的設計講解_第4頁
基于Qt的汽車車速儀表盤的設計講解_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、 研究生課程論文 基于 Qt 的汽車車速儀表盤的設計 學院:信息工程學院 專業(yè):交通信息工程及控制 課程:嵌入式系統(tǒng)及應用 姓名: 學號: 授課教師: 研究背景 儀表作為汽車整個系統(tǒng)中十分重要的部分, 是提高汽車綜合性能的重要方面之一。 隨著 計算機軟硬件技術、總線技術、電子技術等的快速發(fā)展,控制系統(tǒng)臃腫、接線布線復雜、占 用空間大的傳統(tǒng)電磁機械儀表漸漸被淘汰, 虛擬儀表正以傳統(tǒng)機械儀表無法比擬的速度迅猛 發(fā)展。 目前虛擬儀表通常包括純數(shù)字儀表和虛擬儀表盤儀表兩種: 純數(shù)字儀表成本較低, 但 功能和界面比較簡單, 滿足不了一般駕駛員的需求; 而現(xiàn)有的虛擬儀表盤儀表雖然功能和界 面比較豐富,但又

2、存在著開發(fā)成本高、可移植性和可重繪性差、可擴展性不足等缺點, 不利 于大范圍的推廣與應用。 針對傳統(tǒng)儀表和現(xiàn)有儀表存在的不足,本文提出了一種新型的車載虛擬儀表設計方案, 采用 ARM 處理器 S3C6410為核心的硬件平臺和以嵌入式 Linux 系統(tǒng)為核心的軟件平臺,并 在此基礎上采用開放源代碼的圖形界面庫 QT 開發(fā)儀表終端應用程序。該虛擬儀表可讀性 好,讀數(shù)精度高,在可移植性、 可維護性和成本方面都得到了良好的改善, 具有較大的科研 價值和商業(yè)使用價值。本文目前只實現(xiàn)了儀表中關于車速的終端應用程序。 二 開發(fā)環(huán)境 2.1 Ubuntu 與 Qt 簡介 Ubuntu 是一個以桌面應用為主的

3、Linux 操作系統(tǒng),其名稱來自非洲南部祖魯語或豪薩 語的“ ubuntu”一詞,意思是“人性”、“我的存在是因為大家的存在”,是非洲傳統(tǒng)的一 種價值觀, 類似華人社會的“仁愛”思想。 Ubuntu 擁有很多優(yōu)點。 相對于其他版本的 Linux , Ubuntu 也有著自己的優(yōu)勢。首先,安裝系統(tǒng)非常簡單,只需要非常少的設置即可,完全可 以和 Windows 桌面系統(tǒng)相媲美;其次,圖形界面很人性化,模仿了在 xp 下常用的快捷鍵; 還有,安裝和升級程序時,可以通過網(wǎng)絡,由系統(tǒng)自行安裝依賴的文件包,從此不必再為 Linux 系統(tǒng)的依賴關系大傷腦筋。 Ubuntu 的目標在于為一般用戶提供一個最新的

4、、 同時又相 當穩(wěn)定的主要由自由軟件構建而成的操作系統(tǒng)。 Qt 是一個 1991年由奇趣科技開發(fā)的跨平臺 C+ 圖形用戶界面應用程序開發(fā)框架。它既 可以開發(fā) GUI 程式,也可用于開發(fā)非 GUI 程式,比如控制臺工具和服務器。它提供給應用 程序開發(fā)者建立藝術級的圖形用戶界面所需的所用功能。 它注重于能給用戶提供精美的圖形 界面所需的所有元素, 而且其開發(fā)過程是基于面向對象的編程思想, 并且它支持真正的組件 編程。 Qt 是面向對象的框架,使用特殊的代碼生成擴展 ( 稱為元對象編譯器 (Meta Object Compiler, moc) 以及一些宏, 易于擴展, 允許組件編程。 基本上, Qt

5、 同 X Window 上的 Motif , Openwin , GTK 等圖形界面庫和 Windows 平臺上的 MFC , OWL ,VCL ,ATL 是同類型的 東西。 2.2 安裝過程 主機 Linux 開發(fā)環(huán)境: Ubuntu Linux 操作系統(tǒng), 交叉編譯器: arm-linux-gcc-4.3.2 , ARM 的內核使用的版本: linux-3.0.1 。 2.2.1 主機上 Linux 的相關配置 1. Ubuntu 設置為 root用戶 在 Ubuntu 中新建一個終端,輸入如下命令: #sudo s #sudo passwd 輸入要設置的密碼,這樣以后我們只需要重新啟動

6、Ubuntu ,我們就可以用 root用戶登錄 了。 Linux 系統(tǒng)對不同的用戶有不同的權限設置, root用戶具有最高權限。 2. Ubuntu網(wǎng)絡參數(shù)設置 啟動 Ubuntu,在桌面上端的網(wǎng)絡圖標上點擊右鍵,選擇“編輯網(wǎng)絡” ,在“網(wǎng)絡連接” 面板上選中 Auto eth0 ,通過 Auto eth0 設置 Ubuntu 的IP地址、子網(wǎng)掩碼、網(wǎng)關、 DNS等信息, 我們可以將 Ubuntu 的IP地址和主機的 IP地址設置在同一個網(wǎng)段, 這樣我們通過虛擬機 “橋接” 的方式就可以在 Ubuntu訪問 Internet了,這樣比較方面對一些開發(fā)包的下載。 3. 安裝交叉編譯器 交叉編譯器

7、是在交叉編譯中必不可少的工具, 我們需要開發(fā) ARM 的Linux 程序就必須在 我們的主機上安裝交叉編譯器,交叉編譯器的版本要與 ARM 使用的內核版本一致,否則會 產生運行錯誤。本次式樣使用的交叉編譯器為 arm-linux-gcc-4.3.2 , ARM 的內核使用的版本 為 linux-3.0.1 。 本次試驗在網(wǎng)上下載了交叉編譯器 arm-linux-gcc-4.3.2 的源碼包 arm-linux-gcc-4.3.2.tgz 。 在Ubuntu 的終端下通過命令解壓該源碼包,命令如下: #tar xzvf arm-linux-gcc-4.3.2.tgz 該命令執(zhí)行完后會生成 4.3

8、.2目錄,我們進入該目錄的 bin 目錄下可以看見我們的交叉編 譯器安裝文件 arm-none-linux-gnueabi-gcc ,并且我們可以通過相應的命令查看我們編譯器的 版本信息。 2.2.2 Linux 系統(tǒng)移植 1. 編譯 UBoot 和 Linux 內核 A. 編譯 UBoot UBoot 是引導是 Linux 系統(tǒng)的引導啟動項,需要將 UBboot 的源碼編譯成為 u-boot.bin 的可 執(zhí)行文件。這樣就可以在通過 SD卡將Linux 系統(tǒng)一鍵燒寫到 S3C6410的開發(fā)板中了。在飛凌 的官網(wǎng)上下載了 uboot 的源碼包 uboot1.16_FORLINX_6410.tg

9、z 。通過解壓命令解壓該源碼包。 命令如下: #tar zxf uboot1.16_FORLINX_6410.tgz 解壓完成后會生成一個 uboot1.16目錄。在編譯之前需要配置 config 文件,進入 uboot1.16 目錄通過命令: #make forlinx_nand_ram128_config (配置適用于 128M 內存開發(fā)板的 config ) #make clean(刪除以前編譯的文件) #make (編譯) 如果編譯成功,將在 uboot1.16 目錄下產生一個 u-boot.bin 文件,這就是需要燒寫到 Nandflash 的U-boot 引導文件的鏡像文件。 B.

10、 Linux 內核編譯 需要對 Linux 的內核源碼進行編譯,首先通過命令對內核源碼的壓縮包進行解壓: #tar zxf FORLINX_linux-3.0.1.tar.gz 同樣,需要配置內核,在配置內核的時候需要使用“make menuconfig ”命令,這樣需 要安裝“ libncurses5”來支持其操作。命令如下: #sudo apt-get install libncurses5-dev #make menuconfig (配置內核) #make zImage 編譯結束后,會在內核源碼目錄的 /arch/arm/boot中得到 Linux 內核映像文件 zImage。 2. 制

11、作 yaffs2 文件系統(tǒng)映像 本實驗通過飛凌自帶的文件系統(tǒng)目錄, 也可以根據(jù)自己的需求自己完成滿足需要文件系 統(tǒng),但由于時間問題我們借助飛凌提供的文件系統(tǒng)目錄生成系統(tǒng)文件。 用 Yaffs文件系統(tǒng)制作工具,制作文件系統(tǒng) Yaffs。通過命令: #./mkyaffs2inage-nand256m FileSystem-Yaffs2 rootfs.yaffs2 這樣生成 rootfs.yaffs2 是可以下載到開發(fā)板 nandflash 中的 yaffs2 文件系統(tǒng)映像 3. Linux 系統(tǒng)移植 在向 ARM 中移植 Linux 操作系統(tǒng)的時候需要一張 SD 卡,可以通過 S3C6410 的一

12、件燒 寫功能將剛剛編譯好的 u-booot.bin 、zImage 、rootfs.yaffs 三個文件寫入 ARM 開發(fā)板目錄下。 首先需要將 SD 卡格式化為 FAT32 格式并且將 u-booot.bin 、zImage、rootfs.yaffs 文件考入 SD 卡中,在開發(fā)板中,調整撥碼開關設置 ARM 為從 SD 卡啟動,在啟動完成后,需要將撥碼 開關設置為從 nand flash 啟動。這樣就完成了 Linux 系統(tǒng)的燒寫。 2.2.3 Qtopia 交叉編譯環(huán)境的搭建 1. 編譯第三方庫 編譯 Qtopia 需要第三方庫的支持,下載到了第三方庫的源碼和編譯好的庫文件,用的 第三庫

13、文件為 3rdpart-lib-for-Qtopia2.2.0.tar.gz 。通過命令解壓該壓縮包,得到 jpeg-6b(一個 jpeg 圖形編碼解碼程序庫) 、libpng-1.2.19 (一個 png 圖形編碼解碼程序庫) 、 zlib-1.2.3 (一 個壓縮解壓程序庫) 、 e2fsprogs-1.40.2(提供 uuid 支持)。 A. 交叉編譯 jpeg庫 設置環(huán)境變量: #export PATH=/usr/local/arm/4.4.1/bin:$PA TH #export CC=/usr/local/arm/4.4.1/bin/arm-linux-gcc #./configu

14、re enable-shared 修改生成的 Makefile 文件 CC=/usr/local/arm/4.4.1/bin/arm-linux-gcc AR=/usr/local/arm/4.4.1/bin/arm-linux-ar rc AR2=/usr/local/arm/4.4.1/bin/arm-linux-arnlib 保存 #cp jconfig.doc jconfig.h #make 編譯通過,執(zhí)行以下命令即可完成 jpeg 頭文件和庫文件的制作。 #cp jpeglib.h jconfig.h jmorecfg.h /root/yizhi/arminclude #cp .li

15、bs/libjpeg.so* /root/yizhi/armlib B. 交叉編譯 e2fsprogs-1.40.2庫 編譯 e2fsprogs-1.40.2 是為了得到兩個文件, uuid.h 及 libuuid.so ,編譯 Qtopia2.2.0 需要 這兩個頭文件。 設置環(huán)境變量: #export PATH=/usr/local/arm/4.4.1/bin:$PA TH #export CC=/usr/local/arm/4.4.1/bin/arm-linux-gcc 以上兩個環(huán)境變量已經設置過,所以不需要在重新設置了,可以直接執(zhí)行配置命令。 #./configure enable-e

16、lf-shilbs host=arm-linux with-cc=/usr/local/arm/4.4.1/bin/arm-linux-gcc with-linker=/usr/local/arm/4.4.1/bin/arm-linux-ld #make 這樣就可以生成 uuid.h 及 libuuid.so 兩個文件。 C. 交叉編譯 libpng 庫 Libpng 這里的 Makefile 不用 ./configure 生成的, 而是直接從 scripts 文件夾里復制的, 修 改 Makefile 文件: #vi Makefile 修改: begin AR_RC=/usr/local/a

17、rm/4.4.1/bin/arm-linux-ar rc CC=/usr/local/arm/4.4.1/bin/arm-linux-gcc RANLIB=/usr/local/arm/4.4.1/bin/arm-linux-arnlib end 保存 #make #cp libpng12.so* /root/yizhi/armlib #cp *.h /root/yizhi/arminclude 完成 libpng 頭文件和庫文件的制作。 D. 交叉編譯 zlib #export PATH=/usr/local/arm/4.4.1/bin:$PA TH #export CC=/usr/loca

18、l/arm/4.4.1/bin/arm-linux-gcc #export LD_LIBRARY_PA TH=/usr/local/arm/4.4.1/arm-linux/lib:$LD_LIBRARY_PATH #./configure shared 這個也需要修改一下 Makefile 文件 修改為: begin CC=/usr/local/arm/4.4.1/bin/arm-linux-gcc LDSHARED=/usr/local/arm/4.4.1/bin/arm-linux-gcc shared Wl, -soname, libz.xo.1 CPP=/usr/local/arm/4

19、.4.1/bin/arm-linux-gcc E AR=/usr/local/arm/4.4.1/bin/arm-linux-ar rc RANLIB=/usr/local/arm/4.4.1/bin/arm-linux-ranlib end 將生成的的動態(tài)庫及相關的頭文件分別復制到 armlib 和 arminclude 目錄下,經過以上 步驟,編譯 Qtopia2.2.0 時所需要的頭文件和庫文件就制作完成了。 2. Qtopia-free-forlinx-2.2.0 的編譯 #tar zxvf ARM-qtopia-free-src-2.2.0.tar.gz ./ 文件解壓完成后就開始編

20、譯了。 #./build Build 為腳本程序, 直接就可以進行 qtopai-2.2.0 的編譯。 在編譯過程中產生的狀態(tài)信息 將記錄到當前目錄下的 qtopia2.2.0Makelog 文件里,如果編譯時產生大量錯誤信息,打開該 文件,查找 error 關鍵字進行問題的定位,里面記錄的信息對我們是很有幫助的。 編譯成功完成后, Qtopia2.2.0 會自動的安裝到 qtopia-free-2.2.0/qtopia/zImage/opt/ 下面, 進入 Qtopai 目錄下面, 需要把字體放到 Qtopia/lib/fonts 下面, qtopia-free-2.2.0/qt2/lin/

21、font 文 件夾下有可以用的字體,只需要 helvetica 類型,該類型支持中文。另外需要把 armlib 下面 的文件全部拷貝到 Qtopai/lib/ 目錄下面。這樣就可以運行自己的 Qtopia 程序了。 2.2.4 Qtopia2.2.0 的使用 進入到 Qtopia 里面,在該目錄下有 Qtopia 運行需要的全部文件。飛凌的文件系統(tǒng)中提 供了運行 Qtopia 的命令腳本,可以使用飛凌提供的腳本來運行 Qtopia2.2.0 。進入終端,在 命令行中輸入 #qtopia 回車即可,這樣就可以在開發(fā)板的 LCD 上看到 Qtopia 的運行界面了,如圖 2.1 所示。 三 總體設

22、計 車載虛擬儀表的基本設計思想是將汽車上安裝的各種傳感器采集到的數(shù)據(jù)進行智能化 的處理,然后在運行于嵌入式 Linux 系統(tǒng)的使用 Qt 設計的虛擬儀表盤上進行顯示,以便于監(jiān)測汽車各系統(tǒng)的工作狀況,如剩余油量、當前車速、行駛里程等,并在某狀態(tài)出現(xiàn)異常或 存在危險時向駕駛員提示報警。 本文目前只實現(xiàn)了車載虛擬儀表中關于車速的終端應用程序,系統(tǒng)初始化一個車速值, 最終界面車速的變化可以通過人為點擊界面中車速控制按鈕而實現(xiàn)。 本文程序總體流程圖如圖 3.1所示: 圖 3.1 總體流程圖 四 系統(tǒng)實現(xiàn) 基于 Qt 的汽車車速虛擬儀表盤將汽車的車速在 LCD 上通過表盤和數(shù)字直觀、 動態(tài)的顯 示出來。

23、. 界面中的數(shù)字部分是利用旋鈕 QSpinBox 實現(xiàn)的,初始化時設置其初始值為 50,單 位是 km/h ,單擊旋鈕一次的變化值設置為 10,程序中為該旋鈕添加了槽,用于實現(xiàn)儀表盤 的動態(tài)性,當單擊旋鈕后,界面會調用 repaint() 函數(shù),實現(xiàn)界面的重繪。 信號/槽是 Qt 對象以及其派生類對象之間的一種高效通信接口,它是Qt 的核心特性, 也是區(qū)別與其他工具包的重要地方。 盡管它的機制很像回調函數(shù), 但是這里要注意它和與回 調函數(shù)間的不同,回調函數(shù)傳遞的是函數(shù)指針,很容易造成程序崩潰, 另一方面, 回調方式 緊緊的綁定了圖形用戶接口的功能元素,因此很難開發(fā)進行獨立的分類,而信號/ 槽機

24、制能 攜帶任意數(shù)量和任意參數(shù)。 信號和槽是用來在對象間通訊的方法, 當一個特定事件發(fā)生的時 候,信號會被發(fā)送出來,槽調用是用來響應相應的信號的。 Qt 對象已經包含了許多預定義 的信號,但仍可以在派生類中添加新的信號。 Qt 對象中也已經包含了許多預定義的槽,但 仍可以在派生類中添加新的槽來處理我們感興趣的信號。 具體實現(xiàn)函數(shù)如下: Speed:Speed() startAngle=-35; endAngle=215; speedValueSpinBox=new QSpinBox; speedValueSpinBox-setRange(0,240);/ 旋鈕變化范圍 speedValueSpi

25、nBox-setSingleStep(10);/ 單擊旋鈕一次的變化值 speedValueSpinBox-setSuffix(km/h); / 設置計量單位 speedValueSpinBox-setValue(50); / 設置初始值 hlayout=new QHBoxLayout;/ 水平布局 hlayout-addStretch(35); / 將放在 layout 中的空間壓縮成默認的大小 hlayout-addWidget(speedV alueSpinBox);/ 添加旋鈕 hlayout-addStretch(35); hlayout-minimumSize();/ 確保布局沒有

26、因為 space太小而重置為 0 vlayout=new QVBoxLayout;/ 垂直布局 vlayout-addStretch(160); vlayout-addLayout(hlayout); vlayout-addStretch(40); vlayout-addStretch(30); vlayout-minimumSize(); setLayout(vlayout); connect(speedValueSpinBox,SIGNAL(valueChanged(int),this,SLOT(repaint(); resize(500,300); . 下面介紹虛擬儀表盤的繪制: 虛擬儀

27、表模塊中的虛擬儀表盤采用 QT 的二維圖形引擎的基礎類 QPainter 開發(fā)。繪制工 具為做到絕大部分繪制圖形用戶界面程序的需要提供了高度優(yōu)化的豐富的圖形圖像繪制函 數(shù)。 QPainter 可以繪制從簡單的直線到像餅圖和弦這樣的復雜形狀,并支持反走樣、漸變填 充、像素混合、 線性變換等特性。 它也可以繪制排列的文本和像素映射。 通常,它在一個“自 然的”坐標系統(tǒng)中繪制,但是它也可以在視和世界轉換中做到這些。本文主要是利用類 QPainter 中的函數(shù)完成儀表盤的繪制。 繪圖工具的典型用法是: 構造一個繪圖工具 設置畫筆、畫刷等等 繪制 銷毀這個繪圖工具 2.1 虛擬儀表盤中的弧線均是由函數(shù)d

28、rawArc ( int x, int y, int w, int h, int a, int alen )實 現(xiàn)的,繪制由矩形 (x, y, w, h)確定的弧,開始角度為 a,并且弧長為 alen。角度 a和 alen是1/16 度,也就是說一個完整的圓等于 5760 ( 16*360 )。其中 0度在3點的時鐘位置,開始角度 a是 負值時,意味著由零度即三點鐘位置順時針方向確定 a 的具體位置,開始角度 a是正值時, 意味著由零度即三點鐘位置逆時針方向確定a的具體位置,同理,弧長 alen 為負值時,意 味著由初始位置 a順時針方向旋轉 alen*16度,弧長 alen 為正值時,意味著

29、由初始位置 a逆 時針方向旋轉 alen*16 度。 繪制虛擬儀表盤的弧線的程序如下: void Speed:drawSpeedArc(QPainter / 定義畫筆的顏色和大小 painter.setPen(pen);/設置新的繪圖工具畫筆。 painter.drawArc(-200,-200,400,400,startAngle*16,(endAngle-startAngle)*16);/ 繪制弧線 虛擬儀表盤中弧線的不同顏色段代表車速是否安全,其中綠色的弧段代表車速在0 80km/h 范圍內,是安全的,黃色的弧段代表車速在 80 160km/h 范圍內,車速有些高, 處于警告狀態(tài),紅色的

30、弧段代表車速在 160 240km/h 范圍內,車速過高,處于危險狀態(tài), 2.2 弧線上的刻度劃分線由函數(shù) drawLine ( int x1, int y1, int x2, int y2 ) 實現(xiàn), 繪制從 (x1, y1)到(x2, y2)的直線并且設置當前畫筆位置為 (x2, y2)。 其程序實現(xiàn)如下: void Speed:drawMark(QPainter painter.setPen(pen); double ds=3.1415926/180 ; /繪制劃分弧線的較長的刻度線 for(double i=(-30*ds);i(3.1415926+(50*ds);i+=20*ds) painter.drawLine(-200*cos(i),-200*sin(i),-185*cos(i),-185*sin(i); /繪制劃分弧線的較短的刻度線 for(double i=(-20*ds);ivalue(); painter.rotat

溫馨提示

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

評論

0/150

提交評論