⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 touchpad.lst

📁 hx8347 初始化,刷屏,图片显示
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.10   TOUCHPAD                                                              04/14/2009 23:28:41 PAGE 1   


C51 COMPILER V7.10, COMPILATION OF MODULE TOUCHPAD
OBJECT MODULE PLACED IN .\TouchPad.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\SourceFile\TouchPad.c BROWSE DEBUG OBJECTEXTEND PRINT(.\TouchPad.lst) OB
                    -JECT(.\TouchPad.obj)

line level    source

   1          
   2          
   3          /***************************************************************************************
   4          ****************************************************************************************
   5          * FILE          : TouchPad.c
   6          * Description   : 
   7          *                         
   8          * Copyright (c) 2003~2008 by 创易电子(Design Easy). All Rights Reserved.
   9          * 
  10          * History:
  11          * Version               Name                    Date                    Description
  12             1.0          Wang Shaowei    2008/12/17      Initial Version (For DesignEasy LCM MCU board)
  13             1.1          Liu Ying                        2008/12/22      Comments
  14             1.2          Wang Shaowei    2009/03/06      240x320 LCM
  15            
  16          ****************************************************************************************
  17          ****************************************************************************************/
  18          
  19          
  20          #include "touchpad.h"
  21          
  22          
  23          /*************************************************************************/
  24          //以下部分非常重要,需要根据各自系统硬件连接配置
  25          //请相应调整
  26          
  27          sbit TP_nCS = P1^2;
  28          sbit TP_DCLK = P1^3;
  29          sbit TP_DIN = P1^4;
  30          sbit TP_nBUSY = P1^5;
  31          sbit TP_DOUT = P1^6;
  32          
  33          
  34          
  35          /*************************************************************************/
  36          //该部分宏,参看触摸屏控制电路芯片文档中命令时序格式的介绍
  37          
  38          #define TOUCH_PANEL_START_BIT    0x80
  39          
  40          #define TOUCH_PANEL_TEMP0        0x00
  41          #define TOUCH_PANEL_X_PLUS       0x10
  42          #define TOUCH_PANEL_VBAT         0x20
  43          #define TOUCH_PANEL_Z1_POS       0x30
  44          #define TOUCH_PANEL_Z2_POS       0x40
  45          #define TOUCH_PANEL_Y_PLUS       0x50
  46          #define TOUCH_PANEL_TEMP1        0x70
  47          
  48          #define TOUCH_PANEL_ADC3         0x20
  49          #define TOUCH_PANEL_ADC4         0x60
  50          
  51          #define TOUCH_PANEL_12BIT_SAMPLE 0x0
  52          #define TOUCH_PANEL_8BIT_SAMPLE  0x8
  53          
  54          #define TOUCH_PANEL_DIFF_MODE    0x0
C51 COMPILER V7.10   TOUCHPAD                                                              04/14/2009 23:28:41 PAGE 2   

  55          #define TOUCH_PANEL_SINGLE_MODE  0x4
  56          
  57          #define TOUCH_PANEL_PWD_ENBLE    0x0
  58          #define TOUCH_PANEL_IRQ_DISABLE  0x1
  59          #define TOUCH_PANEL_PWD_DISABLE  0x3
  60          #define TOUCH_PANEL_PWD_RESET    0x2
  61          
  62          
  63          
  64          /*
  65          考虑到非校准情况下的触摸屏,通常都是写字、画画等连续的,
  66          在我们的系统中,对于触摸功能是这样处理的:
  67          首次触摸是由中断检测得到,之后响应中断进行处理;
  68          处理完后开启一个5ms定时器,
  69          定时器到时处理时主动读取触摸坐标,
  70               若是有效坐标则处理,处理完后同样开启一个5ms定时器
  71               若是无效坐标则表示没有触摸,此时再清除中断标记、
  72               重新打开中断响应,等待下一次触摸中断
  73          注意不要太早打开中断,一则因为系统中断不宜太频繁,二者避免误触发
  74          
  75          bTP_INT用于标记该次处理是否由中断触发,
  76          true: 是中断触发,
  77          false: 是定时器主动读取
  78          */
  79          bool bTP_INT = FALSE;
  80          
  81          /*
  82          bTP_Cali用于标记是否处于校准界面,
  83          true: 处于校准界面
  84          false: 非校准界面
  85          */
  86          bool bTP_Cali = FALSE;
  87          
  88          /*
  89          最近一次得到的触摸坐标,
  90          包括中断响应中或者定时器中得到的两种情况,
  91          都记录在这里
  92          */
  93          U16 TP_X = 0, TP_Y = 0;
  94          
  95          typedef struct 
  96          {
  97                  U16 X;
  98                  U16 Y;
  99          }TP_POS;
 100          
 101          /*记录在两次校准中得到的触摸坐标*/
 102          TP_POS TPposA, TPposB;
 103          
 104          
 105          typedef struct 
 106          {
 107                  S16 K;
 108                  S16 A;
 109          }TP_ARG;
 110          
 111          /*坐标转化参数,从触摸获得的数值到LCD的坐标之间需要进行映射转换*/
 112          TP_ARG TPargX, TPargY;
 113          
 114          
 115          /*
 116          校准算法说明: 
C51 COMPILER V7.10   TOUCHPAD                                                              04/14/2009 23:28:41 PAGE 3   

 117          Xt = Kx * Xl + Ax
 118          Yt = Ky * Yl + Ay
 119          
 120          Xt: TP ADC 触摸获得的坐标
 121          Kx: X arg
 122          Xl: LCD pos lcd的坐标
 123          Ax: X offset
 124          
 125          Yt: TP ADC 触摸获得的坐标
 126          Ky: Y arg
 127          Yl: LCD pos lcd的坐标
 128          Ay: Y offset
 129          
 130          lcd和触摸屏的坐标之间的转换就是上面这两个公式,
 131          用于校准,(从两组Xl Yl Xt Yt求出Kx Ky Ax Ay)
 132          也用于转化得到lcd的坐标(从Xt Yt Kx Ky Ax Ay求出Xl Yl )
 133          */
 134          
 135          
 136          
 137          /* 
 138          关于TP_nCS何时置1何时置0的说明:
 139          因为对触摸屏控制电路的控制,都是先写命令、然后读数据的,
 140          所以下面的serial_write_data、serial_read_data总是成对出现,
 141          我们总是在serial_write_data开始时将TP_nCS置0,
 142          在serial_read_data结束时将TP_nCS置1,
 143          这部分请看触摸控制电路芯片时序图
 144          */
 145          
 146          /*==================================================================
 147          * Function      : serial_write_bit_high
 148          * Description   : 写bit1,TP_nCS 之前已经拉低
 149          * Input Para    : void
 150          * Output Para   : void
 151          * Return Value: void
 152          ==================================================================*/
 153          void serial_write_bit_high(void)
 154          {
 155   1      
 156   1              TP_DIN = 1;   
 157   1         
 158   1              TP_DCLK = 0;          
 159   1              TP_DCLK = 1;
 160   1              TP_DCLK = 0;    
 161   1      }
 162          
 163          /*==================================================================
 164          * Function      : serial_write_bit_low
 165          * Description   : 写bit0,TP_nCS 之前已经拉低
 166          * Input Para    : void
 167          * Output Para   : void
 168          * Return Value: void
 169          ==================================================================*/
 170          void serial_write_bit_low(void)
 171          {
 172   1              TP_DIN = 0;  
 173   1         
 174   1              TP_DCLK = 0;          
 175   1              TP_DCLK = 1;
 176   1              TP_DCLK = 0;   
 177   1      }
 178          
