1 電阻觸摸屏介紹
如下圖所示四線電阻觸摸屏驅動,該開發(fā)板使用的是4線觸摸屏四線電阻觸摸屏驅動,方框標記的引腳是專門用來接收模擬輸入信號。
引腳說明:
YM: (Y Minus)觸摸屏的Y坐標的負線,也可以用Y -表示
YP : (Y Power)觸摸屏的Y坐標的正線, 也可以用Y+表示
XM: (Y Minus)觸摸屏的Y坐標的負線, 也可以用X-表示
XP : (Y Power)觸摸屏的Y坐標的正線, 也可以用X+表示
1.1 基本原理
電阻觸摸屏包含了兩個阻性層(電阻阻值均勻),如下圖所示
當沒有觸摸按下時,X層和Y層是分離的,此時就測不到電壓。
測量x方向的坐標時:如下圖, 把XP接3.3V , XM接0V, YP和YM懸空,我們以按壓X坐標的中間位置, X層和Y層便閉合了,此時YP就會輸出當前X坐標值的1.66V給CPU。
測量y坐標時:如下圖, 把YP接3.3V , YM接0V, XP和XM懸空,我們以按壓X坐標的中間位置, X層和Y層便閉合了,此時XP就會輸出當前X坐標值的1.66V給CPU 。
2 觸摸屏驅動需要使用的結構體與函數
input_dev結構體分析:
struct input_dev {
void *private;
const char *name; //設備名字
const char *phys; //文件路徑,比如 input/buttons
const char *uniq;
struct input_id id;
unsigned long evbit[NBITS(EV_MAX)]; //表示支持哪類事件,常用有以下幾種事件(可以多選)
//EV_SYN 同步事件,當使用input_event()函數后,就要使用這個上報個同步事件
//EV_KEY 鍵盤事件
//EV_REL (relative)相對坐標事件,比如鼠標
//EV_ABS (absolute)絕對坐標事件,比如搖桿、觸摸屏感應
//EV_MSC 其他事件,功能
//EV_LED LED燈事件
//EV_SND (sound)聲音事件
//EV_REP 重復鍵盤按鍵事件
//(內部會定義一個定時器,若有鍵盤按鍵事件一直按下/松開,就重復定時,時間一到就上報事件)
//EV_FF 受力事件
//EV_PWR 電源事件
//EV_FF_STATUS 受力狀態(tài)事件
unsigned long keybit[NBITS(KEY_MAX)]; //存放支持的鍵盤按鍵值
//鍵盤變量定義在:include/linux/input.h, 比如: KEY_L(按鍵L)、BTN_TOUCH(觸摸屏的按鍵)
unsigned long relbit[NBITS(REL_MAX)]; //存放支持的相對坐標值
unsigned long absbit[NBITS(ABS_MAX)]; //存放支持的絕對坐標值,存放下面4個absxxx[]
unsigned long mscbit[NBITS(MSC_MAX)]; //存放支持的其它事件,也就是功能
unsigned long ledbit[NBITS(LED_MAX)]; //存放支持的各種狀態(tài)LED
unsigned long sndbit[NBITS(SND_MAX)]; //存放支持的各種聲音
unsigned long ffbit[NBITS(FF_MAX)]; //存放支持的受力設備
unsigned long swbit[NBITS(SW_MAX)]; //存放支持的開關功能
... ...
/*以下4個數組都會保存在上面成員absbit[]里,數組號為:ABS_xx ,位于include/linux/input.h */
/*比如數組0,標志就是ABS_X,以下4個的absXXX[0]就是表示絕對位移X方向的最大值、最小值... */
/*對于觸摸屏常用的標志有:
ABS_X(X坐標方向), ABS_Y(Y坐標方向), ABS_PRESSURE(壓力方向,比如繪圖,越用力線就越粗)* /
int absmax[ABS_MAX + 1]; //絕對坐標的最大值
int absmin[ABS_MAX + 1]; //絕對坐標的最小值
int absfuzz[ABS_MAX + 1]; //絕對坐標的干擾值,默認為0,
int absflat[ABS_MAX + 1]; //絕對坐標的平焊位置,默認為0
... ...
上一篇:安阻法測電阻電動勢比實際值 高中物理,安阻法測電源電動勢為什么會使測得的內阻大于真實值,電動勢就為真實值?0