|
硬件平台: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_的分享!
供货情况:
天嵌科技提供专业嵌入式板卡和行业解决方案。如有需要,可以联系天嵌科技的销售人员。
销售电话:020-38219416 38373101
技术支持:020-38219416转807 820
网址:http://www.embedsky.com
|
|