多点电容触摸屏实验

目录

  • 多点电容触摸简介
  • 硬件原理分析
  • 实验程序编写
  • 编译下载验证
    • 编写Makefile 和链接脚本
    • 编译下载

随着智能手机的发展,电容触摸屏也得到了飞速的发展。相比电阻触摸屏,电容触摸屏有很多的优势,比如支持多点触控、不需要按压,只需要轻轻触摸就有反应。ALIENTEK 的三款RGB LCD 屏幕都支持多点电容触摸,本章就以ATK7016 这款RGB LCD 屏幕为例讲解一下如何驱动电容触摸屏,并获取对应的触摸坐标值。

多点电容触摸简介

触摸屏很早就有了,一开始是电阻触摸屏,电阻触摸屏只能单点触摸,在以前的学习机、功能机时代被广泛使用。2007 年1 月9 日苹果发布了划时代的第一代Iphone,也就是Iphone2G,Iphone 2G 上使用了多点电容触摸屏,而当时的手机基本都是使用的电阻触摸屏。电容触摸屏优秀的触摸品质和手感瞬间征服了消费者,带来了手机触摸屏的大变革,后面新出的手机也都采用了多点电容触摸屏。和电阻触摸屏相比,电容触摸屏最大的优点是支持多点触摸(后面的电阻屏也支持多点触摸,但是为时已晚),电容屏只需要手指轻触即可,而电阻屏是需要手指给予一定的压力才有反应,而且电容屏不需要校准。如今多点电容触摸屏已经得到了广泛的应用,手机、平板、电脑、广告机等等,如果要做人机交互设备的开发,多点电容触摸屏基本是不可能绕过去的。所以本章我们就来学习一下如何使用多点触摸屏,如何获取到多点触摸值。关于电容屏的物理原理我们就不去研究了,毕竟我们不是开发电容屏的,而是电容屏的使用者,我们只需要关注如何使用电容屏,如何得到其多点触摸坐标值即可。ALIENTEK 的三款RGB LCD 屏幕都是支持5 点电容触摸屏的,本章我们同样以ATK-7016 这款屏幕为例来讲解如何使用多点电容触摸屏。

ATK-7016 这款屏幕其实是由TFT LCD+触摸屏组合起来的。底下是LCD 面板,上面是触摸面板,将两个封装到一起就成了带有触摸屏的LCD 屏幕。电容触摸屏也是需要一个驱动IC的,驱动IC 一般会提供一个I2C 接口给主控制器,主控制器可以通过I2C 接口来读取驱动IC里面的触摸坐标数据。ATK-7016、ATK-7084 这两款屏幕使用的触摸控制IC 是FT5426,ATK-4342 使用的驱动IC 是GT9147。这三个电容屏触摸IC 都是I2C 接口的,使用方法基本一样。

FT5426 这款驱动IC 采用15*28 的驱动结构,也就是15 个感应通道,28 个驱动通道,最多支持5 点电容触摸。ATK-7016 的电容触摸屏部分有4 个IO 用于连接主控制器:SCL、SDA、RST 和INT,SCL 和SDA 是I2C 引脚,RST 是复位引脚,INT 是中断引脚。一般通过INT 引脚来通知主控制器有触摸点按下,然后在INT 中断服务函数中读取触摸数据。也可以不使用中断功能,采用轮询的方式不断查询是否有触摸点按下,本章实验我们使用中断方式来获取触摸数据。

和所有的I2C 器件一样,FT5426 也是通过读写寄存器来完成初始化和触摸坐标数据读取的,I.MX6U 的I2C 我们已经在第二十六章做了详细的讲解,所以本章的主要工作就是读写FT5426 的寄存器。FT5426 的I2C 设备地址为0X38,FT5426 的寄存器有很多,本章我们只用到了其中的一部分,如表28.1.1.1 所示:
在这里插入图片描述
在这里插入图片描述
表28.1.1.1 中就是本章实验我们会使用到的寄存器。关于触摸屏和FT5426 的知识就讲解到这里。

硬件原理分析

本试验用到的资源如下:
①、指示灯LED0。
②、RGB LCD 屏幕。
③、触摸屏
④、串口
触摸屏是和RGB LCD 屏幕做在一起的,所以触摸屏也在RGB LCD 接口上,都是连接在I.MX6U-ALPHA 开发板底板上,原理图如图28.2.1 所示:
在这里插入图片描述
从图28.2.1可以看出,触摸屏连接着I.MX6U 的I2C2,INT引脚连接着I.MX6U的GPIO1_IO9,RST 引脚连接着I.MX6U 的SNVS_TAMPER9。在本章实验中使用中断方式读取触摸点个数和触摸点坐标数据,并且将其显示在LCD 上。

实验程序编写

