查看: 3387|回复: 10

嵌入式开发之ARM9--TQ2440触摸屏学习笔记(转)

[复制链接]
  • TA的每日心情
    奋斗
    2018-3-5 10:57
  • 签到天数: 112 天

    连续签到: 1 天

    [LV.6]常住居民II

    发表于 2016-3-1 15:30:41 | 显示全部楼层 |阅读模式
    分享到:
      硬件平台:TQ2440
      触摸屏检测方法可以分两种:
      1.检测按下、弹起两个状态时的x y坐标值;
      以检测按下状态是读取x y坐标值为例 实现代码如下
      void Init_Touchpanel(void)
      {
      ClearPending(BIT_ADC);
      rSUBSRCPND|=BIT_SUB_TC ;
      //清adc中断 触摸屏中断
      rADCDLY=40000; //ADC转换间隔 (1/3.6864M)*50000=13.56ms
      //Normal conversion mode:ADC Start or interval delay 0~65535
      rADCCON=(1<<14)+(ADCPRS<<6); //ADCPRS En, ADCPRS Value
      //使能预分频器 预分频值 ADCPRS(9) AD转换器频率=gclk / (9+1)
      rADCTSC=0xd3; //Wfait,XP_PU,XP_Dis,XM_Dis,YP_Dis,YM_En
      //ADC触摸屏控制寄存器 检测手写笔按下的中断信号 YM输出驱动有效 YP输出无效 XM输出禁止 XP输出驱动禁止
      // XP上啦使能 adc正常转换模式 等待中断模式
      pISR_ADC = (int)AdcTsAuto;
      //指定adc中断服务程序
      rINTMSK=~BIT_ADC; //ADC Touch Screen Mask bit clear
      rINTSUBMSK=~(BIT_SUB_TC);
      //使能中断 当触摸笔按下时 触发INT_TC中断
      }
      //触摸屏中断函数
      void __irq AdcTsAuto(void)
      {
      //ADCDAT0[15]==1 触摸笔未按下
      //ADCDAT0[15]==0 触摸笔按下
      if(rADCDAT0&0X8000)
      return ;
      rINTMSK |= (BIT_ADC);
      //禁止adc中断
      rSUBSRCPND|=BIT_SUB_TC ;
      //禁止adc的子中断
      rADCTSC=(1<<3)|(1<<2); //Pull-up disable, Seq. X,Y postion measure.
      //xp上拉禁止 自动顺序测量x y位置
      rADCCON|=0x1; //start ADC
      while(rADCCON & 0x1); //check if Enable_start is low
      //adc一旦开始 将自动使ADCCON[0]=0
      while(!(rADCCON & 0x8000)); //check if EC(End of Conversion) flag is high, This line is necessary~!!
      //adc结束时,ADCCON[15]==1
      while(!(rSRCPND & (BIT_ADC))); //check if ADC is finished with interrupt bit
      //等待ADC结束(不管后级中断是否传递 adc完成后 此处应该被置位)
      point.x = (rADCDAT0&0x3ff);
      point.y = (rADCDAT1&0x3ff);
      //获取x y方向的adc值 更新坐标点
      Uart_Printf("XP=%04d, YP=%04dn",point.x, point.y); //X-position Conversion data
      ClearPending(BIT_ADC);
      rSUBSRCPND|=BIT_SUB_TC ;
      //清adc中断
      Init_Touchpanel();
      //重新初始化触摸屏
      }
      2.检测在按下~弹起两个状态中间的x y坐标值 定时检测并更新坐标;
      实现:
      a 将adc 触摸屏接口设置为检测按下触摸笔中断;
      b 在adc按下触摸笔中断函数中 将adc的中断服务程序重新指定为弹起触摸笔中断函数;
      c 在adc按下触摸笔中断函数中 启动定时器定时进行ADC 采集XY坐标值 或在每次读取坐标值的时候进行ad转换 获取坐标值;
      d 在adc弹起触摸笔中断函数中 关闭定时器 停止采集x y坐标;
      感谢博主s_a_n_的分享!

    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2021-3-13 10:11
  • 签到天数: 1088 天

    连续签到: 2 天

    [LV.10]以坛为家III

    发表于 2016-3-1 16:06:49 | 显示全部楼层
    我感觉之所以Linux发展缓慢,主要是大公司没有加入其中,底下的小公司还没有能力构建更好的开发环境。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2021-12-7 12:35
  • 签到天数: 1354 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2016-3-1 22:42:42 | 显示全部楼层
    下载下来,学习和参考
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-8-17 17:27
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2016-3-3 09:32:34 | 显示全部楼层
    多学习下,谢谢分享!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2016-3-3 09:51:49 | 显示全部楼层
    谢谢分享,楼主辛苦了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2016-3-3 15:38:09 | 显示全部楼层
    哈哈,我刚买了套2440的板子,谢谢版主资料共享!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2016-3-7 09:41:37 | 显示全部楼层
    点赞~楼主棒棒哒~果断学习中~
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2016-3-8 09:07:03 | 显示全部楼层
    看到天嵌昨天有 促销活动,买了一套,先保存着!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2018-3-5 10:57
  • 签到天数: 112 天

    连续签到: 1 天

    [LV.6]常住居民II

     楼主| 发表于 2016-3-9 10:42:44 | 显示全部楼层
    yanhaijian 发表于 2016-3-1 16:06
    我感觉之所以Linux发展缓慢,主要是大公司没有加入其中,底下的小公司还没有能力构建更好的开发环境。 ...

    呵呵这可能就需要师傅领进门,发展靠个人了,青出于蓝而胜于蓝,才能发展更快
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2018-3-5 10:57
  • 签到天数: 112 天

    连续签到: 1 天

    [LV.6]常住居民II

     楼主| 发表于 2016-3-9 10:43:25 | 显示全部楼层
    yeah26 发表于 2016-3-8 09:07
    看到天嵌昨天有 促销活动,买了一套,先保存着!

    是的,为支持学生开学,我们做了一个助学活动,谢谢支持了哈
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则



    手机版|小黑屋|与非网

    GMT+8, 2024-4-23 14:18 , Processed in 0.201742 second(s), 33 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.