大学生
最后登录1970-1-1
在线时间 小时
注册时间2015-1-25
|
楼主 |
发表于 2015-10-15 23:37:47
|
显示全部楼层
uint16_t XPT2046_ReadAdc(uint8_t _ucCh) //Ñ¡Ôñò»¸öí¨μ࣬·μ»ØadcμÄÖμ
{
//uint16_t usAdc;
XPT2046_WriteCMD(_ucCh);
return XPT2046_ReadCMD();
}
void Touch_GetAdXY(int *x,int *y) //¶áè¡ADμÄÖ죬12bit ×î′óÎa4096
{
int adx,ady;
//adx=Read_X();
adx = XPT2046_ReadAdc(0xd0);
DelayUS(1);
//ady=Read_Y();
ady = XPT2046_ReadAdc(0x90);
/// if(INT_IN_2046==SET)
*x=adx;
*y=ady;
}
/******************************************************
* oˉêyÃû£oRead_2046
* Ãèêö £oμÃμ½ÂË2¨Ö®oóμÄX Y
* êäèë : ÎT
* êä3ö £oCoordinate½á11ìåμØÖ·
* ¾ùày £oÎT
* ×¢òa £oËù¶èÏà¶Ô±è½ÏÂy
*********************************************************/
typedef struct POINT
{
uint16_t x;
uint16_t y;
}Coordinate;
/* 2îÖμÃÅÏT */
#define THRESHOLD 2
u8 Read_2046(void)
{
// static Coordinate screen;
int m0,m1,m2,TP_X[1],TP_Y[1],temp[3];
uint8_t count=0;
/* ×ø±êXoíY½øDD9′Î2éÑù*/
int buffer[2][9]={{0},{0}};
do
{
Touch_GetAdXY(TP_X,TP_Y);
buffer[0][count]=TP_X[0];
buffer[1][count]=TP_Y[0];
count++;
} /*óû§μã»÷′¥ÃtÆáê±¼′TP_INT_INDÅoÅÎaμí 2¢Çò count<9*/
while(!INT_IN_2046&& count<9);
/*èç1û′¥±êμˉÆe*/
if(INT_IN_2046 ==1)
{
/*ÖD¶Ï±êÖ¾¸′λ*/
touch_flag =0;
}
/* èç1û3é1|2éÑù9′Î,½øDDÂË2¨ */
if(count==9)
{
/* Îa¼õéùÔËËãá¿,·Ö±e·Ö3×éè¡Æ½¾ùÖμ */
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;
/* ¼ÆËã3×éêy¾YμÄ2îÖμ */
m0=temp[0]-temp[1];
m1=temp[1]-temp[2];
m2=temp[2]-temp[0];
/* ¶ÔéÏêö2îÖμ衾ø¶ÔÖμ */
m0=m0>0?m0-m0);
m1=m1>0?m1-m1);
m2=m2>0?m2-m2);
/* ÅD¶Ï¾ø¶Ô2îÖμêÇ·ñ¶¼3¬1y2îÖμÃÅÏT£¬èç1ûÕa3¸ö¾ø¶Ô2îÖμ¶¼3¬1yÃÅÏTÖ죬ÔòÅD¶¨Õa′Î2éÑùμãÎaò°μã,Å×Æú2éÑùμ㣬2îÖμÃÅÏTè¡Îa2 */
if( m0>THRESHOLD && m1>THRESHOLD && m2>THRESHOLD )
return 0;
/* ¼ÆËãËüÃÇμÄƽ¾ùÖ죬í¬ê±¸3Öμ¸øscreen */
if(m0<m1)
{
if(m2<m0)
curr.adx=(temp[0]+temp[2])/2;
else
curr.ady=(temp[0]+temp[1])/2;
}
else if(m2<m1)
curr.adx=(temp[0]+temp[2])/2;
else
curr.adx=(temp[1]+temp[2])/2;
/* í¬éÏ ¼ÆËã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)
curr.ady=(temp[0]+temp[2])/2;
else
curr.ady=(temp[0]+temp[1])/2;
}
else if(m2<m1)
curr.ady=(temp[0]+temp[2])/2;
else
curr.ady=(temp[1]+temp[2])/2;
return 1;
}
else if(count>1)
{
curr.adx=buffer[0][0];
curr.ady=buffer[1][0];
return 1 ;
}
return 0;
}
Touch_GetAdXY(int *x,int *y) 我在主函数调用这个函数的时候,出现这样的情况,不过我要的效果是不触摸的时候数据是(0,0,),触摸的时候数据可以改变到0-4096,x数据是准的,y数据都超过了4096.手放开的时候数据可以返回到(0,0)点。 |
|