• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      虛擬儀表盤顯示界面的設(shè)計(jì)

      2017-11-21 11:32:04
      傳感器世界 2017年3期
      關(guān)鍵詞:儀表盤窗體端點(diǎn)

      廈門工學(xué)院,福建廈門361021

      一、引言

      汽車儀表是駕駛員獲取汽車狀態(tài)信息的關(guān)鍵設(shè)備,對(duì)汽車的安全行駛起著重要的作用。近年來,隨著計(jì)算機(jī)、微電子和各種現(xiàn)場(chǎng)總線通信技術(shù)的廣泛應(yīng)用,汽車電子技術(shù)得到了迅猛的發(fā)展,汽車儀表盤上顯示的信息不斷增加,傳統(tǒng)的機(jī)械式、電氣式組合儀表越來越無法滿足使用的需求。

      本文介紹的數(shù)字儀表盤是S3C2410開發(fā)板下基于Linux操作系統(tǒng)下設(shè)計(jì)的數(shù)字儀表,具有顯示直觀、讀識(shí)速度快、準(zhǔn)確度高、適應(yīng)環(huán)境亮度范圍寬、彩色視覺效果好、對(duì)比度高等優(yōu)點(diǎn)。

      本文重點(diǎn)闡述設(shè)計(jì)時(shí)主要解決的三個(gè)問題:圖形開發(fā)界面的選擇、儀表盤窗口的設(shè)計(jì)、儀表指針顯示設(shè)計(jì)。

      二、圖形開發(fā)界面選擇

      設(shè)計(jì)數(shù)字儀表,需要選擇一個(gè)友好的圖形用戶界面支持系統(tǒng)GUI來進(jìn)行顯示界面的開發(fā)。因?yàn)榍度胧皆O(shè)備的可用資源有限,所以選擇的GUI必須是可定制、占用資源少、高性能、高可靠性以及可配置。

      Qt/Embedded具有平臺(tái)無關(guān)性、良好的GUI編程接口以及強(qiáng)大的開發(fā)工具支持[1],本文選用Qt/Embedded來進(jìn)行儀表盤圖形顯示界面的開發(fā)。

      圖1所示為Qt/Embedded應(yīng)用程序開發(fā)流程圖。首先,安裝Qt/Embedded工具開發(fā)包,然后基于S3C2410開發(fā)板硬件特性,交叉編譯Qt/Embedded庫,確認(rèn)可用的情況下再進(jìn)行相關(guān)應(yīng)用程序開發(fā)和聯(lián)調(diào),最終發(fā)布應(yīng)用程序。

      三、儀表盤顯示界面設(shè)計(jì)

      儀表盤顯示結(jié)構(gòu)圖如圖2所示,將LCD顯示界面劃分為不同的區(qū)域,分別顯示車速、發(fā)動(dòng)機(jī)轉(zhuǎn)速、水溫、油量、時(shí)間、里程數(shù)、檔位標(biāo)志和各種警告標(biāo)志[2]。

      首先建立一個(gè)640×480(和LCD等大小)的主窗體,然后在主窗體上分別添加各個(gè)子窗體,由各子窗體完成顯示任務(wù)。子窗體的建立是通過對(duì)Qt中的QWidget進(jìn)行子類化來完成的。

      例如,建立一個(gè)QWidget的派生類CarSpeed,用于動(dòng)態(tài)顯示汽車的行駛速度。在主窗口中設(shè)置其顯示區(qū)域,將其顯示在儀表盤的左下角。

      為CarSpeed類的對(duì)象carspeed設(shè)置顯示區(qū)域,以主窗口的坐標(biāo)x=0,y=180為起點(diǎn),分配一個(gè)長為400,高為300的矩形區(qū)域。Qt中默認(rèn)的坐標(biāo)系是以窗體的左上角為原點(diǎn),向右為x軸的正半軸,向下為y軸的正半軸。

      至此,一個(gè)用于顯示車速和總里程數(shù)的子類窗口已經(jīng)建立,在此窗口中可完成圖形的繪制,其他各個(gè)子窗體的建立與此類似。

      1、基于Qt畫圖類實(shí)現(xiàn)圖形的繪制

      Qt中主要用以下兩個(gè)類來完成圖形的繪制功能:QPainte和QPaintDevice。QPainter類完成整個(gè)畫圖工具的定義, QPaintDevice類則定義畫圖的設(shè)備,即最終的圖像顯示設(shè)備[3]。

      Qt下畫圖程序基本框架如下:

      下面以車速顯示窗口繪制為例說明顯示程序的具體實(shí)現(xiàn)。

      圖3所示為車速表示意圖。車速表畫成模擬表盤的形式,指針可隨車速的不同而動(dòng)態(tài)旋轉(zhuǎn),同時(shí)指針下方可顯示汽車速度和總里程數(shù)。

      該顯示模塊,是定義了一個(gè)QWidget的派生類CarSpeed,由這個(gè)類來完成車速表的繪制。分析該類的組成,車速和里程數(shù)構(gòu)成了兩個(gè)最重要的成員變量,車速表上模擬指針的擺動(dòng)和數(shù)字顯示都是依靠這兩個(gè)值;其次還包括弧線半徑、起始角和終止角這三個(gè)參數(shù),它們決定了表盤的外形[4]。而成員函數(shù)則包含有構(gòu)造函數(shù)(初始化成員變量)、設(shè)置車速、設(shè)置里程數(shù)、繪制外圓弧、繪制刻度線、繪制文字(包扣刻度值和數(shù)字式車速、里程數(shù))、繪制指針(隨車速的不同而不斷擺動(dòng))和畫圖事件(響應(yīng)畫圖事件,調(diào)用上面的繪制函數(shù),實(shí)現(xiàn)圖像更新)。類的定義代碼如下所示:

      下面重點(diǎn)介紹表盤刻度線的繪制drawScaleLable()函數(shù):

      因刻度線較多,在繪制刻度線時(shí),需要確定大量的線段端點(diǎn)坐標(biāo),該工作量較大且易出錯(cuò)。因此我們采用圖4所示的方法來確定刻度線的每一個(gè)端點(diǎn)的坐標(biāo)。

      如圖4所示:刻度線a是由端點(diǎn)0和1組成,刻度線b是由端點(diǎn)2和3組成,而端點(diǎn)0是由直線a與半徑為rl的大圓相交而得,端點(diǎn)1是由直線a與半徑為rs的小圓相交而得;端點(diǎn)2是由直線b與半徑為rl的大圓相交所得,端點(diǎn)3是由直線b與半徑為rm的中圓相交而得。

      若原點(diǎn)坐標(biāo)為(x,y) ,直線a與x軸的角度為θ1,則端點(diǎn)0的橫坐標(biāo)x0=x+rL*cosθ1,縱坐標(biāo)y0=y-rL*sinθ1(因?yàn)镼t中y軸的方向以直角坐標(biāo)系的y軸方向相反,所以y0是y-rL*sinθ1,而不是y+rL*sinθ1)。同理,端點(diǎn) 1 的橫坐標(biāo)x1=x+rS*cosθ1,縱坐標(biāo)y1=y-rS*sinθ1。

      若直線b與x軸的角度為θ2,則端點(diǎn)2的橫坐標(biāo)x2=x+rL*cosθ2,縱坐標(biāo)y2=y-rL*sinθ2。端點(diǎn) 3 的橫坐標(biāo)x3=x+rM*cosθ2,縱坐標(biāo)y3=y-rM*sinθ2。

      以上規(guī)律可以看出:

      在 0、2、4、6、......、2n的 點(diǎn) 坐 標(biāo) 都 為x2n=x+rL*cosθ,yn=y-rL*sinθ;

      在1、5、9、13、......、4n+1的點(diǎn)坐標(biāo)都為x4n+1=x+rS*cosθ,y4n+1=y-rS*sinθ;

      在3、7、11、15、......、4n-1的點(diǎn)坐標(biāo)都為x4n-1=x+rM*cosθ,y4n-1=y-rM*sinθ。

      算法如圖5所示:計(jì)算出所有的點(diǎn)坐標(biāo)之后,創(chuàng)建一個(gè)QPointArray類的對(duì)象parray,將各點(diǎn)坐標(biāo)按序列裝入parray中,調(diào)用QPainter::drawLineSegments(pa rray)則可以繪制出第0點(diǎn)到第1點(diǎn)的線段a,第2點(diǎn)到第3點(diǎn)的線段b。至此,表盤刻度線繪制完成。

      中華門是南京明城墻的十三座明代京城城門之一,原名聚寶門,是中國現(xiàn)存規(guī)模最大的城門,也是世界上保存最完好、結(jié)構(gòu)最復(fù)雜的堡壘甕城,有“天下第一甕城”之稱。由于傳統(tǒng)地位和現(xiàn)代交通等因素的影響,中華門是南京眾多城墻當(dāng)中的明星。[5]

      2、基于Qt畫圖類對(duì)圖形進(jìn)行處理

      儀表盤上需要顯示一些小圖標(biāo)來提示車輛的運(yùn)行狀況,如水溫、油量、手剎車未松、車門未關(guān)好、前排乘客未系上安全帶、電池電量低等,這些小圖標(biāo)都有標(biāo)準(zhǔn)的形狀和畫法,從互聯(lián)網(wǎng)上下載標(biāo)準(zhǔn)圖標(biāo)后,通過Linux下的convert程序可以將其從某種外部模式轉(zhuǎn)換成一種可以顯示的模式,然后將其顯示在儀表盤上。但因網(wǎng)上獲得的圖標(biāo)背景色與儀表盤的背景色不同,如果將其直接顯示的話,視覺效果不好,所以我們需要將其背景色進(jìn)行轉(zhuǎn)化[5]。

      在Qt中,有一個(gè)QImage的類可以訪問像素的值,它能夠?qū)蝹€(gè)像素信息進(jìn)行底層訪問。通過訪問每一個(gè)像素,獲得其顏色值并修改,可以對(duì)整個(gè)圖形的顏色進(jìn)行修改。具體實(shí)現(xiàn)步驟如下:

      (1)將圖標(biāo)文件轉(zhuǎn)換成XPM的圖形模式,如fi le.jpg轉(zhuǎn)換成 fi le.xpm;

      (2)基于file.xpm創(chuàng)建一個(gè)QPixmap的對(duì)象QPixmap fi le;

      (3)調(diào)用QPixmap::convertToImage()將其轉(zhuǎn)換成QImage格式,

      (4)訪問QImage中的每一個(gè)像素,對(duì)于背景色:白色(紅:255,藍(lán):255,綠:255)和黑色(紅:0,藍(lán):0,綠:0),都將其修改為儀表盤的背景色(紅:85,藍(lán):127,綠:0);

      (5)調(diào)用QPixmap::convertFromImage()將修改后的圖形數(shù)據(jù)轉(zhuǎn)換成另一個(gè)QPixmap形式的像素映射;

      (6)調(diào)用QPainter::drawPixmap()就可將轉(zhuǎn)換后的圖標(biāo)顯示出來。

      處理后的圖形顯示效果如圖6所示。

      四、整體調(diào)試圖

      儀表盤的顯示效果如圖7所示:表盤選用靚青色(紅:85,藍(lán):127,綠:0)為背景,指針、外圓弧、刻度線、時(shí)間和單次里程數(shù)用白色繪制,刻度值、車速值、轉(zhuǎn)速值和總里程表用紅色顯示,警告小圖標(biāo)用黃色顯示。上述顏色的搭配顯示,目的是使儀表盤顯示更加醒目,讓駕駛員對(duì)顯示信息一目了然。

      儀表盤右下角顯示的是發(fā)動(dòng)機(jī)轉(zhuǎn)速,指針隨轉(zhuǎn)速的不同動(dòng)態(tài)偏轉(zhuǎn),同時(shí)也以數(shù)字顯示出具體的轉(zhuǎn)速值;

      轉(zhuǎn)速表上方顯示的是一些安全警告,比如車門未關(guān)好、未系安全帶等,這些黃色小圖標(biāo)在汽車正常狀態(tài)時(shí)不會(huì)顯示出來,只有當(dāng)狀況發(fā)生時(shí),比如有人坐上座位又沒有系安全帶,這時(shí)未系安全帶的警告圖標(biāo)就會(huì)顯示[6];

      右上角顯示的是油量,指針會(huì)隨油量的多少而偏轉(zhuǎn);

      左上角顯示的是冷卻水溫度,指針隨水溫的變換而偏轉(zhuǎn);

      中間方形模塊顯示的是汽車各種車燈的工作情況,包括遠(yuǎn)光燈、近光燈、霧燈和轉(zhuǎn)向燈等,各車燈點(diǎn)亮后會(huì)同時(shí)在儀表盤上顯示出來;

      車燈右方顯示的是汽車擋位,紅色顯示的就是當(dāng)前汽車所運(yùn)行的擋位。

      車燈左方顯示的是汽車的品牌名稱;

      車燈下方顯示的是時(shí)間和單次里程表,以數(shù)字式的形式顯示當(dāng)前系統(tǒng)時(shí)間,單次里程表可以進(jìn)行清零操作。

      五、結(jié)論

      本文設(shè)計(jì)的儀表盤是一種較新的汽車儀表概念,逐步向“綜合信息系統(tǒng)”方向發(fā)展,其特征是以液晶顯示為基礎(chǔ),趨向于計(jì)算機(jī)數(shù)據(jù)處理和綜合信息傳遞及顯示的主節(jié)點(diǎn)。即汽車儀表作為汽車綜合信息顯示中心,不再僅僅是一個(gè)顯示信息的工具,還是一個(gè)會(huì)分析、處理信息并控制執(zhí)行的系統(tǒng)。并在儀表系統(tǒng)中成功地應(yīng)用了S3C2410微處理器和嵌入式Linux系統(tǒng),ARM處理器的使用,使系統(tǒng)的整體性能有了質(zhì)的飛躍;嵌入式Linux系統(tǒng)的引入,對(duì)系統(tǒng)的軟件設(shè)計(jì)和功能模塊的添加/裁剪,提供了最大的方便。眼下開放式結(jié)構(gòu)正處于發(fā)展階段中,這種結(jié)構(gòu)在整個(gè)汽車壽命期內(nèi)都可以靈活地進(jìn)行功能組合,并方便進(jìn)行功能擴(kuò)展,完善系統(tǒng)。

      猜你喜歡
      儀表盤窗體端點(diǎn)
      非特征端點(diǎn)條件下PM函數(shù)的迭代根
      儀表堂堂
      名車志(2021年3期)2021-03-18 03:33:38
      Dashboard的10個(gè)實(shí)現(xiàn)原則
      不等式求解過程中端點(diǎn)的確定
      試談Access 2007數(shù)據(jù)庫在林業(yè)檔案管理中的應(yīng)用
      檔案天地(2019年5期)2019-06-12 05:12:02
      參數(shù)型Marcinkiewicz積分算子及其交換子的加權(quán)端點(diǎn)估計(jì)
      福特探險(xiǎn)者車儀表盤上多個(gè)故障燈點(diǎn)亮
      虛擬儀表盤
      家用汽車(2016年3期)2016-05-10 10:57:09
      基丁能雖匹配延拓法LMD端點(diǎn)效應(yīng)處理
      基于LayeredWindow的異形窗體局部刷新
      中文信息(2014年2期)2014-03-06 23:49:14
      万载县| 上犹县| 分宜县| 娄烦县| 高邮市| 潼南县| 延川县| 太仓市| 安龙县| 河北省| 沁源县| 漯河市| 鄢陵县| 交城县| 交口县| 克山县| 繁昌县| 朝阳市| 鄂尔多斯市| 宜州市| 沭阳县| 保定市| 陕西省| 洪湖市| 涞水县| 灵丘县| 广东省| 青岛市| 班戈县| 壶关县| 溧阳市| 沙湾县| 那曲县| 乌拉特中旗| 新沂市| 望奎县| 静海县| 内黄县| 乌兰察布市| 栾川县| 涞源县|