C51 COMPILER V7.10   TOUCHPAD                                                              04/14/2009 23:28:41 PAGE 4   

 179          /*==================================================================
 180          * Function      : serial_write_bit_low
 181          * Description   : 写8bit字节,开始将TP_nCS置0
 182          * Input Para    : U8 SendData
 183          * Output Para   : void
 184          * Return Value: void
 185          ==================================================================*/
 186          void serial_write_data(U8 SendData)
 187          {
 188   1              S8 i;
 189   1              
 190   1              TP_DCLK = 0;
 191   1              TP_nCS = 0;
 192   1              
 193   1              for (i=7; i>=0; i--)
 194   1              {       /* data bit 7~0 */
 195   2                      if (SendData & (1<<i))
 196   2                      {
 197   3                         serial_write_bit_high();
 198   3                      }
 199   2                      else
 200   2                      {
 201   3                              serial_write_bit_low();
 202   3                      }
 203   2              }
 204   1              
 205   1              TP_DIN = 0;
 206   1              
 207   1      }
 208          
 209          /*==================================================================
 210          * Function      : serial_read_data
 211          * Description   : 读12bit数据,TP_nCS 之前已经置零,结束时需将TP_nCS置1
 212          * Input Para    : void
 213          * Output Para   : void
 214          * Return Value: U16 读到的数据,只有12bit有效
 215          ==================================================================*/
 216          U16 serial_read_data(void)
 217          { 
 218   1              S8    i;  
 219   1              U16 RcvData=0; 
 220   1          U32 retry=0;        
 221   1      
 222   1              TP_DCLK = 0; 
 223   1              TP_DCLK = 1; 
 224   1              
 225   1              /*等待一段时间*/
 226   1              while(TP_nBUSY)
 227   1              {
 228   2      
 229   2                      TP_DCLK = 0; 
 230   2                      TP_DCLK = 1; 
 231   2                      retry++;
 232   2                      if(retry>100000)
 233   2                      {
 234   3                              return 0;
 235   3                      }
 236   2              };
 237   1              
 238   1              for(i=11; i>=0; i--)
 239   1              {
 240   2                      TP_DCLK = 1;
C51 COMPILER V7.10   TOUCHPAD                                                              04/14/2009 23:28:41 PAGE 5   

 241   2                      if(TP_DOUT)
 242   2                      {
 243   3                              RcvData |= (1<<i); 
 244   3                      }
 245   2                      TP_DCLK = 0; 
 246   2              }
 247   1              TP_nCS = 1;
 248   1              return(RcvData);
 249   1      }
 250          
 251          
 252          /*==================================================================
 253          * Function      : tp_init
 254          * Description   : 初始化tp
 255          * Input Para    : void
 256          * Output Para   : void
 257          * Return Value: void
 258          ==================================================================*/
 259          /*
 260          AX=0B 86 AY=0A FE BX=04 9E BY=04 44 
 261          XK=00 14 XA=01 2E YK=00 0F YA=01 0B
 262          */
 263          void tp_init(void)
 264          {
 265   1              U8 cmd = 0;
 266   1      
 267   1              /*在校准之前也可以使用触摸屏,用这一组默认参数。
 268   1              校准之后用校准得到的参数*/
 269   1              TPargX.K = 0xF;
 270   1              TPargX.A = 0x9A;
 271   1              
 272   1              TPargY.K = 0x0B;
 273   1              TPargY.A = 0x90;
 274   1      
 275   1              /*送初始化命令*/
 276   1              cmd=TOUCH_PANEL_START_BIT|TOUCH_PANEL_Y_PLUS|TOUCH_PANEL_12BIT_SAMPLE| TOUCH_PANEL_DIFF_MODE;
 277   1              serial_write_data(cmd);
 278   1              serial_read_data();
 279   1      
 280   1      }
 281          

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -