码迷,mamicode.com
首页 > 编程语言 > 详细

四线电阻触摸屏采样滤波算法C语言代码

时间:2015-05-16 01:29:35      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:算法   c语言 嵌入式   触摸屏   驱动   

四线电阻触摸屏的采样滤波算法,实践证明很好用的!
void TsAdcStart(void) // 自己实现
{

}
bool IsTsAdcOver(void) // 自己实现
{
    bool iRes;
    return iRes;
}
u16 TsAdcGetX(void) // 自己实现
{
    u16 iXPhy = 0;
    return iXPhy;	
}
u16 TsAdcGetY(void) // 自己实现
{
    u16 iYPhy = 0;
    return iYPhy;
}
void delayms(u32 t) // 自己实现
{

}

u32 TsGetPhyCoord(void)
{
    u8 i = 0;
    u8 j = 0;

    u16 arrXPhy[3] = {0};
    u16 arrYPhy[3] = {0};

    u16 arrMidXPhy[2] = {0};
    u16 arrMidYPhy[2] = {0};

    u16 deltaX = 0;
    u16 deltaY = 0;
 
    u32 iXYPhy = 0;

	for (i=0; i<6; i++)
	{
		if (i == 0)
		{
			delayms(5); // 初次采样前的消抖延时
		}
    
		// x、y分别取3个物理值作为一组
		for (j=0; j<3; j++) 
		{
			TsAdcStart();             // 自己实现
			while (!IsTsAdcOver());   // 自己实现
			arrXPhy[j] = TsAdcGetX(); // 自己实现
			arrYPhy[j] = TsAdcGetY(); // 自己实现
			if (j != 2)
			{
				delayms(1);
			}
		}
    
		// 将一组物理值的中间大小值分别取出
		arrXPhy[1] = MIDDLE(arrXPhy[0], arrXPhy[1], arrXPhy[2]);
		arrYPhy[1] = MIDDLE(arrYPhy[0], arrYPhy[1], arrYPhy[2]);
		if (i < 2) // 记录最初两组得到的中间值
		{
			arrMidXPhy[i] = arrXPhy[1];
			arrMidYPhy[i] = arrYPhy[1];
		}
		else // 记录最初两组之后得到的中间值(若有必要)
		{
			// 把数组的第1个值移到第0个值处,以便第1个值处能存入新值
			arrMidXPhy[0] = arrMidXPhy[1];
			arrMidYPhy[0] = arrMidYPhy[1];   
        
			// 将新值存入数组第1个值处
			arrMidXPhy[1] = arrXPhy[1];
			arrMidYPhy[1] = arrYPhy[1];   
        
			// 本段代码每次都把[1]处值移到[0]处,再把新值存入[1]处
		}
    
		if (i > 0)
		{
			deltaX = arrMidXPhy[0] - arrMidXPhy[1];
			deltaY = arrMidYPhy[0] - arrMidYPhy[1];
        
			if (ABS(deltaX)>2 || ABS(deltaY)>2)
			{
				// 若最初两组采样数据不合要求,则需继续采样,
				// 直到采样符合要求或达到允许的最大采样次数后结束采样
				delayms(2);
				continue;
			}
			else
			{
				// 采样结果符合要求,结束本次触摸采样
				break;
			}
		}
		else
		{
			// 初次外层循环后要隔段时间再进行第下次循环
			delayms(5);
		}        
	}

	// 求x、y两组物理中间值的平均值
	arrMidXPhy[0] = (arrMidXPhy[0] + arrMidXPhy[1]) >> 1;
	arrMidYPhy[0] = (arrMidYPhy[0] + arrMidYPhy[1]) >> 1;

	iXYPhy = arrMidXPhy[0];
	iXYPhy <<= 16;
	iXYPhy |= arrMidYPhy[0];

	return iXYPhy;
}


四线电阻触摸屏采样滤波算法C语言代码

标签:算法   c语言 嵌入式   触摸屏   驱动   

原文地址:http://blog.csdn.net/dcx1205/article/details/45753377

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!