日韩床上生活一级视频|能看毛片的操逼网站|色悠悠网站在线观看视频|国产免费观看A淫色免费|国产av久久久久久久|免费A级视频美女网站黄|国产毛片av日韩小黄片|热久久免费国产视频|中文字幕无码色色|成人在线视频99久久久

機(jī)電之家資源網(wǎng)
單片機(jī)首頁|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
為標(biāo)準(zhǔn)觸摸屏接口硬件編寫驅(qū)動程序
為標(biāo)準(zhǔn)觸摸屏接口硬件編寫驅(qū)動程序
 更新時(shí)間:2008-8-4 5:02:47  點(diǎn)擊數(shù):5
【字體: 字體顏色

圖2:觸摸屏電路簡單等效電路。

關(guān)于觸摸驅(qū)動程序是否應(yīng)該使用中斷驅(qū)動,事實(shí)上在范例的驅(qū)動程序中用的就是中斷驅(qū)動方式。坦率地講,我之所以這樣做是因?yàn)槭褂弥袛嗪苡腥。千萬不要由這個(gè)例子推斷出采用中斷永遠(yuǎn)是最好或最正確的設(shè)計(jì)方式,也不要聽信別人說不采用中斷驅(qū)動方式的觸摸驅(qū)動程序就是"錯誤的"。

之所以這樣說只是因?yàn)?輪詢"對嵌入式系統(tǒng)程序員來說似乎變成了貶義詞。我曾經(jīng)問過一位客戶,他的輸入設(shè)備采用的是輪詢還是中斷服務(wù)方式;卮鹗"這是嵌入式系統(tǒng),我們不做任何輪詢"。我當(dāng)時(shí)感覺問這個(gè)問題時(shí)我就像一個(gè)傻瓜,但進(jìn)一步探討后發(fā)現(xiàn)查詢其實(shí)也是一種合理且值得考慮的方式。如果使用的是RTOS,并且所有任務(wù)經(jīng)常為了等待某類外部事件而被中斷,處理器經(jīng)常處于空閑的循環(huán)狀態(tài),沒有什么有意義的事做。這種情況下使用空閑任務(wù)查詢觸摸屏上的輸入也許是更好的設(shè)計(jì)方式。根據(jù)你的總體系統(tǒng)需求,查詢也可能是一個(gè)值得考慮的合理的設(shè)計(jì)方式。

配置中斷的方法因具體操作系統(tǒng)而異。讀者會發(fā)現(xiàn)對于每一個(gè)支持的RTOS都有被(#ifdef)限定的代碼段。在所有情況下驅(qū)動程序?qū)嶋H會使用二種不同的中斷:

1 當(dāng)屏幕被初次觸摸時(shí)喚醒主機(jī)的中斷,稱為PEN_DOWN中斷

2 當(dāng)完成一組模數(shù)數(shù)據(jù)轉(zhuǎn)換時(shí)的第二種中斷信號

后文會詳細(xì)介紹這些中斷和它們產(chǎn)生的過程。

接下來的問題是我們希望以多快的速度從ADC接收采樣輸入讀數(shù)。采樣速度會影響我們需要如何配置時(shí)鐘來驅(qū)動觸摸屏和ADC。我們希望時(shí)鐘有足夠快的速度來提供可響應(yīng)的輸入和實(shí)現(xiàn)精確的跟蹤,但也不要太快,以至于影響轉(zhuǎn)換精度,或讓系統(tǒng)消耗超過所需的功率。

根據(jù)我的經(jīng)驗(yàn),觸摸屏至少需要以20Hz或50ms間隔的速度向更高層軟件提供位置更新數(shù)據(jù),只要高層軟件跟得上,速度越快越好,我們不太擔(dān)心功耗問題。如果觸摸輸入響應(yīng)比這慢得多,那么在用戶的觸摸輸入和顯示屏上可觀察到的響應(yīng)之間會出現(xiàn)明顯和煩人的遲滯現(xiàn)象。

20Hz的更新速度聽起來并不是太有挑戰(zhàn)性,但提供20Hz的更新速度實(shí)際上要求采樣速度接近200Hz,具體數(shù)值取決于我們在確定輸入穩(wěn)定之前準(zhǔn)備采用多少讀數(shù)。為了去抖動和對觸摸輸入位置值進(jìn)行平均,我們需要進(jìn)行過采樣。電阻觸摸屏,特別是便宜的那種,一般會有很大的噪聲和抖動。

在向更高層軟件發(fā)送位置更新數(shù)據(jù)之前,驅(qū)動程序需要多次采樣每個(gè)軸上的輸入。我們提供的驅(qū)動程序默認(rèn)情況下將以最少200Hz(5ms) 的采樣速率配置各自處理器上的ADC時(shí)鐘。這樣就能讓驅(qū)動程序?qū)斎朐紨?shù)據(jù)進(jìn)行充分的去抖動和過濾,并仍能向高層用戶接口軟件提供20Hz的實(shí)際位置更新速率。

