<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 電源與新能源 > 設(shè)計(jì)應(yīng)用 > WinCE 7.0下的觸摸屏驅(qū)動(dòng)

          WinCE 7.0下的觸摸屏驅(qū)動(dòng)

          作者: 時(shí)間:2016-12-05 來(lái)源:網(wǎng)絡(luò) 收藏
            在嵌入式系統(tǒng)中較為常用的是四線電阻式觸摸屏,通過(guò)檢測(cè)x軸和y軸的電壓,來(lái)確定觸點(diǎn)的位置。一般觸摸屏系統(tǒng)結(jié)構(gòu)為:觸摸屏->觸摸屏控制器->處理器。

            wince7下觸摸屏的驅(qū)動(dòng)分為PDD層(位于bsp目錄中)和MDD層(位于public目錄中)。PDD層和MDD層通過(guò)DDSI接口函數(shù)連接,MDD層和上層通過(guò)DDI函數(shù)連接。其中MDD層一般無(wú)需修改,我們只需修改PDD層的代碼。

          本文引用地址:http://www.ex-cimer.com/article/201612/326249.htm

            比如我的bsp目錄下觸摸屏驅(qū)動(dòng)中的touchscreenpdd.cpp文件中主要有如下函數(shù):

            TchPdd_Init()

            TchPdd_Ioctl()

            PDDTouchIST()

            PDDInitializeHardware()

            PDDTouchPanelEnable()

            PDDTouchPanelGetPoint()

            PDDCalibrationThread()

            PDDStartCalibrationThread()

            PDDDeInitailzeHardware()

            PDDTouchPanelDisable()

            其中TchPdd開(kāi)頭的函數(shù)就是DDSI函數(shù),PDD開(kāi)頭的函數(shù)就是PDD層的函數(shù)。MDD層會(huì)最先調(diào)用TchPdd_Init()函數(shù),該函數(shù)會(huì)將DDSI函數(shù)以函數(shù)指針的形式傳遞給MDD層,并調(diào)用PDD層的函數(shù)進(jìn)行必要的初始化,如調(diào)用PDDInitializeHardware()來(lái)初始化SPI,GPIO(我的觸摸屏控制器使用SPI接口),調(diào)用PDDTouchPanelEnable()來(lái)創(chuàng)建“觸摸屏事件”,創(chuàng)建IST線程等。

            IST線程函數(shù)PDDTouchIST()中會(huì)有一個(gè)while循環(huán),如下圖所示:

            

            循環(huán)中有一個(gè)WaitForSingleObject(,)函數(shù)。該函數(shù)有兩個(gè)參數(shù),第一個(gè)參數(shù)是“觸摸屏事件”的句柄,第二個(gè)參數(shù)用來(lái)設(shè)置等待超時(shí)的時(shí)間。IST線程執(zhí)行到這個(gè)函數(shù)會(huì)等待“觸摸屏事件”發(fā)生或者超時(shí)。當(dāng)這兩種情況之一發(fā)生后,線程就會(huì)往下執(zhí)行,并調(diào)用PDDTouchPanelGetPoint()函數(shù)來(lái)讀取觸點(diǎn)坐標(biāo)。在“觸摸屏事件”發(fā)生之前,超時(shí)時(shí)間會(huì)設(shè)置為無(wú)限等待。只有當(dāng)“觸摸屏事件”發(fā)生后(觸點(diǎn)按下)才會(huì)開(kāi)始讀坐標(biāo),并判斷是否還是按下?tīng)顟B(tài),如果還是按下?tīng)顟B(tài),那么就會(huì)設(shè)置超時(shí)時(shí)間為某一個(gè)有限值,這樣當(dāng)WaitForSingleObject等待時(shí)間超過(guò)這個(gè)值后又會(huì)去讀取坐標(biāo)。這種機(jī)制就能保證我們能讀取到觸點(diǎn)移動(dòng)的軌跡。

            當(dāng)然要想使用“觸摸屏事件”,必須要有一個(gè)觸摸屏的中斷(當(dāng)觸點(diǎn)按下,這個(gè)中斷發(fā)生),并將這個(gè)中斷和“觸摸屏事件”關(guān)聯(lián)起來(lái),這樣中斷發(fā)生后,才會(huì)觸發(fā)“觸摸屏事件”。

            還有一種方法:不使用中斷,直接采用輪詢方式來(lái)讀取坐標(biāo),通過(guò)讀取坐標(biāo)值的合法性來(lái)決定是否有觸點(diǎn)按下。這種方式下,WaitForSingleObject的第一個(gè)參數(shù)就不起作用,且第二個(gè)參數(shù)必須設(shè)為一個(gè)有限值,這個(gè)值就決定來(lái)輪詢的頻率。



          關(guān)鍵詞: WinCE7觸摸屏驅(qū)

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();