找回密码
 立即注册
收起左侧

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

12
回复
7307
查看
[复制链接]
累计签到:82 天
连续签到:1 天
来源: Qt文章 2016-3-1 15:10:36 显示全部楼层 |阅读模式

马上注册,查看详细内容!注册请先查看:注册须知

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

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坐标;



  感谢博主s_a_n_的分享!


回复

使用道具 举报

累计签到:1569 天
连续签到:1 天
2016-3-1 17:33:06 显示全部楼层
支持一下,希望可以转帖更多相关帖子!
回复 支持 反对

使用道具 举报

累计签到:6 天
连续签到:1 天
2016-3-3 09:45:58 显示全部楼层
谢谢楼主
有在用TQ335X的,楼主有没有这方面的资料分享哈!多谢!
回复 支持 反对

使用道具 举报

累计签到:1 天
连续签到:1 天
2016-3-3 10:01:16 显示全部楼层


支持一下,希望可以转帖更多相关帖子!
回复 支持 反对

使用道具 举报

累计签到:2 天
连续签到:1 天
2016-3-3 14:57:18 显示全部楼层
版主不错,下次多发些类似的帖子,赞一个!
回复 支持 反对

使用道具 举报

累计签到:82 天
连续签到:1 天
2016-3-7 09:26:44 显示全部楼层
lzh 发表于 2016-3-3 09:45
谢谢楼主
有在用TQ335X的,楼主有没有这方面的资料分享哈!多谢!

静请关注,有的
回复 支持 反对

使用道具 举报

累计签到:82 天
连续签到:1 天
2016-3-7 09:27:06 显示全部楼层
2851297573 发表于 2016-3-3 14:57
版主不错,下次多发些类似的帖子,赞一个!

好勒,大家也多指导一下哈
回复 支持 反对

使用道具 举报

尚未签到

2016-3-7 10:00:13 显示全部楼层
刚入手2440,正准备学习使用中,多学楼主分享
回复 支持 反对

使用道具 举报

累计签到:82 天
连续签到:1 天
2016-3-9 09:33:57 显示全部楼层
yafeilinux 发表于 2016-3-1 17:33
支持一下,希望可以转帖更多相关帖子!

回复 支持 反对

使用道具 举报

累计签到:82 天
连续签到:1 天
2016-3-9 09:34:20 显示全部楼层
lzh 发表于 2016-3-3 09:45
谢谢楼主
有在用TQ335X的,楼主有没有这方面的资料分享哈!多谢!

请继续关注我们,技术文章更新ing
回复 支持 反对

使用道具 举报

累计签到:82 天
连续签到:1 天
2016-3-9 09:35:42 显示全部楼层
张晓然 发表于 2016-3-7 10:00
刚入手2440,正准备学习使用中,多学楼主分享

亲继续关注我们,还有更多哦
回复 支持 反对

使用道具 举报

累计签到:1 天
连续签到:1 天
2016-3-9 09:45:50 显示全部楼层
恩恩,不错,不过现在在玩210了,希望以后楼主继续分享更多好资料。
回复 支持 反对

使用道具 举报

尚未签到

2016-3-21 08:36:56 显示全部楼层
顶你一下,好贴要顶!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了