本实验对应的例程路径为:开发板光盘-> 1、裸机例程-> 19_touchscreen。

本章实验在上一章例程的基础上完成,更改工程名字为“touchscreen”,然后在bsp 文件夹下创建名为“touchscreen”的文件。在bsp/ touchscreen 中新建bsp_ft5xx6.c 和bsp_ft5xx6.h 这两个文件,在bsp_ft5xx6.h 中输入如下内容:

1 #ifndef _FT5XX6_H
2 #define _FT5XX6_H
3 /***************************************************************
4 Copyright © zuozhongkai Co., Ltd. 1998-2019. All rights reserved.
5 文件名: bsp_ft5xx6.h
6 作者: 左忠凯

文件bsp_ft5xx6.h 文件中先是定义了FT5426 的设备地址、寄存器地址和一些触摸点状态宏,然后在第37 行定义了一个结构体ft5426_dev_struc,此结构体用来保存触摸信息,最后就是一些函数声明。接下来在bsp_ft5xx6.c 中输入如下所示内容:

/***************************************************************
Copyright © zuozhongkai Co., Ltd. 1998-2019. All rights reserved.
文件名: bsp_ft5xx6.c
作者: 左忠凯
版本: V1.0
描述: 触摸屏驱动文件,触摸芯片为FT5xx6,
包括FT5426和FT5406。
其他: 无
论坛: www.openedv.com
日志: 初版V1.0 2019/1/21 左忠凯创建
***************************************************************/
1 #include "bsp_ft5xx6.h"
2 #include "bsp_i2c.h"
3 #include "bsp_int.h"
4 #include "bsp_delay.h"
5 #include "stdio.h"
6
7 struct ft5426_dev_struc ft5426_dev;
8
9 /*
10 * @description : 初始化触摸屏,其实就是初始化FT5426
11 * @param : 无
12 * @return : 无
13 */
14 void ft5426_init(void)
15 {
16 unsigned char reg_value[2];

文件bsp_ft5xx6.c 中有7 个函数,我们依次来看一下这7 个函数。第1 个是函数ft5426_init,此函数是ft5426 的初始化函数,此函数先初始化FT5426 所使用的I2C2 接口引脚、复位引脚和中断引脚。接下来使能了FT5426 所使用的中断,并且注册了中断处理函数,最后初始化了I2C2和FT5426。第2 个函数是gpio1_io9_irqhandler,这个是FT5426 的中断引脚中断处理函数,在
此函数中会读取FT5426 内部的触摸数据。第3 和第4 个函数分别为ft5426_write_byte 和ft5426_read_byte,函数ft5426_write_byte 用于向FT5426 的寄存器写入指定的值,函数ft5426_read_byte 用于读取FT5426 指定寄存器的值。第5 个函数是ft5426_read_len,此函数也是从FT5426 的指定寄存器读取数据,但是此函数是读取数个连续的寄存器。第6 个函数是
ft5426_read_tpnum,此函数用于获取FT5426 当前有几个触摸点有效,也就是触摸点个数。最后一个函数是ft5426_read_tpcoord,此函数就是读取FT5426 各个触摸点坐标值的。

最后在main.c 中输入如下内容:

/**************************************************************
Copyright © zuozhongkai Co., Ltd. 1998-2019. All rights reserved.
文件名: main.c
作者: 左忠凯
版本: V1.0
描述: I.MX6U开发板裸机实验20 触摸屏实验
其他: I.MX6U-ALPHAL推荐使用正点原子-7寸LCD,此款LCD支持5点电容触摸,
本节我们就来学习如何驱动LCD上的5点电容触摸屏。
论坛: www.openedv.com
日志: 初版V1.0 2019/1/21 左忠凯创建
**************************************************************/
1 #include "bsp_clk.h"

文件main.c 第53 行调用函数ft5426_init 初始化触摸屏,也就是FT5426 这个触摸驱动IC。最后在main 函数的while 循环中不断的显示获取到的触摸点数以及对应的触摸坐标值。因为本章实验我们采用中断方式读取FT5426 的触摸数据,因此main 函数中并没有读取FT5426 的操作,只是显示触摸值。本章实验程序编写就到这里,接下来就是编译、下载和验证。

编译下载验证

编写Makefile 和链接脚本

修改Makefile 中的TARGET 为touchscreen,然后在INCDIRS 和SRCDIRS 中加入“bsp/touchscreen”,修改后的Makefile 如下:

1 CROSS_COMPILE ?= arm-linux-gnueabihf-
2 TARGET ?= touchscreen
3
4 /* 省略掉其它代码...... */
5
6 INCDIRS := imx6ul \
7 stdio/include \
8 bsp/clk \
9 bsp/led \
10 bsp/delay \
11 bsp/beep \
12 bsp/gpio \
13 bsp/key \
14 bsp/exit \
15 bsp/int \
16 bsp/epittimer \
17 bsp/keyfilter \
18 bsp/uart \
19 bsp/lcd \
20 bsp/rtc \

第2 行修改变量TARGET 为“touchscreen”,也就是目标名称为“touchscreen”。
第25 行在变量INCDIRS 中添加触摸屏的驱动头文件(.h)路径。
第46 行在变量SRCDIRS 中添加触摸屏的驱动文件(.c)路径。
链接脚本保持不变。

编译下载

使用Make 命令编译代码,编译成功以后使用软件imxdownload 将编译完成的touchscreen.bin 文件下载到SD 卡中,命令如下:

chmod 777 imxdownload //给予imxdownload 可执行权限,一次即可
./imxdownload touchscreen.bin /dev/sdd //烧写到SD 卡中,不能烧写到/dev/sda 或sda1 设//备里面!

烧写成功以后将SD 卡插到开发板的SD 卡槽中,然后复位开发板。默认情况下LCD 界面如图28.4.2.1 所示:
在这里插入图片描述
当我们用手指触摸屏幕的时候就会在LCD 上显示出当前的触摸点和对应的触摸值,如图28.4.2.2 所示:
在这里插入图片描述
图28.4.2.2 中有5 个触摸点,每个触摸点的坐标全部显示到了LCD 屏幕上。如果移动手指的话LCD 上的触摸点坐标数据就会相应的变化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/265091.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

博客园自动添加版权说明,自动添加文章链接

功能&#xff1a; 1.给每一篇文章开头加上版权说明&#xff1b; 2.自动获取当前文章地址&#xff1b; 3.做了装饰。 将以下代码放在页首Html代码内即可&#xff1a; <script type"text/javascript"> var setMyBlog {setCopyright: function() {//设置版权信息…

如何添加地图控件到Windows Phone 8的页面中

原文 如何添加地图控件到Windows Phone 8的页面中 本主题介绍了各种方法来添加一个地图控件到Windows Phone 8的项目。该地图控件在Windows Phone的SDK 8.0的库的一部分。因为地图的控制是不是在内存中的核心控制&#xff0c;它必须被正确引用&#xff0c;然后才能使用它。您还…

LCD背光调节实验

目录LCD 背光调节简介硬件原理分析实验程序编写编译下载验证编写Makefile 和链接脚本编译下载不管是使用显示器还是手机&#xff0c;其屏幕背光都是可以调节的&#xff0c;通过调节背光就可以控制屏幕的亮度。在户外阳光强烈的时候可以通过调高背光来看清屏幕&#xff0c;在光线…

Mercurial(Hg)基本操作

Mercurial(Hg)基本操作 来源 https://www.cnblogs.com/gb2013/archive/2012/05/18/Mercurial_Basic.html Mercurial简介 Mercurial是一款非常优秀的分布式版本控制系统(DCVS)&#xff0c;具有高效率、跨平台、可扩展、使用简便且开源等优点&#xff0c;是目前最为流行的版本控制…

SPI实验

目录SPI & ICM-20608 简介SPI 简介SPI四线SPI四种工作模式SPI时序图I.MX6U ECSPI 简介ICM-20608 简介硬件原理分析实验程序编写编译下载验证编写Makefile 和链接脚本编译下载同I2C 一样&#xff0c;SPI 是很常用的通信接口&#xff0c;也可以通过SPI 来连接众多的传感器。相…

ADC实验(读取引脚电压值)

目录ADC 简介什么是ADCI.MX6ULL ADC 简介ADC寄存器介绍配置步骤硬件原理分析实验程序编写编译下载验证编写Makefile 和链接脚本编译下载ADC 是一种常见的外设&#xff0c;你可以在STM32 上见到它&#xff0c;在I.MX 6ULL 上依然能看到它的存在。通过读取GPIO 引脚的高低电平我们…

Linux CAN 驱动实验

目录CAN 协议简析何为CANCAN 电气属性显隐性电平接线端接电阻速度距离CAN 协议1、数据帧2、遥控帧3、错误帧4、过载帧5、帧间隔CAN 速率I.MX6ULL FlexCAN 简介硬件原理图分析实验程序编写修改设备树使能Linux 内核自带的FlexCAN 驱动FlexCAN 测试检查CAN 网卡设备是否存在移植i…

MySQL存储引擎MyISAM和 InnoDB

2019独角兽企业重金招聘Python工程师标准>>> 区别 事务处理MyISAM强调性能,但是不提供事务支持InnoDB提供事务支持,外部键等CURD操作如果执行大量SELECT,MyISAM更合适(读)如果执行大量INSERT/UPDATE,InnoDB更合适(写)DELETE FROM table时&#xff0c;InnoDB不会重新…

Luogu 4721 【模板】分治 FFT

还不会这题的多项式求逆的算法。 发现每一项都是一个卷积的形式&#xff0c;那么我们可以使用$NTT$来加速&#xff0c;直接做是$O(n^2logn)$的&#xff0c;我们考虑如何加速转移。 可以采用$cdq$分治的思想&#xff0c;对于区间$[l, r]$中的数&#xff0c;先计算出$[l, mid]$中…

根文件系统构建(Buildroot 方式)

目录何为buildroot&#xff1f;buildroot 简介buildroot 下载buildroot 构建根文件系统配置buildroot编译buildrootbuildroot 根文件系统测试buildroot 第三方软件和库的配置buildroot 下的busybox 配置busybox 配置busybox 中文字符的支持编译busybox根文件系统测试前面我们学…

Jquery weui picker 支持label和value

万年没更新了. 最近用jquery weui. 在使用picker时需要一些问题. 就是让picker 显示label, 但是取值的时候取value用于存储. 官网例子如下 Jquery-weui 官网 : 点这里 写这篇文章时&#xff0c;用的版本是1.2.1版本 $("#picker-name").picker({title: "请选择您…

Linux—任务计划

1、周期性任务计划&#xff1a;管理系统的过程中&#xff0c;我们并不是每次都直接执行脚本或者命令&#xff0c;有时候需要让脚本、命令以及系统等在指定的时间按照我们的意愿执行我们设定好的脚本或者命令&#xff0c;这时候就需要使用到Linux任务计划的功能了&#xff0c;但…

计算机网络第1章(概述)

B站视频&#xff1a;计算机网络微课堂&#xff08;有字幕无背景音乐版&#xff09; 网址&#xff1a;https://www.bilibili.com/video/BV1c4411d7jb?p61 目录图示说明1.1、计算机网络在信息时代的作用我国互联网发展状况1.2、因特网概述1、网络、互连网&#xff08;互联网&…

Linux命令(七)Linux用户管理和修改文件权限

1. 用户管理 1.1 创建用户/设置密码/删除用户 &#xff08;-m很重要&#xff0c;自动添加用户家目录&#xff09; 创建用户组dev, 给用户组dev新建xiaoqin用户&#xff0c;给新用户设置密码&#xff01; 1.2 查看用户信息 1.3 设置用户主组/附加组 &#xff08;常使用修改用户附…

元模型驱动

感谢徐昊给我们传授这么好的思想。虽然我现在还没有全部弄明白——————————在网上查到了元数据的解释是关于数据的数据。那么元模型就是关于模型的模型。抽象的过程就是形成元模型的过程。建模的过程就是抽象的过程。我们要形成object的模型&#xff0c;所以建立了的是…

2月末周全球域名解析商Top15:万网DNSPod份额均上涨

IDC评述网&#xff08;idcps.com&#xff09;03月11日报道&#xff1a;据域名统计机构WebHosting.info最新数据&#xff0c;在2月末周&#xff08;截至3月3日&#xff09;期间&#xff0c;我国仍是两名域名解析服务商跻身进全球前十五强。其中&#xff0c;中国万网排名第9&…

计算机网络第4章(网络层)

B站视频&#xff1a;计算机网络微课堂&#xff08;有字幕无背景音乐版&#xff09; 网址&#xff1a;https://www.bilibili.com/video/BV1c4411d7jb?p61 目录4.1、网络层概述简介总结4.2、网络层提供的两种服务面向连接的虚电路服务无连接的数据报服务虚电路服务与数据报服务的…

Struts2中action接受参数方法

Struts2中Action接收参数的方法主要有以下三种&#xff1a;1.使用Action的属性接收参数&#xff1a; a.定义&#xff1a;在Action类中定义属性&#xff0c;创建get和set方法&#xff1b; b.接收&#xff1a;通过属性接收参数&#xff0c;如&#xff1a;userName&#xff…

计算机网络第5章(传输层)

B站视频&#xff1a;计算机网络微课堂&#xff08;有字幕无背景音乐版&#xff09; 网址&#xff1a;https://www.bilibili.com/video/BV1c4411d7jb?p61 目录5.1、运输层概述概念总结5.2、运输层端口号、复用与分用的概念为什么用端口号发送方的复用和接收方的分用TCP/IP体系的…

计算机网络第6章(应用层)

B站视频&#xff1a;计算机网络微课堂&#xff08;有字幕无背景音乐版&#xff09; 网址&#xff1a;https://www.bilibili.com/video/BV1c4411d7jb?p61 目录6.1、应用层概述6.2、客户/服务器方式&#xff08;C/S方式&#xff09;和对等方式&#xff08;P2P方式&#xff09;概…