飛思卡爾i.MX處理器中的觸摸控制器模塊叫做模擬信號處理器(ASP),i.MX處理器提供兩個(gè)由內(nèi)核CPU時(shí)鐘分頻得到的外設(shè)時(shí)鐘。輸入ASP模塊端口的是PERCLK2(外設(shè)時(shí)鐘2),它經(jīng)過再分頻產(chǎn)生ASP所需的最終輸入時(shí)鐘。需要注意的是,PERCLK2除了驅(qū)動ASP模塊外,還驅(qū)動包括內(nèi)部LCD控制器在內(nèi)的其它子模塊,因此觸摸驅(qū)動程序無法只是為了更好的配合觸摸采樣而對PERCLK2進(jìn)行編程。PERCLK2被編程為所有附屬外設(shè)所要求的最高速率(在大多數(shù)情況下是LCD控制器),然后通過分頻產(chǎn)生速度較慢的外設(shè)所需的時(shí)鐘。MC9328MX1參考手冊中包含一份表格,該表格定義了達(dá)到200Hz數(shù)據(jù)輸出速率所需的時(shí)鐘編程值。

夏普LH79524在硬件配置時(shí)要求對幾個(gè)GPIO引腳進(jìn)行編程以便給這些引腳分配ADC功能,并要求編程和激活A(yù)DC時(shí)鐘,還要對ADC序列器編程。

LH79524 ADC本身是一個(gè)令人稱奇的電路系統(tǒng),能夠?qū)崿F(xiàn)完全可編程的狀態(tài)機(jī)和序列器。該ADC無需核心CPU的任何干預(yù)就可以通過編程完成:驅(qū)動一個(gè)觸摸層;延時(shí);進(jìn)行測量;驅(qū)動另一層;延時(shí);進(jìn)行測量等操作。理解如何對LH79524 ADC序列器控制單元編程可能是一個(gè)挑戰(zhàn),不過利用夏普(www.sharpsma.com)公司提供的應(yīng)用指南可以使這項(xiàng)工作簡單很多。本文提供的驅(qū)動程序完全符合該應(yīng)用指南對如何配置夏普ADC序列控制器提出的建議。

圖3:X軸移動時(shí)Y軸上的偏移。

屏幕被觸摸到了嗎?

一旦完成了基本的硬件設(shè)置,接下來就需要一種可靠的方法判斷屏幕是否被觸摸了。如果用戶沒有觸摸屏幕,那么運(yùn)行ADC獲得轉(zhuǎn)換后的讀數(shù)毫無意義。上述兩個(gè)控制器都提供了屏幕是否被觸摸的檢測機(jī)制,并且當(dāng)觸摸事件發(fā)生時(shí)還可選擇是否中斷主處理器。判斷屏幕是否被觸摸的驅(qū)動程序的函數(shù)名叫 WaitForTouchState()。

當(dāng)控制器處于觸摸檢測模式時(shí),Y軸觸摸層通過一個(gè)上拉電阻上拉到高電平,X軸觸摸層則連接到地。當(dāng)用戶觸摸屏幕的任何地方時(shí),這兩層就發(fā)生短接,Y軸層被拉到低電平。該事件可以在驅(qū)動程序內(nèi)部連接到名為PEN_OWN IRQ的中斷發(fā)生機(jī)制。

