一、触摸屏控制器简介

1、TSC2046概貌

2、TSC2046引脚描述

3、TSC2046应用电路

4、常见接线方法

  • YU=Y-
  • YD=Y+
  • XL=X-
  • XR=X+

二、TSC2046编程注意事项

TSC2046的PENIRQ脚在触摸屏被按下的时候输出低电平,没有按下的时候输出高电平。需要格外注意的是在MCU给TSC2046发送命令的时候,次引脚也会产生错误的低电压脉冲,0 us<t<100 us。

It is recommended that the processor mask the interruptPENIRQ is associated with whenever the processor sendsa control byte to the TSC2046. This prevents false triggering of interrupts when the PENIRQ output is disabled in the cases discussed in this section.

                                  摘自:《TSC2046 芯片手册》

  为了消除这种错误的触发,在发送命令之前先禁止TSC2046的中断线,发送命令后再重新使能中断。

/*
****************************************************************************************************
* 函 数 名: TSC2046_ReadAdc
* 功能说明: 选择一个模拟通道,启动ADC,并返回ADC采样结果
* 形 参:_ucCh = 0x90 表示Y通道; 0xd0 表示X通道
* 返 回 值: 12位ADC值
****************************************************************************************************
*/
uint16_t XPT2046_ReadAdc(uint8_t _ucCh)
{
uint16_t dat; EXTI_IRQ_Cmd( EXTI_Line4,DISABLE); //发送命令时会产生误中断信号,屏蔽中断 XPT2046_WriteCMD(_ucCh);
dat = XPT2046_ReadCMD(); EXTI_ClearITPendingBit(EXTI_Line4); //产生的误中断信号会将中断标志位置1
EXTI_IRQ_Cmd( EXTI_Line4,ENABLE); //重新使能中断 return dat;
}

三、触摸屏操作实例

1、触摸屏x/y方向的确定

  刚买来的触摸屏,我们需要进行x/y方向的确定。确定方法:在进入TSC2046触发信号引起的中断服务程序中,通过串口打印出两个通道的电压值。依次获取触摸屏四个角的电压值,最后就可以根据这些电压值确定x/y的方向。

  以野火的3.2寸LCD触摸屏为例(注意液晶屏的正方向如下方左图所示):

2、触摸屏矫正

  触摸屏矫正的目的是为了获取触摸屏触点电压到LCD触摸屏像素坐标的转换关系。有此参数,就可以根据触摸屏的触点电压找到对应的LCD上的像素点。

  试想如何根据上方的两图提供的数据,想出一种简单的矫正算法。最简单的就是:

  • 以右上角为起点,左下角为终点,也就是说右上角为(0,0),左下角为(320,240)
  • 对x方向进行320等分,对y方向进行240等分

  事实上,为了获得较好的结果,矫正算法也是很复杂的,有现成的函数可以调用,笔者没有去研究。

  使用者需要格外注意的是:在矫正的时候,LCD的显示方向要与触摸屏的方向一致,否则矫正失败。矫正成功之后,以后就可以根据触电电压结合矫正参数算出LCD上对应的位置。

  在使用中,有可能LCD的显示方向与触摸屏的方向不一致,但是只要找到合适的对应关系,就能正确操作。举例:

触摸屏:
GRAM扫描方向:右上角-->左下角(横屏)
y(240)
<------------
|                  |
|                  |
|                  |
|                  |
|                  | x
|                  | (320)
|                  |
|                  |
|                  |
|                  |
|                  |
|                  |
------------- V

BMP图片显示:
GRAM扫描方向:右下角-->左上角(横屏)
y(240)
------------A
|                |
|                |
|                |
|                |
|                | x
|                | (320)
|                |
|                |
|                |
|                |
|                |
|                |
<------------

触摸屏与BMP图片显示的坐标转换关系:Y-Mirror
  X触 = 320 - XBMP
  Y触 = XBMP

  

参考:《TSC2046 芯片手册》

