觸摸屏介紹以及初始化問題
1. 觸摸屏分類
觸摸屏作為一種輸入設(shè)備,是目前最簡(jiǎn)單、方便的一種人機(jī)交互方式,具有堅(jiān)固耐用、反應(yīng)速度快、節(jié)省空間、易于交流等許多優(yōu)點(diǎn)。
從技術(shù)原理來區(qū)別觸摸屏,可分為5類:
1.電阻式觸摸屏
2.電容式觸摸屏
3.紅外線技術(shù)觸摸屏
4.表面聲波技術(shù)觸摸屏
5.矢量壓力傳感技術(shù)觸摸屏
2.?電阻屏工作原理
當(dāng)手指觸摸屏幕時(shí),兩個(gè)相互絕緣的導(dǎo)電層在觸摸點(diǎn)處連接,頂層的5伏電壓就會(huì)加到底層觸摸點(diǎn)處,底層該點(diǎn)的電壓會(huì)發(fā)生改變。
控制器檢測(cè)到該點(diǎn)的變化后,將該點(diǎn)的電壓進(jìn)行A/D轉(zhuǎn)換,得到的值與5伏相比,再乘以該軸總長(zhǎng)度即可得觸摸點(diǎn)靠地那一端的坐標(biāo)
3.電容屏原理
相比于電阻屏,電容屏的優(yōu)點(diǎn)是感應(yīng)靈敏,支持多點(diǎn)觸摸,更適合現(xiàn)代電子產(chǎn)品的需求。
給工作面通上一個(gè)很低的電壓,當(dāng)用戶觸摸屏幕時(shí),手指頭吸收走一個(gè)很小的電流,這個(gè)電流分從觸摸屏四個(gè)角上的電極中流出,并且理論上流經(jīng)這四個(gè)電極的電流與手指到四角的距離成比例,控制器通過對(duì)這四個(gè)電流比例的精密計(jì)算,得出觸摸點(diǎn)的
位置。
4.初始化步驟
1.初始化:
①設(shè)置AD轉(zhuǎn)換時(shí)鐘
②中斷屏蔽設(shè)置
③進(jìn)入等待中斷模式(按下)
2.TC中斷處理(按下)
①啟動(dòng)XY坐標(biāo)自動(dòng)轉(zhuǎn)化
②等待轉(zhuǎn)化完成,獲取坐標(biāo)
③清除中斷
④進(jìn)入等待TC中斷模式(彈起)
⑤清除彈起中斷
⑥進(jìn)入等待中斷模式(按下)
#define ADCCON (*(unsigned long*) 0x58000000)
#define ADCTSC (*(unsigned long*) 0x58000004)
#define ADCDAT0 (*(unsigned long*) 0x5800000C)
#define ADCDAT1 (*(unsigned long*) 0x58000010)
#define SRCPND (*(unsigned long*) 0X4A000000)
#define INTMSK (*(unsigned long*) 0X4A000008)
#define INTPND (*(unsigned long*) 0X4A000010)
#define SUBSRCPND (*(unsigned long*) 0X4A000018)
#define INTSUBMSK (*(unsigned long*) 0x4A00001C)
int xdata, ydata;
void ts_init()
{
????//1. 設(shè)置AD轉(zhuǎn)換時(shí)鐘
????ADCCON = (1<<14)|(49<<6);
????//2. 設(shè)置中斷屏蔽位
????INTMSK = ~(1<<31);
????INTSUBMSK = ~(1<<9);
????//3. 進(jìn)入等待中斷模式
????ADCTSC = 0xd3;
}
void tc_handler()
{
????//1. 啟動(dòng)XY坐標(biāo)自動(dòng)轉(zhuǎn)換
????ADCTSC = (1<<2);
????ADCCON |= (1<<0);
????//2. 等待轉(zhuǎn)化完成
????while(!(ADCCON & (1<<15)));
????//3. 獲取坐標(biāo)
????xdata = ADCDAT0 & 0X3FF;
????ydata = ADCDAT1 & 0x3FF;
????//4. 清除按下中斷
????SUBSRCPND |= (1<<9);
????SRCPND = (1<<31);
????INTPND = (1<<31);
????//5. 進(jìn)入等待彈起中斷
????ADCTSC = 0xd3;
????ADCTSC |= (1<<8);
????while(1)
????{
????????if(SUBSRCPND &(1<<9))
????????????break;
????}
????//6. 清除談起中斷
????SUBSRCPND |= (1<<9);
????SRCPND = (1<<31);
????INTPND = (1<<31);
????printf("x is %d, y is %d n",xdata,ydata);
????//7. 進(jìn)入等待按下中斷的狀態(tài)
????ADCTSC = 0xd3;
}
差了幾個(gè)或居然就起不來
? ? ? ? ? ? ? ?
? ? ??