STM32之触摸屏
一、触摸屏控制器简介
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)
| |
| |
| |
| |
| |
| |
------------- VBMP图片显示:
GRAM扫描方向:右下角-->左上角(横屏)
y(240)
------------A
| |
| |
| |
| |
| | x
| | (320)
| |
| |
| |
| |
| |
| |
<------------触摸屏与BMP图片显示的坐标转换关系:Y-Mirror
X触 = 320 - XBMP
Y触 = XBMP
参考:《TSC2046 芯片手册》
STM32之触摸屏的更多相关文章
- LVGL库入门教程01-移植到STM32(触摸屏)
LVGL库移植STM32 LVGL库简介 LVGL(Light and Versatile Graphics Library)是一个免费.开源的嵌入式图形库,可以创建丰富.美观的界面,具有许多可以自定 ...
- stm32 触摸屏 XPT2046
引脚功能描述 控制字的控制位命令 控制字节各位描述 单端模式输入配置 差分模式输入配置 时序 前8个时钟用来通过DIN引脚输入控制字节,接着的12个时钟周期将完成真正的模数转换,剩下的3个多时钟周期将 ...
- [stm32][ucos][ucgui] 2、LED闪烁、串口、滑块、文本编辑框简单例程
上一篇:[stm32][ucos] 1.基于ucos操作系统的LED闪烁.串口通信简单例程 * 内容简述: 本例程操作系统采用ucos2.86a版本, 建立了7个任务 任务名 ...
- FreeModbus 移植于STM32 实现Modbus RTU通信
http://ntn314.blog.163.com/blog/static/161743584201233084434579/ 毕业设计自己要做个基于STM32的PLC能直接跑语句表的,现在看来好像 ...
- STM32采集电阻触摸贴膜
今天为了解决一个测量电阻屏压力的问题,自己直接用STM32做了一个测量电阻屏的程序(直接把触摸屏的四根线接到单片机引脚上),通过AD切换采集,采集X轴电压,Y轴电压,和压力..最后附上自己的程序 先说 ...
- stm32学习基本知识点
1.AHB系统总线分为APB1(36MHz)和APB2(72MHz),其中2>1,意思是APB2接高速设备 2.Stm32f10x.h相当于reg52.h(里面有基本的位操作定义),另一个为st ...
- STM32的GUI库使用
1. 实验平台使用百为的STM32F103开发板 2. 例程目录\百为stm32开发板光盘\stm32_gui_lib\Project\Embedded_GUI_Example\EWARM 3. 直接 ...
- 第29章 电容触摸屏—触摸画板—零死角玩转STM32-F429系列
第29章 电容触摸屏—触摸画板 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fir ...
- stm32与三菱PLC通信
一.三菱PLC通讯概要 三菱PLC FX系列通信结构如下图所示: 三菱PLC FX系列的通信规格如下图所示: 三菱PLC FX系列一般有以下几种通信模块,以FX2N为例: FX2N-232-BD ...
随机推荐
- 【转】C语言 字符数组与字符串
原文:http://blog.csdn.net/metasearch/article/details/2856097 在C语言编程中,当我们声明一个字符串数组的时候,常常需要把它初始化为空串.总结起来 ...
- windows下ftp上传下载和一些常用命令
先假设一个ftp地址 用户名 密码 FTP Server: home4u.at.china.com User: yepanghuang Password: abc123 打开windows的开始菜单, ...
- CSS 之 清除 float 常用的方法
大多数前端使用.clearfix:after{ .....} 和 .clearit{....}的组合来清除浮动. 前端开发经常用到浮动 float:left; float:right; 有浮动就需要 ...
- sqlite数据下载链接地址
链接: http://pan.baidu.com/s/1pJN1abT 密码: yjg5
- android开发之路05
一.获取res资源文件下values中内容的方式: 1.string.xml文件-------------------------------> 取值方式:getResource().getSt ...
- Unix网络编程(3)——C/S模型几种情况
UNP第五章描述了在客户端和服务器连接建立之后会出现的几种情况,并给出了解决方案,做一个简单的总结. 先给出这个简单的回射C/S程序的模型如下图. 1.客户端和服务器正常终止连接 客户端从标准输入 ...
- StringBuilder 用法和div获取
StringBuilder strHtml = new StringBuilder(); strHtml.Append("<tr>"); strHtml.Append( ...
- 不使用var定义变量和使用var的区别
最基本的var关键字是上下文的,而不采用var是全局的这就不讨论了 “不管是使用var关键字(在全局上下文)还是不使用var关键字(在任何地方),都可以声明一个变量”.这貌似一个错误的概念:任何时候, ...
- 关于Git里程碑
里程碑即Tag,是人为对提交进行的命名.这和Git的ID是否太长无关.使用任何数字版本号无论长短, 都没有使用一个直观的表意的字符串来的方便.例如:用里程碑名称"v2.1"对应软件 ...
- UVA - 213 Message Decoding (输入字符串并对单个字符进行操作的输入输出)
POINT: 关于表示一个编码:利用code字符数组表示一个编码字符,其中code[len][val]表示长度为len,二进制值为val的字符: 主程序如下: #include <iostrea ...