找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 84|回复: 1
打印 上一主题 下一主题

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

[复制链接]

165

主题

528

帖子

1255

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1255
跳转到指定楼层
1#
发表于 2016-5-12 14:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您!

您需要 登录 才可以下载或查看,没有帐号?注册

x
硬件平台: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坐标;
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

156

主题

503

帖子

1186

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1186
2#
发表于 2016-5-16 13:48 | 只看该作者
楼主辛苦了!感谢分享!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

巢课

技术风云榜

关于我们|手机版|EDA365 ( 粤ICP备18020198号 )

GMT+8, 2024-11-26 07:08 , Processed in 0.054363 second(s), 32 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表