欢迎访问电子工程网!   登录 | 免费注册 ]   

Embedsky007的个人空间 http://www.eechina.com/space-uid-114045.html [收藏] [复制] [分享] [RSS]

博客

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

热度 5已有 330 次阅读2016-3-1 15:32 |个人分类:技术文章| 关键词: 嵌入式, 开发板, ARM9, 天嵌, tq2440

  硬件平台: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_的分享!


路过

鸡蛋
3

鲜花
1

握手

雷人

刚表态过的朋友 (4 人)

发表评论 评论 (6 个评论)

回复 lzh8 2016-3-3 09:38
好贴,谢谢分享!
回复 sally_cheng 2016-3-3 09:54
路过,支持一下
回复 2851297573 2016-3-3 16:22
学习了,感谢版主!
回复 张晓然 2016-3-7 09:43
刚入手2440,果断学习中~多谢多谢哦~
回复 yeah26 2016-3-8 09:08
不错啊,天嵌 2440的资料果然多,适合学习
回复 Embedsky007 2016-3-9 10:51
yeah26: 不错啊,天嵌 2440的资料果然多,适合学习
那必须的,你值得拥有

facelist

您需要登录后才可以评论 登录 | 立即注册

回顶部