zoukankan      html  css  js  c++  java
  • 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)
    |                  |
    |                  |
    |                  |
    |                  |
    |                  |
    |                  |
    ------------- V

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

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

      

    参考:《TSC2046 芯片手册》

  • 相关阅读:
    C#中属性和字段的区别
    利用原生态的(System.Web.Extensions)JavaScriptSerializer将mvc 前台提交到controller序列化复杂对象
    点击图片后放大居中显示
    Python logging模块
    MySQL免安装版 配置
    python 字符串 常用方法
    python 格式化输出
    欢迎使用CSDN-markdown编辑器
    Program received signal SIGSEGV, Segmentation fault.
    error MSB6006: “CL.exe”已退出,代码为 -1073741502。
  • 原文地址:https://www.cnblogs.com/amanlikethis/p/3829980.html
Copyright © 2011-2022 走看看