SMT32F103ZET6的触摸屏实验

一、触摸屏


触摸屏(touch screen)又称为“触控屏”触控面板”,是一种可接收触头等输入讯号的感应式装置。作为一种新型的电脑输入设备,可以用来取代传统的机械按键等输入设备。它是目前最简单、方便、自然的一种人机交互方式。主要应用于公共信息的查询、领导办公工业控制、军事指挥、电了游戏、点歌点菜、多媒体教学、房地产预售等
触摸屏本质上与液晶是分离的。触摸屏负责的是检测触摸点,液晶屏负责的是显示。要区别开来。

二、触摸屏分类

按照触摸屏的工作原理和传输信息的介质,把触摸屏分为四种,它们分别为
①电阻式:定位准确,单点触摸

②电容感应式:支持多点触摸,价格偏贵。工业应用最广泛

③红外线式:价格低廉,但其外框易碎,容易产生光干扰,曲面情况下失真

④表面声波式:解决各种缺点,但是屏幕表面如果有水滴和尘土会使触摸屏变的迟钝

三、电容型触摸屏


电容屏是利用人体感应进行触点检测控制,只需要轻微接触,通过检测感应电流来定位触摸坐标。现在几乎所有智能手机,包括平板电脑都是采用电容屏作为触摸屏

1.电容型触摸屏分类

  • 表面电容式电容触摸屏

表面电容式触摸屏技术是利用ITO(铟锡氧化物,是一种透明的导电材料)导电膜,通过电场感应方式感测屏幕表面的触摸行为进行。但是表面电容式触摸屏有:些局限性,它只能识别一个手指或者一次触摸

  • 投射式电容触摸屏

投射电容式触摸屏是传感器利用触摸屏电极发射出静电场线。一般用于投射电容传感技术的电容类型有两种:自我电容和交互电容

①自我电容式
自我电容又称绝对电容,是最厂为采用的一种方法,自我电容通常是指扫描电极与地构成的电容。在玻璃表面有用TO制成的横向与纵向的扫描电极,这些电极和地之间就构成一个电容的两极。当用手或触摸笔触摸的时候就会并联个电容到电路中去,从而使在该条扫描线上的总体的电容量有所改变。在扫描的时候,控制IC依次扫描纵向和横向电极,并根据扫描前后的电容变化来确定触摸点坐标位置。笔记本电脑触摸输入板就是采用的这种方式,笔记本电脑的输入板采用X"丫的传感电极阵列形成一个传感格子当手指靠近触摸输入板时,在手指和传感电极之间产生一个小量电荷。采用特定的运算法则处理来自行、列传感器的信号来确定手指的位置。

②交互电容式
交互电容又叫做跨越电容,它是在玻璃表面的横间和纵问的I0电极的交叉处形成电容。交互电的扫描方式就是扫描每个交叉处的电容变化,来判定触摸点的位置。当触摸的时候就会影响到相邻电极的耦合,从而改变交叉处的电容量,交互电容的扫面方法可以侦测到每个交叉点的电容值和触摸后电容变化,因而它需要的扫描时间与自我电容的扫描方式相比要长一些,需要扫描检测X*Y根电极。目前智能手机/平板电脑等的触摸屏都是采用交互电容技术。

ALIENTEK所选择的电容触摸屏,也是采用的是投射式电容屏(交互电容类型)

透射式电容触摸屏采用纵横两列电极组成感应矩阵,来感应触摸。

以两个交又的电极矩阵,即:X轴电极和Y轴电极,来检测每一格感应单元的电容变化J轴电极

2.电阻屏与电容屏的区别

①电阻屏在触模时需要轻触压按,而电容屏只需轻微的手指触碰就能激活

②电阻屏可以用任何物体来触摸,而电容屏是人体热感应工作原理,只能用手指的热感区来触摸,指甲和手写笔均无效。由于手指头的面积比手写笔大很多,因此电容屏的手机,触摸比较小图标或者菜单的时候,触摸精度无法做到电阻屏那么高

③电容屏可以很容易进行多点触摸,电阻屏一般不能实现多点触摸的

④电阻屏内部是软的,一般是在4到5层超薄的钢化玻璃中间夹杂细微的炭粒(显微镜下才能看见),通过按压导致上下两层的炭粒相互接触而接通触屏电路,产生触摸反应,容易产生划痕,易坏,容易触屏不灵,而电容屏都是采用单层加厚钢化玻璃,硬度大,耐旧,使用寿长

⑤电阻屏在阳光下可视性稍差,电容屏则非常好,在阳光下可视性很强

电容触摸屏对工作环境的要求是比较高的,在潮湿、多尘、高低温环境下面,都是不适合使用电容屏的