在正常工作期間,當(dāng)觸摸事件發(fā)生時(shí)驅(qū)動程序利用PEN_DOWN IRQ喚醒觸摸驅(qū)動任務(wù)。這樣做可以讓驅(qū)動程序在屏幕沒有被觸摸時(shí)中斷自己的執(zhí)行,而不消耗任何CPU資源,而一旦用戶觸摸屏幕,驅(qū)動程序就被喚醒并進(jìn)入轉(zhuǎn)換模式。我們也可以在轉(zhuǎn)換模式?jīng)]被激活時(shí)停止(disable)ADC時(shí)鐘來節(jié)省功耗。

在校準(zhǔn)和主動采樣期間,驅(qū)動程序使用與上述基本相同的機(jī)制檢測屏幕是否被觸摸;不過在這些模式下驅(qū)動程序會屏蔽實(shí)際的中斷,并通過人工方式簡單的檢查觸摸狀態(tài)。對于飛思卡爾的處理器,這時(shí)要求把控制器編程到觸摸檢測模式,并檢查PEN_DOWN IRQ的數(shù)據(jù)位。對于夏普的處理器,觸摸檢測內(nèi)建在ADC命令序列中,不需要額外的步驟。

讀取觸摸數(shù)據(jù)

在校準(zhǔn)和正常操作期間,我們需要讀取X和Y軸的原始數(shù)據(jù)并去抖動,然后確定屏幕被觸摸時(shí)是否有穩(wěn)定的讀數(shù)。該過程在兩個(gè)驅(qū)動程序中都叫TouchScan()。該過程的要點(diǎn)是:

1. 檢查屏幕是否被觸摸;

2. 采集每個(gè)軸上的多個(gè)原始讀數(shù)用于以后的過濾;

3. 檢查屏幕是否仍在被觸摸。

在執(zhí)行模數(shù)轉(zhuǎn)換時(shí),兩個(gè)控制器都提供了由編程產(chǎn)生延遲的方法,以在給觸摸層加電和開始實(shí)際的模數(shù)轉(zhuǎn)換之間插入一段時(shí)延。飛思卡爾把這段時(shí)延稱作數(shù)據(jù)建立計(jì)數(shù)(DSCNT),在兩層切換后會有很多個(gè)ASP輸入時(shí)鐘長度的延時(shí)。夏普把這段時(shí)延稱為預(yù)充時(shí)延。

兩種CPU都需要這種時(shí)延,因?yàn)殡娮栌|摸面板是二塊由薄絕緣層隔離的大面積導(dǎo)體,正好形成一個(gè)電容。當(dāng)從將要執(zhí)行模數(shù)轉(zhuǎn)換的層切換到正在加電的層時(shí),需要一定的延時(shí)才能保證電容達(dá)到穩(wěn)定狀態(tài)。

對于飛思卡爾的i.MX1處理器來說,一旦我們啟動轉(zhuǎn)換過程,那么由ADC產(chǎn)生的數(shù)據(jù)將被保存在一個(gè)16位寬x12個(gè)條目深度的FIFO 中。ADC產(chǎn)生9位無符號數(shù)據(jù),因此每個(gè)16位條目的高7位將被忽略掉。這意味著這種觸摸控制器的全部數(shù)據(jù)范圍從0到511,不過實(shí)際上沒有ADC或電阻觸摸屏?xí)a(chǎn)生接近這個(gè)極限值的數(shù)據(jù)。

我們可以通過編程讓處理器在FIFO存有任何有效數(shù)據(jù)時(shí)就產(chǎn)生中斷,或在輸入FIFO裝滿時(shí)產(chǎn)生中斷。由于我們通常會做多次讀取,因此驅(qū)動程序一般會在FIFO裝滿時(shí)產(chǎn)生中斷。當(dāng)該中斷產(chǎn)生時(shí),會有12個(gè)原始的模數(shù)轉(zhuǎn)換數(shù)據(jù)等待處理,分別對應(yīng)于X軸的6次讀數(shù)和Y軸的6次讀數(shù)。

