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=%04d\n",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坐标

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sanzhong104204

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值