3.电容触摸屏的优点

手感好、无需校准、支持多点触摸、透光性好。

4.电容触摸屏的缺点

成本高、精度不高、抗干扰能力差。

电容触摸屏一般都需要一个驱动IC来检测电容触摸,且一般是通过IC接口输出触摸数据的。

5.常见的2种电容触摸屏驱动IC

GT9147:采用17*10的驱动结构(10个感应通道、17个驱动通道)

OTT2001A:采用13*8的驱动结构(8个感应通道、13个驱动通道)

它们与MCU连接通过4根线:SDA、SCL、RST和INT

6.硬件连接(zdyz战舰版)

7.GT9147关键寄存器

①控制命令寄存器(0X8040)

该寄存器可以写入不同值,实现不同的控制,我们一般使用0和2这两个值,写入2,即可软复位GT9147,在硬复位之后,一般要往该寄存器写2,实行软复位。然后,写入0,即可正常读取坐标数据(并且会结束软复位)

②配置寄存器组(0X8047-0X8100)

这里共186个寄存器,用于配置GT9147的各个参数,这些配置:般由厂家提供给我们(一个数组),所以我们只需要将厂家给我们的配置,写入到这些寄存器里面,即可完成GT9147的配置

③产品ID寄存器(0X8140-0X8143)

这里总共由4个奇存器组成,用于保存产名ID,对于GT9147,这4个寄存器读出来就是:9,1,4,7四个字符(ASCII码格式)。因此,我们可以通过这4个寄存器的值,来判断驱动IC的型号,从而判断是OT12001A还是GT9147,以便执行不同的初始化

④状态寄存器(0X814E)


我们仅关心最高位和最低4位,最高位用于表示bufer状态,如果有数据(坐标/按键),bufer就会是1,最低4位用于表示有效触点的个数,范围是:0-5,0,表示没有触摸,5表示有5点触摸

⑤坐标数据寄存器(共30个)
这里共分成5组(5个点),每组6个寄存器存储数据,以触点1的坐标数据寄存器组为例,

我们一般只用到触点的x,y坐标,所以只需要读取0X8150-0X8153的数据,组合即可得到触点坐标:

其他4组分别是:0X8158、0X8160、0X8168和0X8170等开头的16个存器组成,分别针对触点2-4的坐标。

同样GT9147也支持寄存器地址自增,我们只需要发送寄存器组的首地址,然后连续读取即可,GT9147会自动地址自增,从而提高读取速度

四、电阻触摸屏

1.四线电阻屏工作原理

表面硬涂层起保护作用,主要是一层外表面硬化处理、光滑防擦的塑料层。玻璃底层用于
支撑上面的结构,主要是玻璃或者塑料平板。透明隔离点用来分离开外层 ITO 和内层 ITO ITO
层是触摸屏关键结构,是涂有铟锡金属氧化物的导电层。还有一个结构上图没有标出,就是 PET
层。 PET 层是聚酯薄膜,处于外层 ITO 和表面硬涂层之间,很薄很有弹性,触摸时向下弯曲,
使得 ITO 层接触。
当手指触摸屏幕时,两个 ITO 层在触摸点位置就有接触,电阻发生变化,在 X Y 两个
方向上产生电信号,然后送到触摸屏控制器,具体情况如下图 39.1.1.2 所示。触摸屏控制器侦
测到这一接触并计算出 X Y 方向上的 AD 值,简单来讲,电阻触摸屏将触摸点( X Y )的
物理位置转换为代表 X 坐标和 Y 坐标的电压值。单片机与触摸屏控制器进行通信获取到 AD
值,通过一定比例关系运算,获得 X 和 Y 轴坐标值。

电阻触摸屏的优点:精度高、价格便宜、抗干扰能力强、稳定性好。
电阻触摸屏的缺点:容易被划伤、透光性不太好、不支持多点触摸。

五、触摸屏程序注意事项

为什么需要校准?

确定电压和坐标之间的函数关系

校准参数保存在哪里?

保存在EEPROM(断电可保存),每次重新上电系统初始化后读出来这个参数即可

从以上介绍可知,触摸屏都需要一个 AD 转换器,一般来说是需要一个控制器的。正点原
TFTLCD 模块选择的是四线电阻式触摸屏,这种触摸屏的控制芯片有很多,包括: ADS7543 、 ADS7846、 TSC2046 XPT2046 HR2046 等。这几款芯片的驱动基本上是一样的,也就是你只要写出了 XPT2046 的驱动,这个驱动对其他几个芯片也是有效的。而且封装也有一样的,完全 PIN-TO-PIN 兼容。所以在替换起来,很方便。
正点原子 TFTLCD 模块自带的触摸屏控制芯片为 XPT2046 HR2046 。这里以 XPT2046
作为介绍。