夏普LH79524處理器允許在產(chǎn)生中斷前通過編程完成精確的步驟序列。在執(zhí)行每個(gè)步驟時(shí),結(jié)果同樣會保存在輸入FIFO中,等待驅(qū)動程序軟件的讀取。結(jié)果是以16位數(shù)值進(jìn)行保存。每個(gè)結(jié)果的高10位是模數(shù)轉(zhuǎn)換值,最低4位是序列索引。10位轉(zhuǎn)換結(jié)果意味著這種觸摸控制器的最大數(shù)值范圍是 0到1023,當(dāng)然你永遠(yuǎn)也不會觀察到接近極限值的結(jié)果。

一旦序列器控制字在LH79524上被編好程,驅(qū)動程序獲取原始讀數(shù)所需要做的就是命令序列器執(zhí)行。當(dāng)EOS(序列結(jié)束)中斷產(chǎn)生時(shí),我們獲得的結(jié)果就可以用于采集和檢查了。序列器可以被配置為當(dāng)屏幕被觸摸時(shí)自動觸發(fā)、根據(jù)軟件命令觸發(fā)或連續(xù)觸發(fā)三種模式。

要注意原始轉(zhuǎn)換器讀數(shù)中經(jīng)常會有一些噪聲和偏差,這是正常的。你只有緊緊壓住電阻觸摸屏才能得到兩個(gè)連續(xù)的讀數(shù),并取得一致的9位或10位原始數(shù)據(jù)。然而你會發(fā)現(xiàn)當(dāng)觸控筆或手指按上或離開觸摸屏?xí)r,讀數(shù)的變化要比你保持穩(wěn)定壓力時(shí)大得多。要記住用戶是以機(jī)械的方式連通二個(gè)平面電阻-觸摸層。當(dāng)用戶按壓和釋放觸摸屏?xí)r,在很短的一段時(shí)間內(nèi)兩層之間的電氣連接處于臨界狀態(tài)。我們需要丟棄這些讀數(shù)直到系統(tǒng)穩(wěn)定下來,否則我們提交的觸摸位置讀數(shù)會產(chǎn)生大幅跳躍,導(dǎo)致更高層的軟件無法進(jìn)行合適的操作。

這里不可避免要進(jìn)行折衷考慮。如果我們要求較窄的穩(wěn)定窗口,那么驅(qū)動程序?qū)o法跟蹤快速的"拖曳"操作。對于在簽名輸入期間發(fā)生的滑動或筆劃跟蹤事件來說快速拖曳是非常重要的。如果我們加寬穩(wěn)定窗口,我們就可能面臨著風(fēng)險(xiǎn),這些風(fēng)險(xiǎn)包括接收到不精確的觸摸數(shù)據(jù)和上文描述過的處于臨界狀態(tài)的層連接結(jié)果。因此需要通過實(shí)驗(yàn)來確定適合自己系統(tǒng)的最佳值。智能化的觸摸控制器同樣允許你通過軟件命令調(diào)整這些參數(shù)。

每個(gè)樣值所需的讀取次數(shù)、連續(xù)讀取間允許的偏差以及采樣速率是每個(gè)驅(qū)動程序的全部可編程參數(shù)?梢酝ㄟ^#defines調(diào)整這些參數(shù)以便在你的系統(tǒng)上產(chǎn)生最佳結(jié)果。智能化的外部觸摸控制器一般會以很快的速度讀取數(shù)十或數(shù)百個(gè)數(shù)據(jù)用以改善精度。由于我們是用核心CPU完成這種過濾,因此我們需要確定有多少時(shí)間可以合理地分配給觸摸采樣任務(wù)。嵌入式系統(tǒng)包含折衷,你的任務(wù)就是想出最佳的折衷辦法,以產(chǎn)生能使用戶滿意的系統(tǒng)。

