<abbr id="kc8ii"><menu id="kc8ii"></menu></abbr>
  • <input id="kc8ii"><tbody id="kc8ii"></tbody></input><table id="kc8ii"><source id="kc8ii"></source></table><kbd id="kc8ii"></kbd>
    <center id="kc8ii"><table id="kc8ii"></table></center>
  • <input id="kc8ii"></input>
    <abbr id="kc8ii"></abbr>
  • <abbr id="kc8ii"></abbr>
  • <center id="kc8ii"><table id="kc8ii"></table></center>
    <abbr id="kc8ii"></abbr>
    你的位置:首頁 > 電源管理 > 正文

    觸摸屏驅動實現步驟分析

    發(fā)布時間:2012-01-27

    中心議題:

    • 配置和初始化觸摸屏
    •  校準觸摸屏基準參數
    • 判斷屏幕是否被觸摸


    嵌入式設備觸摸屏按其技術原理可分為五類:矢量壓力傳感式、電阻式、電容式、紅外線式和表面聲波式。其中電阻式觸摸屏在嵌入式系統中用的較多,電阻式觸摸屏可分為四線、五線、七線等幾種。一般來說,WinCE觸摸屏驅動的設計和實現有以下幾個步驟:

    (1)配置和初始化觸摸屏
    觸摸屏驅動在初始化過程會調用TouchPanelEnable函數,該函數調用的DDSI函數為DdsiTouchPanelEnable和 DdsiTouchPanelDisable。這兩個DDSI接口函數是驅動實現的關鍵所在,分別用于打開和關閉觸摸屏硬件。但是為了降低功耗,這兩個函數其實可以不真正操作硬件,而只是實現軟件上的控制。 同時,在初始化時還需要進行這幾個配置和初始化:一是創(chuàng)建事件hTouchPanelEvent和 hCalibrationSampleAvailable,前者是在正常狀態(tài)下當有觸摸筆按下或者按下后需要定時采集數據時被觸發(fā);而后者是在校準狀態(tài)下當有校準數據輸入時被觸發(fā)。二是檢查初始化所需的中斷gIntrTouch(觸摸屏中斷)和gIntrTouchChanged(定時器中斷),并將這兩個中斷關聯到事件hTouchPanelEvent。三是創(chuàng)建一個ISR線程TouchPanelpISR,用于等待和處理觸摸屏事件 hTouchPanelEvent,它也是整個驅動程序中唯一的事件源。

    (2)校準觸摸屏基準參數
    完成前面繁瑣的工作后,驅動程序的各種功能就都已經準備就緒了,現在就可以實際操作觸摸屏幕了。但一般來說,電阻式觸摸屏需要校準,也就是說在驅動啟動過程中MDD層要調用相應的DDSI函數來讀取注冊表中的校正數據校正觸摸屏。理想情況下,校準程序只要在嵌入式設備初次加電測試過程中運行一次就可以了,參考值會被存儲在非易失性存儲器中,以免讓用戶在以后的加電啟動期間再做校準。不過,高質量的觸摸屏驅動程序是應該要向用戶提供一種進入校準例程的途徑,從而在由于溫度漂移或其它因素造成校準不準確時進行重新校準。 在理想情況下,校正觸摸屏基準只需兩組原始數據,即在屏幕對角讀取的最小和最大值。但在實際應用中,因為許多電阻式觸摸屏存在明顯的非線性,如果只在最小和最大值之間簡單的插入位置數值會導致驅動程序非常的不精確。因此,在WinCE中需要獲取多個校準點,常用的校準點數量為5個。

    方法是:
    ①首先驅動程序在函數DdsiTouchPanelGetDeviceCaps 中設置校準點的個數;
    ②是系統在 TouchDriverCalibrationPointGet中獲取每個校準點的屏幕坐標;
    ③是在屏幕界面的校準點坐標處顯示一個位置符號,用戶需要精確地在位置符號按下觸摸屏;
    ④驅動程序通過TouchPanelReadCalibrationPoint函數讀取相應的觸摸屏坐標值;
    ⑤然后再開始下一個校準點,直到循環(huán)設定的次數后將采集到的觸摸屏坐標值和校準點屏幕坐標送到TouchPanelSetCalibration函數中進行處理,該函數將產生校準基準參數。校準完成之后,觸摸屏便可以開始正常的操作了。

    (3)判斷屏幕是否被觸摸
    一旦完成了觸摸屏硬件設置、初始化和基準參數校準后,接下來就需要用一種可靠的方法來判斷屏幕是否被觸摸了。WinCE提供了屏幕是否被觸摸的檢測機制,而且當觸摸事件發(fā)生時還可選擇是否中斷主處理器。判斷屏幕是否被觸摸的驅動程序的函數名叫WaitForTouchState()。當屏幕被初次觸摸時喚醒主機的中斷,稱為PEN_DOWN中斷。這樣做可以讓驅動程序在屏幕沒有被觸摸時中斷自己的執(zhí)行,而不消耗任何CPU資源,而一旦用戶觸摸屏幕,驅動程序就被喚醒并進入轉換模式。

    當被喚醒后就有一組模數數據等待轉換并產生中斷信號。中斷是硬件與軟件打交道的重要方法,所以大多數驅動程序都涉及到中斷處理。就中斷處理而言, WinCE采用了一種獨特的方法。它將中斷處理分為兩步:中斷服務例程(ISR)和中斷服務線程(IST)。具體來講就是把每個硬件的設備中斷請求 (IRQ) 和一個ISR 聯系起來,當一個中斷發(fā)生并未被屏蔽時,內核調用該中斷注冊的ISR。因為ISR 運行于內核模式,所以應該被設計得盡可能的短,ISR 的基本職責是引導內核調度和啟動合適的IST。IST 在設備驅動程序軟件模塊中編寫,它從硬件獲取或向硬件發(fā)送數據和控制代碼,并進一步處理設備中斷。

    WinCE觸摸屏驅動程序是采用中斷方式對觸摸筆的按下狀態(tài)進行檢測,當檢測到觸摸筆按下時產生的中斷,就會觸發(fā)一個事件通知一個工作線程開始采集數據。同時,驅動將打開一個硬件定時器,只要檢測到觸摸筆仍然在按下狀態(tài),將定時觸發(fā)同一個事件通知這個工作線程繼續(xù)采集數據,直到觸摸筆抬起后關閉該定時器。簡單的說,就是驅動程序會同時采用觸摸屏中斷和定時器中斷這兩個中斷源。目的在于不僅可以監(jiān)控觸摸筆按下和抬起狀態(tài),而且可以檢測觸摸筆按下時的拖動軌跡。觸摸屏中斷的兩個邏輯中斷分別是:SYSINTR_TOUCH是用于觸摸筆點擊觸摸屏時產生相應的中斷;SYSINTR_TOUCH_CHANGE 則用于觸摸筆離開時產生相應的中斷。

    特別推薦
    技術文章更多>>
    技術白皮書下載更多>>
    熱門搜索
    ?

    關閉

    ?

    關閉

    色综合久久精品中文字幕首页| 国产亚洲情侣一区二区无码AV | 中文国产成人精品久久不卡| 中文字幕一区二区三区在线不卡 | 无码专区中文字幕无码| 亚洲精品97久久中文字幕无码 | 免费 无码 国产在线观看观| 爆操夜夜操天天操中文| 亚洲国产综合精品中文字幕| 久久国产亚洲精品无码| 波多野结衣中文字幕久久| 亚洲成a人片在线观看无码专区 | 国产亚洲AV无码AV男人的天堂 | 久久精品人妻中文系列| 中文字幕乱码一区二区免费| 少妇无码一区二区三区| 熟妇人妻中文字幕无码老熟妇| 少妇无码一区二区三区免费| 中文字幕av日韩精品一区二区| 少妇无码AV无码专区线| 日本中文字幕高清| 秋霞鲁丝片Av无码少妇| 人妻少妇精品中文字幕AV| 无码国产精品一区二区免费式影视| 无码乱人伦一区二区亚洲 | 日韩丰满少妇无码内射| 精品无码综合一区| 久久久久亚洲AV无码专区首JN| 精品无码久久久久国产| 精品久久久久久无码中文野结衣 | 国产亚洲美日韩AV中文字幕无码成人 | 久久精品中文字幕第23页| 性无码专区一色吊丝中文字幕| 色噜噜综合亚洲av中文无码 | 成人无码精品1区2区3区免费看| 亚洲午夜无码久久久久小说| 99re只有精品8中文| 久久AV高清无码| 精品久久久无码人妻中文字幕豆芽| 日韩精品无码免费专区网站| AV成人午夜无码一区二区|