TA的每日心情 | 开心 2018-1-8 15:51 |
---|
签到天数: 22 天 连续签到: 1 天 [LV.4]偶尔看看III
|
发表于 2013-2-28 17:45:23
|
显示全部楼层
xqy281 发表于 2013-2-27 21:48
参考电压我是用ra8875内部参考的。内部的参考电压有问题吗?
我觉得首先要搞清楚偏差是向一个方向,还是随机的。是不是离左上角越远偏差越大。内部的参考电压一般不会有问题,建议你点击后,将获得的AD值输出到屏幕上,或输出到串口观察。
例如,4个角的X,Y值和ADX,ADY转换结果,好进行分析
如果没有滤波(多次求平均),试着增加滤波,如
亮点的代码:
void tft_gettouchpoint(INT16U *touchx,INT16U *touchy)
{
INT16U databufx[8],databufy[8],count,temp1,temp2,i,j;
//LcdClear(WHITE);
delay_ms(500);
while (1)
{
clear_TP_interrupt(); //清除RA8875触摸信息
delay_ms(2);
if(Touch_Status()) //如果有触摸
{
clear_TP_interrupt();
led_turn1;
delay_ms(2);
count=0;
while(count<8)//循环读数8次
{
clear_TP_interrupt(); //清除RA8875中断标志
databufx[count] = Get_X_ADC_Value_10bit(); //读取X轴AD值
databufy[count]=Get_Y_ADC_Value_10bit(); //读取Y轴AD值
count++;
delay_ms(2);
}
for(j=0;j<count-1;j++)
for(i=j;i<count-1;i++)
{
if(databufx>databufx[i+1])//升序排列
{
temp1=databufx[i+1];
databufx[i+1]=databufx;
databufx=temp1;
temp2=databufy[i+1];
databufy[i+1]=databufy;
databufy=temp2;
}
}
*touchx=(databufx[3]+databufx[4]+databufx[5])/3;
*touchy=(databufy[3]+databufy[4]+databufy[5])/3;
if(ISDEBUG) printf("%d,%d ",touchx,touchy);
return;
}//if
delay_ms(50);
}
}
|
|