六、XPT2046

XPT2046 是一款 4 导线制触摸屏控制器,使用的是 SPI 通信接口,内含 12 位分辨率 125KHz 转换速率逐步逼近型 A/D 转换器。 XPT2046 支持从 1.5V 5.25V 的低电压 I/O 接口。
XPT2046 能通过执行两次 A/D 转换(一次获取 X 位置,一次获取 Y 位置)查出被按的屏幕位置,除此之外,还可以测量加在触摸屏上的压力。内部自带 2.5V 参考电压可以作为辅助输入、温度测量和电池监测模式之用,电池监测的电压范围可以从 0V 6V
XPT2046 片内集成有一个温度传感器。在 2.7V 的典型工作状态下,关闭参考电压,功耗可小于 0.75mW

1.XPT2046数字接口

①前8个时钟通过DIN引脚输入控制字节(命令字)。

②转换器吸到与关下次转换的足够信息之后,接着根据获得的信息设置输入多路选择器和参考源输入,并进入采样模式。

③三个多时钟之后(等待),控制字节设置完成,转换器进入转换模式接着12个时钟周期,将完成真正的AD转换。

④如果度量比率转换方式(SER/_DRR=0),驱动器在转换过程中将一直工作,第13个时钟将输出转换的最后一位,剩下三个时钟完成转换器忽略的最后字节。

2.XPT2046控制字节(命令字)

u8 CMD_RDX=0XD0://读取X轴坐标命令

u8 CMD_RDY=0X90://读取Y轴坐标命令

0xD0:11010000

0x90:10010000

3.硬件连接(zdyz战舰版)

七、实例

1.硬件连接

TFTLCD 模块的触摸屏(电阻触摸屏)总共有 5 根线与 STM32F1 连接

如果是电容式触摸屏,我们的接口和电阻式触摸屏一样(上图右侧接口),只是没有用到五
根线了,而是四根线,分别是: T_PEN(CT_INT) T_CS(CT_RST) T_CLK(CT_SCL)
T_MOSI(CT_SDA) 。其中: CT_INT CT_RST CT_SCL CT_SDA 分别是 GT9147/FT5206 的:
中断输出信号、复位信号, IIC SCL SDA 信号。我们用查询的方式读取 GT9147/FT5206
数据,对于 FT5206 没有用到中断信号( CT_INT ),所以同 STM32F1 的连接,最少只需要 3
线即可,不过 GT9147 IC 还需要用到 CT_INT IIC 地址设定,所以需要 4 根线连接。

2.代码参考

①触摸管理驱动代码

因为需要支持的触摸驱动比较多,为了方便管理和添加新的驱动,我们用 touch.c 文件来统
一管理这些触摸驱动,然后针对各类触摸芯片编写独立的驱动。为了方便管理触摸,我们在
touch.h 中定义一个用于管理触摸信息的结构体类型,具体代码如下:
/* 触摸屏控制器 */
typedef struct
{
uint8_t (* init )( void ); /* 初始化触摸屏控制器 */
uint8_t (* scan )( uint8_t ); /* 扫描触摸屏 .0, 屏幕扫描 ;1, 物理坐标 ; */
void (* adjust )( void ); /* 触摸屏校准 */
uint16 _t x [ CT_MAX_TOUCH ]; /* 当前坐标 */
uint16_t y [ CT_MAX_TOUCH ]; /* 电容屏有最多 10 组坐标 , 电阻屏则用 x[0],y[0] 代表 : 此次扫
描时 , 触屏的坐标 , x[9],y[9] 存储第一次按下时的坐标 */
uint16_t sta ;
/* 笔的状态
* b15: 按下 1/ 松开 0;
* b14:0, 没有按键按下 ;1, 有按键按下 .
* b13~b10: 保留
* b9~b0: 电容触摸屏按下的点数 (0, 表示未按下 ,1 表示按下 )
*/
/* 5 点校准触摸屏校准参数 ( 电容屏不需要校准 ) */
float xfac ; /* 5 点校准法 x 方向比例因子 */
float yfac ; /* 5 点校准法 y 方向比例因子 */
short xc ;
/* 中心 X 坐标物理值 (AD ) */
short yc ;
/* 中心 Y 坐标物理值 (AD ) */
/* 新增的参数 , 当触摸屏的左右上下完全颠倒时需要用到 .
* b0: 0, 竖屏 ( 适合左右为 X 坐标 , 上下为 Y 坐标的 TP)
*
1, 横屏 ( 适合左右为 Y 坐标 , 上下为 X 坐标的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值