سلام
2 تابع هست که اولی مقادیر تاچ رو می خونه و خروجی تقریبا پایداری داره
حالا خروجی تابع اول توسط تابع دوم گرفته میشه به محض گرفتن اعداد وقتی نمایش می دم پرش های بسیار زیاد و عجیبی در اعداد می بینم
تابع دوم
2 تابع هست که اولی مقادیر تاچ رو می خونه و خروجی تقریبا پایداری داره
حالا خروجی تابع اول توسط تابع دوم گرفته میشه به محض گرفتن اعداد وقتی نمایش می دم پرش های بسیار زیاد و عجیبی در اعداد می بینم
Coordinate *Read_XPT2046(void)
{
static Coordinate screen;
int m0,m1,m2,temp[3],TP_X[1],TP_Y[1];
uint8_t count=0;
int buffer[2][9]={{0},{0}};
do
{
XPT2046_GetAdXY(TP_X,TP_Y);
buffer[0][count]=TP_X[0];
buffer[1][count]=TP_Y[0];
count++;
}
while(!read_IRQ()&& count<9); /* TP_INT_IN */
if(count==9) /* Average X Y */
{
/* Average X */
temp[0]=(buffer[0][0]+buffer[0][1]+buffer[0][2])/3;
temp[1]=(buffer[0][3]+buffer[0][4]+buffer[0][5])/3;
temp[2]=(buffer[0][6]+buffer[0][7]+buffer[0][8])/3;
m0=temp[0]-temp[1];
m1=temp[1]-temp[2];
m2=temp[2]-temp[0];
m0=m0>0?m0:(-m0);
m1=m1>0?m1:(-m1);
m2=m2>0?m2:(-m2);
if( m0>THRESHOLD && m1>THRESHOLD && m2>THRESHOLD ) return 0;
if(m0<m1)
{
if(m2<m0)
screen.x=(temp[0]+temp[2])/2;
else
screen.x=(temp[0]+temp[1])/2;
}
else if(m2<m1)
screen.x=(temp[0]+temp[2])/2;
else
screen.x=(temp[1]+temp[2])/2;
/* Average Y */
temp[0]=(buffer[1][0]+buffer[1][1]+buffer[1][2])/3;
temp[1]=(buffer[1][3]+buffer[1][4]+buffer[1][5])/3;
temp[2]=(buffer[1][6]+buffer[1][7]+buffer[1][8])/3;
m0=temp[0]-temp[1];
m1=temp[1]-temp[2];
m2=temp[2]-temp[0];
m0=m0>0?m0:(-m0);
m1=m1>0?m1:(-m1);
m2=m2>0?m2:(-m2);
if( m0>THRESHOLD && m1>THRESHOLD && m2>THRESHOLD ) return 0;
if(m0<m1)
{
if(m2<m0)
screen.y=(temp[0]+temp[2])/2;
else
screen.y=(temp[0]+temp[1])/2;
}
else if(m2<m1)
screen.y=(temp[0]+temp[2])/2;
else
screen.y=(temp[1]+temp[2])/2;
sprintf(buf,"X=%5d,Y=%5d",screen.x,screen.y);
LCD_ShowString(0,80,buf,Black,White);
return &screen;
}
return 0;
}
تابع دوم
FunctionalState getDisplayPoint(Coordinate * displayPtr,
Coordinate * screenPtr,
Matrix * matrixPtr )
{
FunctionalState retTHRESHOLD =ENABLE ;
sprintf(buf,"X=%5d,Y=%5d",screenPtr->x,screenPtr->y);
LCD_ShowString(0,60,buf,Black,White);
if( matrixPtr->Divider != 0 )
{
/* XD = AX+BY+C */
displayPtr->x = ( (matrixPtr->An * screenPtr->x) +
(matrixPtr->Bn * screenPtr->y) +
matrixPtr->Cn
) / matrixPtr->Divider ;
/* YD = DX+EY+F */
displayPtr->y = ( (matrixPtr->Dn * screenPtr->x) +
(matrixPtr->En * screenPtr->y) +
matrixPtr->Fn
) / matrixPtr->Divider ;
}
else
{
retTHRESHOLD = DISABLE;
}
return(retTHRESHOLD);
}
دیدگاه