ARM的觸摸屏程序設(shè)計(jì)
一、 實(shí)驗(yàn)?zāi)康?br>1.了解觸摸屏基本概念與原理。
2.理解觸摸屏與LCD 的密切配合。
3.編程實(shí)現(xiàn)對(duì)觸摸屏的控制。
二、 實(shí)驗(yàn)內(nèi)容
學(xué)習(xí)觸摸屏基本原理,理解對(duì)觸摸屏進(jìn)行輸出標(biāo)定、與LCD 顯示器配合的過(guò)程。
三、 預(yù)備知識(shí)
1、用ARM SDT 2.5 集成開(kāi)發(fā)環(huán)境,編寫(xiě)和調(diào)試程序的基本過(guò)程。
2、ARM 應(yīng)用程序的框架結(jié)構(gòu)。
3、會(huì)使用Source Insight 3 編輯C 語(yǔ)言源程序。
4、能夠在LCD 上進(jìn)行格式化輸出。
四、 實(shí)驗(yàn)設(shè)備及工具
硬件:ARM 嵌入式開(kāi)發(fā)板、用于ARM7TDMI 的JTAG 仿真器、PC 機(jī)Pentumn100 以
上、模擬電壓信號(hào)源
軟件:PC 機(jī)操作系統(tǒng)win98、ARM SDT 2.51 集成開(kāi)發(fā)環(huán)境、仿真器驅(qū)動(dòng)程序、Source
Insight 3.0
五、 實(shí)驗(yàn)原理及說(shuō)明
1.觸摸屏原理
觸摸屏按其工作原理的不同分為表面聲波屏、電容屏、電阻屏和紅外屏幾種。而常見(jiàn)的
又?jǐn)?shù)電阻觸摸屏。
如圖12-1 所示,電阻觸摸屏的屏體部分是一塊與顯示器表面非常配合的多層復(fù)合薄膜,
由一層玻璃或有機(jī)玻璃作為基層,表面涂有一層透明的導(dǎo)電層,上面再蓋有一層外表面硬化
處理、光滑防刮的塑料層,它的內(nèi)表面也涂有一層透明導(dǎo)電層,在兩層導(dǎo)電層之間有許多細(xì)
小(小于千分之一英寸)的透明隔離點(diǎn)把它們隔開(kāi)絕緣。
圖8-1 (北泰)觸摸屏的結(jié)構(gòu)
如圖8-2 所示,當(dāng)手指或筆觸摸屏幕時(shí)(圖c),平常相互絕緣的兩層導(dǎo)電層就在觸摸點(diǎn)
位置有了一個(gè)接觸,因其中一面導(dǎo)電層(頂層)接通X 軸方向的5V 均勻電壓場(chǎng)(圖a),使
得檢測(cè)層(底層)的電壓由零變?yōu)榉橇悖?a target="_blank">控制器偵測(cè)到這個(gè)接通后,進(jìn)行A/D 轉(zhuǎn)換,并將
得到的電壓值與5V 相比即可得觸摸點(diǎn)的X 軸坐標(biāo)為(原點(diǎn)在在靠近接地點(diǎn)的那端):
Xi=Lx*Vi / V(即分壓原理)
同理得出Y 軸的坐標(biāo),這就是所有電阻技術(shù)觸摸屏共同的最基本原理。
2.電阻觸摸屏的有關(guān)技術(shù)
電阻觸摸屏的主要部分是一塊與顯示器表面非常配合的電阻薄膜屏,這是一種多層的復(fù)
合薄膜,由一層玻璃或有機(jī)玻璃作為基層,表面涂有一層叫ITo 的透明導(dǎo)電層,上面再蓋有
一層外表面硬化處理、光滑防刮的塑料層,它的內(nèi)表面也涂有一層導(dǎo)電層(ITO 或鎳金)。
電阻觸摸屏的兩層ITOI 工作面必須是完整的,在每個(gè)工作面的兩條邊線上各涂一條銀
膠,一端加5V 電壓,一端加0V,就能在工作面的一個(gè)方向上形成均勻連續(xù)的平行電壓分
布。在偵測(cè)到有觸摸后,立刻A/D 轉(zhuǎn)換測(cè)量接觸點(diǎn)的模擬量電壓值,根據(jù)5V 電壓下的等
比例公式就能計(jì)算出觸摸點(diǎn)在這個(gè)方向上的位置。
透明的導(dǎo)電涂層有兩種:
1)ITO,氧化鋼,弱導(dǎo)電體,特性是當(dāng)厚度降到1800 個(gè)埃(埃=10-9 米)以下時(shí)會(huì)突然
變得透明,透光度為80%,再薄下去透光率反而下降,到300 埃厚度時(shí)又上升到80%。但
有遺憾是ITO 在這個(gè)厚度下非常脆,容易折斷產(chǎn)生裂紋。 ITO 是所有電阻技術(shù)觸摸屏及電
容技術(shù)觸摸屏都用到的主要材料,實(shí)際上電阻和電容技術(shù)觸摸屏的工作面就是ITO 涂層。
2)鎳金涂層,五線電阻觸摸屏的外層導(dǎo)電層使用的是延展性極好的鎳金涂層材料,外
導(dǎo)電層由于頻繁觸摸,使用延展性好的鎳金材料目的是為了延長(zhǎng)使用壽命,但是成本較為高
昂,鎳金導(dǎo)電層雖然延展性好,但是只能作透明導(dǎo)體,不適合作為電阻觸摸屏的工作面,因
為它導(dǎo)電性太好,不直作精密電阻測(cè)量,而且金屬不易做到厚度非常均勻。
第一代四線觸摸屏兩層ITOI 作面工作時(shí)都加上5V 到0V 的均勻電壓分布場(chǎng):一個(gè)工作
面加豎直方向的,一個(gè)工作面加水平方向的。引線至控制器總共需要四根電纜。因?yàn)樗木€電
阻觸摸屏靠外的那層塑膠及ITO 涂層被經(jīng)常觸動(dòng),一段時(shí)間后外層薄薄的ITo 涂層就會(huì)有了
細(xì)小的裂紋,顯然,導(dǎo)電工作面一旦有了裂紋,電流就會(huì)繞之而過(guò),工作而上的電壓場(chǎng)分布
也就不可能再均勻,這樣,在裂紋附近觸摸屏漂移嚴(yán)重,裂紋增多后,觸摸屏有些區(qū)域可能
就再也觸摸不到了。
四線電阻觸摸屏的基層大多數(shù)是有機(jī)玻璃,不僅存在透光率低、風(fēng)化、老化的問(wèn)題,并
且存在安裝風(fēng)險(xiǎn),這是因?yàn)橛袡C(jī)玻璃剛性差,安裝時(shí)不能捏邊上的銀膠,以免薄薄的ITO
和相對(duì)厚實(shí)的銀膠脫裂,不能用力壓或拉觸摸屏,以免拉斷ITO 層。有些四線電阻觸摸屏
安裝后顯得不太平整就是因?yàn)檫@個(gè)原因。
ITO 是無(wú)機(jī)物,有機(jī)玻璃是有機(jī)物,有機(jī)物和無(wú)機(jī)物是不能良好結(jié)合的,時(shí)間一長(zhǎng)就容
易剝落。如果能夠生產(chǎn)出曲面的玻璃板,玻璃是無(wú)機(jī)物,能和ITO 非常好的結(jié)合為導(dǎo)電玻
璃,這樣電阻觸摸屏的壽命能夠大大延長(zhǎng)。
第二代五線電阻技術(shù)觸摸屏的基層使用的就是這種導(dǎo)電玻璃,不僅如此,五線電阻技術(shù)
把兩個(gè)方向的電壓場(chǎng)通過(guò)精密電阻網(wǎng)絡(luò)都加在玻璃的導(dǎo)電工作面上,我們可以簡(jiǎn)單的理解為
兩個(gè)方向的電壓場(chǎng)分時(shí)加在同一工作面上,而外層鎳金導(dǎo)電層只僅僅用來(lái)當(dāng)作純導(dǎo)體,有觸
摸后靠既檢測(cè)內(nèi)層ITO 接觸點(diǎn)電壓又檢測(cè)導(dǎo)通電流的方法測(cè)得觸摸點(diǎn)的位置。五線電阻觸摸屏內(nèi)層ITO 需四條引線,外層只作導(dǎo)體僅僅一條,至控制器總共需要5 根電纜。因?yàn)槲?br>線電阻屏的外層鎳金導(dǎo)電層不僅延展性好,而且只作導(dǎo)體,只要它不斷成兩半,就仍能繼續(xù)
完成作為導(dǎo)體的使命,而身負(fù)重任的內(nèi)層1TO 直接與基層玻璃結(jié)合為一體成為導(dǎo)電玻璃,
導(dǎo)電玻璃自然沒(méi)有了有機(jī)玻璃作基層的種種弊端,因此,五線電阻屏的使用壽命和透光率與
四線電阻屏相比有了一個(gè)飛躍:五線電阻屏的觸摸壽命是3 千5 百萬(wàn)次,四線電阻屏則是小
于1 百萬(wàn)次,且五線電阻觸摸屏沒(méi)有安裝風(fēng)險(xiǎn),同時(shí)五線電阻屏的ITO 層能做得更薄,因
此透光率和清晰度更高,幾乎沒(méi)有色彩失真。
不管是四線電阻觸摸屏還是五線電阻觸摸屏,它們都是一種對(duì)外界完全隔離的工作環(huán)
境,不怕灰塵、水汽和油污,它可以用任何物體來(lái)觸摸,可以用來(lái)寫(xiě)字畫(huà)畫(huà),比較適合工業(yè)
控制領(lǐng)域及辦公室內(nèi)有限人的使用。電阻觸摸屏共同的缺點(diǎn)是因?yàn)閺?fù)合薄膜的外層采用塑膠
材料,不知道的人太用力或使用銳器觸摸可能劃傷整個(gè)觸摸屏而導(dǎo)致報(bào)廢。不過(guò),在限度之
內(nèi),劃傷只會(huì)傷及外導(dǎo)電層,外導(dǎo)電層的劃傷對(duì)于五線電阻觸摸屏來(lái)說(shuō)沒(méi)有關(guān)系,而對(duì)四線
電阻觸摸屏來(lái)說(shuō)是致命的。
3.觸摸屏的控制
觸摸屏的控制采用專用芯片,專門(mén)處理是否有筆或手指按下觸摸屏,并在按下時(shí)分別給
兩組電極通電,然后將其對(duì)應(yīng)位置的模擬電壓信號(hào)經(jīng)過(guò)A/D 轉(zhuǎn)換送回處理器。
圖8-3 觸摸屏控制結(jié)構(gòu)(ADS7843)
4.觸摸屏與顯示器的配合
ADS7843 送回控制器的X 與Y 值僅是對(duì)當(dāng)前觸摸點(diǎn)的電壓值的A/D 轉(zhuǎn)換值,它不具有
實(shí)用價(jià)值。這個(gè)值的大小不但與觸摸屏的分辨率有關(guān),而且也與觸摸屏與LCD 貼合的情況
有關(guān)。而且,LCD 分辨率與觸摸屏的分辨率一般來(lái)說(shuō)是不一樣,坐標(biāo)也不一樣,因此,如
果想得到體現(xiàn)LCD 坐標(biāo)的觸摸屏位置,還需要在程序中進(jìn)行轉(zhuǎn)換。假設(shè)LCD 分辨率是
320*240,坐標(biāo)原點(diǎn)在左上角;觸摸屏分辨率是900*900,坐標(biāo)原點(diǎn)在左上角,則轉(zhuǎn)換公式
如下:
xLCD=[320*(x-x2)/(x1-x2)];
yLCD=[240*(y-y2)/(y1-y2)];
如果坐標(biāo)原點(diǎn)不一致,比如LCD 坐標(biāo)原點(diǎn)在右下角,而觸摸屏原點(diǎn)在左上角,則還可
以進(jìn)行如下轉(zhuǎn)換:
xLCD=320-[320*(x-x2)/(x1-x2)];
yLCD=240-[240*(y-y2)/(y1-y2)];
最后得到的值,便可以盡可能得使LCD 坐標(biāo)與觸摸屏坐標(biāo)一致,這樣,更具有實(shí)際意
義。
5.與觸摸屏有關(guān)的函數(shù):
void TchScr_init(); //觸摸屏寄存器設(shè)置
void TchScr_GetScrXY(int *x, int *y, U8 bCal); //獲取當(dāng)前觸摸的轉(zhuǎn)換結(jié)果
六、 實(shí)驗(yàn)步驟
首先,在主函數(shù)中加入下列代碼:
void Main(void)
{
Port_Init(); //端口初始化
LCD_Init(); //LCD 初始化,因要用到LCD 輸出結(jié)果
TchScr_init(); //初始化觸摸屏
LCD_TOUCH(); //觸摸屏輸出結(jié)果
while(1) ; //死循環(huán)等待
}
即首先初始化處理器端口,TchScr_init()對(duì)觸摸屏控制芯片進(jìn)行必要的設(shè)置并啟動(dòng),然后
使用LCD_TOUCH()等待有筆或手指壓下觸摸屏,并輸出坐標(biāo)。
1)觸摸屏測(cè)試,觸摸LCD 上某點(diǎn),輸出點(diǎn)的未經(jīng)坐標(biāo)轉(zhuǎn)換的坐標(biāo)。由于觸摸屏輸出的
實(shí)際上是一個(gè)線性電阻的分壓輸出,因此,其值只能保證是線性,卻無(wú)法保證與LCD 的坐
標(biāo)一致,因此,首先對(duì)其進(jìn)行檢測(cè)。在LCD_TOUCH()函數(shù)中,轉(zhuǎn)換函數(shù)的第三個(gè)參數(shù)使用
0,TchScr_GetScrXY(&x, &y,0),即不對(duì)AD 轉(zhuǎn)換結(jié)果進(jìn)行轉(zhuǎn)換。
void LCD_TOUCH()
{
int x,y,i;
U32 TchScrAction=TCHSCR_ACTION_UP;
LCD_ChangeMode(DspTxtMode);
LCD_printf("begin TouchScreen Task\n");
for(;;){
if(TchScrAction==TCHSCR_ACTION_UP){//筆未壓下?tīng)顟B(tài)位
if(!((rPDATC&ADS7843_PIN_PEN)>>11)){//得到筆壓下中斷信號(hào)
Delay(50);
if(!((rPDATC&ADS7843_PIN_PEN)>>11)){//兩次檢測(cè)防干擾
TchScr_GetScrXY(&x, &y,0); //第三參數(shù)為0 時(shí)表示不經(jīng)轉(zhuǎn)換
TchScrAction=TCHSCR_ACTION_DOWN;//設(shè)置壓下?tīng)顟B(tài)
LCD_printf("X=%d,Y=%d",x,y);//輸出當(dāng)前結(jié)果
}
}
}
if(TchScrAction==TCHSCR_ACTION_DOWN){//筆已壓下?tīng)顟B(tài)位
if((rPDATC&ADS7843_PIN_PEN)>>11) {//筆中斷信號(hào)已經(jīng)消失
Delay(50);
if((rPDATC&ADS7843_PIN_PEN)>>11) { //兩次檢測(cè)防干擾
TchScrAction=TCHSCR_ACTION_UP;//設(shè)置筆未壓狀態(tài)位
}
}
}
}
}
設(shè)置好上述代碼后,對(duì)其進(jìn)行編譯并運(yùn)行,然后分別用非尖利的筆頭壓下LCD 的四個(gè)
腳,得到輸出的X,Y 結(jié)果,并將之記下來(lái),得出上下左右的極限值。
2)校準(zhǔn)觸摸屏坐標(biāo)輸出,轉(zhuǎn)換坐標(biāo),與LCD 緊密配合
接下來(lái)使用步驟一中得到的值對(duì)其進(jìn)行校準(zhǔn),在LCD_TOUCH()函數(shù)中,轉(zhuǎn)換函數(shù)的第
三個(gè)參數(shù)使用1,TchScr_GetScrXY(&x, &y,1),即對(duì)AD 轉(zhuǎn)換結(jié)果進(jìn)行轉(zhuǎn)換。并將步驟一中
得到的觸摸屏坐標(biāo)的上下左右的極限值設(shè)置到void LoadAxisMax()函數(shù)中:
TchScr_Xmax=1840;
TchScr_Xmin=176;
TchScr_Ymax=195;
TchScr_Ymin=1910;
修改完代碼后,編譯并將結(jié)果下載到ARM 中運(yùn)行,再次用手或筆壓下觸摸屏,可以發(fā)
現(xiàn)輸出的坐標(biāo)與LCD 的實(shí)際坐標(biāo)一致。在此基礎(chǔ)上,便可以編寫(xiě)觸摸屏應(yīng)用程序了。
3) 下載“綜合應(yīng)用觸摸屏示例”目錄下的system.bin 文件,用觸摸屏操作應(yīng)用程序。
七、 思考題
1.電阻型觸摸屏檢測(cè)坐標(biāo)值的原理。
2.如果LCD 坐標(biāo)原點(diǎn)在右下角,分辨率為240X180,觸摸屏坐標(biāo)原點(diǎn)在右上角,請(qǐng)給
出觸摸屏輸出坐標(biāo)的轉(zhuǎn)換公式,觸摸屏的分辨率有什么影響。
評(píng)論