出于游戲目的,我喜歡測試日常生活中所遇到的商業(yè)觸摸系統(tǒng)。下一次當(dāng)你使用觸摸屏進(jìn)行購物簽名或包裹簽名時(shí),你可以嘗試快速大范圍波浪形地移動觸控筆,然后觀察結(jié)果,查看屏幕跟蹤你移動的程度如何。如果你能看到漂亮光滑的跟蹤軌跡,你就知道驅(qū)動程序的采樣速率相當(dāng)快,可能在200Hz以上。經(jīng)常你會觀察到移動軌跡變成了一條直線(慢速采樣)或完全丟失(由于數(shù)值改變過大而被拒絕輸入)。當(dāng)你在零售商店進(jìn)行這種小測試的時(shí)候千萬不要大呼小叫,否則人們會用異樣的目光看你。正常人是不會理解什么東西會使工程師那么激動。

觸摸屏的校準(zhǔn)

到此我們已經(jīng)介紹了驅(qū)動程序所支持的全部功能,這是我們進(jìn)入下一步之前必須完成的繁瑣工作。既然各種功能都已就緒,可以讓用戶實(shí)際觸摸屏幕了。

電阻觸摸屏需要校準(zhǔn)。我們需要一些參考值,以便我們能夠?qū)⒔邮盏降脑寄?shù)轉(zhuǎn)換值轉(zhuǎn)換成高層軟件所需的屏幕像素坐標(biāo)。理想情況下校準(zhǔn)程序只要在產(chǎn)品初次加電測試過程中運(yùn)行一次就可以了,參考值被存儲在非易失性存儲器中。我已經(jīng)安排好讓觸摸驅(qū)動程序在一啟動時(shí)就運(yùn)行校準(zhǔn)程序,但要記住,你要把參考值保存起來,以免讓用戶在以后的加電啟動期間再做校準(zhǔn)。不過無論如何你仍然需要向用戶提供一種進(jìn)入校準(zhǔn)例程的途徑,從而在由于溫度漂移或其它因素造成校準(zhǔn)不準(zhǔn)確時(shí)進(jìn)行重新校準(zhǔn)。

校準(zhǔn)例程的名稱是CalibrateTouchScreen(),它是一個(gè)簡單的逐步操作過程,會在屏幕上向用戶提供圖形目標(biāo),并要求用戶觸摸目標(biāo),然后記錄下原始的ADC讀數(shù),該讀數(shù)將用于后面的原始數(shù)據(jù)轉(zhuǎn)換到像素位置的調(diào)整例程。圖形目標(biāo)和用戶提示通過使用便攜式圖形用戶界面 (PEG)圖形軟件API顯示在屏幕上,不過這也可以通過類似的圖形軟件實(shí)現(xiàn)。

在理想情況下你只需兩組(X和Y)原始數(shù)據(jù),即在屏幕對角讀取的最小和最大值。而在實(shí)際應(yīng)用中,因?yàn)樵S多電阻觸摸屏存在顯著的非線性,因此如果在最小和最大值之間簡單的插入位置數(shù)值會導(dǎo)致驅(qū)動程序非常的不精確。

非線性意味著在屏幕上的等距物理移動會導(dǎo)致原始數(shù)據(jù)的增量不等。更糟的情況下,即使我們只改變X軸的觸摸位置,但從Y軸讀取的數(shù)據(jù)也會發(fā)生很大的變化。為了演示這一現(xiàn)象,我用觸控筆在一個(gè)典型的電阻觸摸屏上從左到右移動,盡量保持Y軸位置不變,同時(shí)在圖上記錄Y軸的讀數(shù)。你當(dāng)然希望觸控筆從左到右在X軸上滑動時(shí)Y軸讀數(shù)能保持一定程度的恒定,但從圖3可以看出完全不是這回事。