STM32之触摸屏的更多相关文章

  1. LVGL库入门教程01-移植到STM32(触摸屏)

    LVGL库移植STM32 LVGL库简介 LVGL(Light and Versatile Graphics Library)是一个免费.开源的嵌入式图形库,可以创建丰富.美观的界面,具有许多可以自定 ...

  2. stm32 触摸屏 XPT2046

    引脚功能描述 控制字的控制位命令 控制字节各位描述 单端模式输入配置 差分模式输入配置 时序 前8个时钟用来通过DIN引脚输入控制字节,接着的12个时钟周期将完成真正的模数转换,剩下的3个多时钟周期将 ...

  3. [stm32][ucos][ucgui] 2、LED闪烁、串口、滑块、文本编辑框简单例程

    上一篇:[stm32][ucos] 1.基于ucos操作系统的LED闪烁.串口通信简单例程 * 内容简述: 本例程操作系统采用ucos2.86a版本, 建立了7个任务            任务名   ...

  4. FreeModbus 移植于STM32 实现Modbus RTU通信

    http://ntn314.blog.163.com/blog/static/161743584201233084434579/ 毕业设计自己要做个基于STM32的PLC能直接跑语句表的,现在看来好像 ...

  5. STM32采集电阻触摸贴膜

    今天为了解决一个测量电阻屏压力的问题,自己直接用STM32做了一个测量电阻屏的程序(直接把触摸屏的四根线接到单片机引脚上),通过AD切换采集,采集X轴电压,Y轴电压,和压力..最后附上自己的程序 先说 ...

  6. stm32学习基本知识点

    1.AHB系统总线分为APB1(36MHz)和APB2(72MHz),其中2>1,意思是APB2接高速设备 2.Stm32f10x.h相当于reg52.h(里面有基本的位操作定义),另一个为st ...

  7. STM32的GUI库使用

    1. 实验平台使用百为的STM32F103开发板 2. 例程目录\百为stm32开发板光盘\stm32_gui_lib\Project\Embedded_GUI_Example\EWARM 3. 直接 ...

  8. 第29章 电容触摸屏—触摸画板—零死角玩转STM32-F429系列

    第29章     电容触摸屏—触摸画板 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fir ...

  9. stm32与三菱PLC通信

    一.三菱PLC通讯概要   三菱PLC FX系列通信结构如下图所示: 三菱PLC FX系列的通信规格如下图所示: 三菱PLC FX系列一般有以下几种通信模块,以FX2N为例: FX2N-232-BD ...

随机推荐

  1. Routes

    Routes Routing lets you create your own URL paths, based on the path you can load a closure or a con ...

  2. window.external.notify() 与 UglifyJS 压缩优化冲突

    近期研究了一下 UglifyJs 对 JS 代码的压缩,发现 UglifyJS 压缩后,无法调用 window.external.notify() 方法,JS 代码如下: function MyNot ...

  3. docker no permmition problem

    resolved by: sudo docker run --privileged ....

  4. 【转】Git代码提交最佳实践

      GIT Commit Good Practice The following document is based on experience doing code development, bug ...

  5. Flume简介与使用(二)——Thrift Source采集数据

    Flume简介与使用(二)——Thrift Source采集数据 继上一篇安装Flume后,本篇将介绍如何使用Thrift Source采集数据. Thrift是Google开发的用于跨语言RPC通信 ...

  6. Python基础【第十一篇】文件操作(file()、open()方法和fileinput模块)

    一.file/open 内置函数 file函数的方法: 注:file 和 open的用法和功能相同这里只对file进行分析 file(‘filename’,’mode’) file(‘filename ...

  7. C#总结2

    第三章 对于继承:继承是根据父类创建新子类的过程: 对于继承:例: Public class Father {     public void say() { //dosomething } } Pu ...

  8. 默认安装wamp修改MySQL密码

    首先,通过WAMP打开mysql控制台. 提示输入密码,因为现在是空,所以直接按回车. 然后输入“use mysql”,意思是使用mysql这个数据库,提示“Database changed”就行. ...

  9. 第二十四篇、iOS 10版本适配

    随着iOS10发布的临近,大家的App都需要适配iOS10,下面是我总结的一些关于iOS10适配方面的问题,如果有错误,欢迎指出. 1.系统判断方法失效: 在你的项目中,当需要判断系统版本的话,不要使 ...

  10. iOS开发——百度云推送

    由于公司项目是集成的极光推送,详见下一篇博客. 集成百度推送大体相当,最好都参考官方文档集成,官方文档或官方网站教程是最好的博客. 百度Push服务SDK用户手册(iOS版) http://push. ...