如上图示,假设有一个长度为L的电阻,一端接地,另一端接3.3v,如果这个电阻的阻值是均匀分布的,那么根据欧姆定律,电阻某一位置x的电压值就与电阻的长度就会有一个关系式,我们就可以根据这一点的电压推导出这一点在L的位置分布。
这就是电阻触摸屏的硬件原理。
在LCD屏幕上覆盖了一层触摸屏,这层触摸屏由两层贴的很近的膜组成。
在上面这层膜的两边引出Xp和Xm,在下面这层膜的两边引出Yp和Ym,当触摸屏被按下时,两层膜就会贴到一起,根据这一特点我们可以测出触点的X,Y坐标。
测量触点的X坐标:
- 将Xp接3.3v,Xm接地,Ym和Yp不接电源;
- 测Yp电压,就可以得到X坐标的AD值;
同理,测量触点的Y坐标:
- Xp,Xm不接电源,Ym接地,Yp接3.3v;
- 测Xp电压,就可以得到Y坐标的AD值。
再总结一下使用触摸屏的流程:
- 按下触摸屏,产生触摸中断;
- 在触摸中断中,启动ADC(获得X,Y坐标的AD值);
- ADC完成产生中断;
- 在ADC中断中读取X,Y坐标AD值;
- 松开;
注意上面的触摸中断和ADC中断是两个不同的中断,当我们单次点击触摸屏时,流程大致如上,但是,如果我们长按触摸屏不松开或者长按滑动,上面的流程就会有问题,因为它只处理第一次按下的触摸。
为了支持长按和滑动,流程的第五步需要更改一下:
- 从松开变为启动定时器;
- 增加第六步,定时器发生中断,判断触摸屏仍被按下,循环第2步,处理后续触摸;
- 增加第七步,检测已松开,那么结束流程。
总结一下,使用触摸屏的流程就变成了:
- 按下触摸屏,产生触摸中断;
- 在触摸中断中,启动ADC(获得X,Y坐标的AD值);
- ADC完成产生中断;
- 在ADC中断中读取X,Y坐标AD值;
- 启动定时器;
- 定时器发生中断,判断触摸屏仍被按下, 跳到第2步,否则跳到第7步;
- 已松开,结束流程。
下图是四线电阻触摸屏的等效电路,通过S1到S5五个开关的开通和闭合,我们就可以测量出触点的X,Y坐标。
下图是等待中断模式时的等效电路,也就是等待触摸屏被按下的电路,断开S1,S2,S3,闭合S4,S5,此时就处于等待中断模式,Y_ADC也就是Xp处于高电平,X_ADC/Yp则处于低电平,当触摸屏被按下时,Y_ADC/Xp的电平会被拉低,就会产生一个触摸中断。
当触摸屏被按下时,S1,S3闭合,S2,S4,S5断开,此时就可以读取X_ADC/Yp的AD值,进而读到触点的X坐标值。
同理,读取Y坐标的AD值时,断开S1,S3,S5,闭合S2,S4,此时读取Y_ADC/Xp的AD值,就可以得到触点的Y坐标。