得出的結(jié)論是采用的校準(zhǔn)點(diǎn)越多越好,盡量減小內(nèi)插窗口的間距,才能產(chǎn)生可能的最佳精度。如果你能在工廠做一次校準(zhǔn),那么得到大量采樣點(diǎn)并不是件難事。如果無法在工廠完成校準(zhǔn),那你必須確定用戶需要輸入多少個(gè)點(diǎn)才能產(chǎn)生足夠精確的校準(zhǔn)。本文提供的校準(zhǔn)例程用了四個(gè)數(shù)據(jù)點(diǎn),即屏幕的每個(gè)角一個(gè)。對于參考板上的VGA分辨率(640x480)顯示屏幕來說,這樣做的精度可達(dá)到一個(gè)或二個(gè)像素之內(nèi)。對于更高的屏幕分辨率或其它觸摸屏,要產(chǎn)生一個(gè)精確的驅(qū)動程序這些點(diǎn)也許過多,也許不夠。做出準(zhǔn)確判定的唯一途徑只能是對具體的硬件進(jìn)行大量反復(fù)測試。

在任何情況下,我的建議是盡可能多做些校準(zhǔn)點(diǎn)。對用戶來說,難得做一次較長時(shí)間的校準(zhǔn)操作總比正常狀態(tài)下系統(tǒng)無法對觸摸輸入做出精確響應(yīng)要好。

正常操作

一旦校準(zhǔn)過程完成,我們就可以開始正常的操作,并開始向更高層軟件發(fā)送觸摸事件。我把提供的每個(gè)觸摸驅(qū)動程序在每種支持的RTOS環(huán)境中都作為低優(yōu)先級任務(wù)加以執(zhí)行。任務(wù)的入口名叫PegTouchTask,因?yàn)轵?qū)動程序需要與PEG圖形軟件進(jìn)行交互操作。這些驅(qū)動程序修改后,可與其它圖形軟件甚至你自己編寫的用戶接口環(huán)境協(xié)同工作。在任何時(shí)候PegTouchTask總是先調(diào)用硬件配置例程,然后調(diào)用校準(zhǔn)例程,最后進(jìn)入等待觸摸輸入的無限循環(huán)中。

在MX1驅(qū)動程序中,無限循環(huán)通過等待前文描述的PEN_DOWN中斷事件中止自身循環(huán)。當(dāng)屏幕被觸摸時(shí),該任務(wù)會持續(xù)讀取原始數(shù)據(jù),將他們轉(zhuǎn)換成屏幕像素坐標(biāo),并將觸摸位置或狀態(tài)的變化發(fā)送給更高層的軟件。我把這稱為"活動跟蹤"模式。

LH79524驅(qū)動程序以相似的方式工作。當(dāng)產(chǎn)生PEN_DOWN中斷時(shí),我們命令A(yù)DC序列器開始進(jìn)行轉(zhuǎn)換。驅(qū)動程序以20Hz的速度工作,檢查位置的變化,直到屏幕不再處于被觸摸的狀態(tài)。

當(dāng)屏幕被觸摸時(shí),我們需要對每個(gè)軸連續(xù)讀取多個(gè)轉(zhuǎn)換值以確定觸摸位置是否穩(wěn)定。如果任何兩個(gè)連續(xù)讀數(shù)中的增量或變化超出#defined定義的噪聲窗口范圍,我們就要重新開始。我們一直這樣做,直到讀取的多個(gè)連續(xù)值處于#defined定義的穩(wěn)定范圍內(nèi),此時(shí)我們可以調(diào)整該結(jié)果并向更高層軟件報(bào)告更新。當(dāng)屏幕不再被觸摸時(shí),我們又可以中斷此任務(wù),等待觸摸輸入事件的發(fā)生。

在每個(gè)轉(zhuǎn)換過程的前后,驅(qū)動程序必須檢查并確認(rèn)屏幕仍處于被觸摸狀態(tài)。我們不希望向更高層的軟件報(bào)告實(shí)際上是處于"開路狀態(tài)"的穩(wěn)定讀數(shù)。我也看到過有的驅(qū)動程序在屏幕被初始觸摸后會忽略掉N個(gè)讀數(shù)。不過對于這兩塊參考電路板,我沒有發(fā)現(xiàn)忽略掉一定數(shù)量的初始讀數(shù)是有必要或有益的。

