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