1.触摸屏优势:作为输入设备,简单方便,反应速度快,节省空间。
2.分类:
(1)电阻屏
(2)电容屏
3.电阻屏原理
(1)结构:

(2)工作流程:
a.手指触摸屏幕,使得两个相互绝缘的导电层接触
b.顶层触摸点电压会传递到底层,底层电压发生变化
c.CPU对底层电压AD转换
d.得到转换后的值与顶层电压的最大值相比,乘以屏幕总的长度,即可得到相对于电压为0的点的距离。
4.电容屏原理:
(1)结构:

(2)优势:反应更灵敏, 支持多点触控。
(3)工作流程:
a.手指触控屏幕,电流流经手指(表面的电压很小,但是必须有)
b.这个电流从屏幕的四个角流出,故产生四个方向的电流,且与他们到电极的距离成比例。
c.CPU对四个电流进行计算,从而得到触摸点的位置。
5.电阻屏驱动设计:
初始化:
(1)ADC时钟初始化:
ADCCLK = PCLK/(PRESCAL + 1),计算的时候都已MHZ为计算单位。一般不高于2MHz。(ADCCON)

(2)设置中断屏蔽位
INTMSK打开INT_ADC中断,INTSUBMSK使能ADC_TC中断,屏蔽ADC转换完成中断。
(3)进入等待按下中断模式
ADCTSC控制进入等待中断模式,而且是等待进入按下模式。


触摸处理函数
(1)启动XY坐标自动转换
ADCTSC

ADCCON

(2)等待转换完成

(3)获取坐标
ADCDAt0

ADCDAT1

(4)清除按下中断
SRCPND

INTPND

SUBSRCPND(只用到INT_TC)

(5)等待弹起中断(在等待进入按下模式的前面,即第8位置1即可)

(6)清除弹起中断
和清除按下中断一样,他们使用的中断源一样
(7)再次进入等待按下中断模式
和初始化的最后一步骤一样

6.大家注意自己在复制三星数据手册的时候,他的地址有时候会少一个0,今天就是被他浪费了时间,一直找不到错误,仔细一看原来是ADC相关寄存器地址只有7位,还以为自己连地址都不会定义了。
7.还有一个问题,当在lcd上输出图片以后,再去采集触摸位置,这时候输出不正常,得不到合理的位置的值。起初以为我声明用来存放x和y坐标的变量被之前我们存放到内存的图片数据覆盖了,所以得不到合理的值,直接取不出来。但后来我指定了XY坐标变量的在内存的地址,还是一样,这里表示有疑问????
8.老师的代码是直接屏蔽了按键中断,其实可以同时打开,如果后面中断源多了,还要设置中断优先级。
9.屏幕校准应该实现,还有我读出来的X和Y的值与现实中我们认为的x和y的方向是相反的。

版权声明:本文为YanfeiHao原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/YanfeiHao/articles/4429021.html