當(dāng)屏幕被觸摸時(shí),驅(qū)動程序得到每個(gè)穩(wěn)定的讀數(shù),并利用簡單的線性插值法將原始數(shù)據(jù)轉(zhuǎn)換成像素坐標(biāo)。讀取原始數(shù)據(jù)并將它們轉(zhuǎn)換成屏幕坐標(biāo)的例程名字叫GetScaleTouchPosition()。

最后部分

好了,我們終于調(diào)整好驅(qū)動程序,獲得了精確、調(diào)整過的、可靠的觸摸信息。這些重要的數(shù)據(jù)能用來干什么呢?如果你正在運(yùn)行象PEG這樣的圖形用戶接口系統(tǒng),大部分工作到此就結(jié)束了。你只要簡單的將這些觸摸數(shù)據(jù)整理成消息,并將消息發(fā)送到PEG消息隊(duì)列。PEG軟件會對這些數(shù)據(jù)作出正確地處理。

PEG可以識別三種觸摸輸入事件類型,分別對應(yīng)于向下觸摸、向上觸摸和拖曳。發(fā)送拖曳事件是可選的,但如果你希望向用戶提供平滑的屏幕移動操作,那么發(fā)送拖曳事件就是必須的了。確定該發(fā)送哪種類型的消息給PEG消息隊(duì)列的邏輯包含在所提供的源代碼中名為SendTouchMessage ()的函數(shù)中。

這里需要強(qiáng)調(diào)的一點(diǎn)是用于發(fā)送drag(PM_POINTERMOVE)消息的名為Fold()的函數(shù)的使用。這是一個(gè)方便使用的PEG API函數(shù),可以防止用戶接口的響應(yīng)落后于用戶的輸入。例如,如果用戶正在高分辨率顯示器上滾動一個(gè)大窗口,那么用戶接口很可能在重畫滾動窗口時(shí)遲滯一段時(shí)間。在用戶接口的響應(yīng)能跟上時(shí),用戶一釋放滾動條屏幕就應(yīng)該立即停止?jié)L動。但如果消息隊(duì)列已經(jīng)包含了一個(gè)PM_POINTERMOVE消息,我們只需要將這條消息更新到最新位置,而不用再發(fā)送新的消息。這樣做的效果就是用戶接口滾動到最新位置,跳過了對處理器來說太快的所有中間位置更新。

這就是PEG提供Fold函數(shù)的目的。它會檢查這個(gè)消息類型是否已經(jīng)在消息隊(duì)列中,如果在,那么它只是簡單的更新這條已有的消息,而不是發(fā)送全新的消息。如果你正在使用另外一種圖形軟件包,你也會希望實(shí)現(xiàn)類似的功能。

動手下載

本文主要介紹了如何為兩個(gè)集成了觸摸屏控制電路的主流CPU編寫觸摸屏驅(qū)動程序。你可以從ftp://ftp.embedded.com/pub/2005/07maxwell 網(wǎng)站免費(fèi)下載每個(gè)驅(qū)動程序的源代碼,并按照你的意圖使用和修改。

提供精確可靠的觸摸信息顯然要花費(fèi)大量的處理器時(shí)間。專門設(shè)計(jì)用于支持觸摸屏輸入的智能化的ADC可以顯著地減輕核心CPU的負(fù)擔(dān),并有效地提高觸摸屏輸入系統(tǒng)的精度。

Ken Maxwell曾是一位應(yīng)用軟件工程師,在編寫嵌入式軟件方面有18多年的豐富經(jīng)驗(yàn)。Ken目前是Swell軟件公司總裁。該公司是用于嵌入式系統(tǒng)的 PEG+和C/PEG圖形軟件開發(fā)商。Ken的email地址是:touch@swellsoftware.com。

  • 上一篇: 基于DTMF的智能電話控制器
  • 下一篇: 等離子顯示屏GU128×64的接口設(shè)計(jì)與應(yīng)用
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請聯(lián)系機(jī)電之家,機(jī)電之家將及時(shí)作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會
    中國行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1