四线电阻触摸屏采样滤波算法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;
}

时间: 2024-08-24 20:41:56

四线电阻触摸屏采样滤波算法C语言代码的相关文章

引导图滤波算法C语言实现

引导图滤波(导向图滤波, guided Filter)是一种图像滤波技术,能够根据引导图来生成不同的权重,对原图进行加权平均,实现滤波效果.在图像去雾,立体视觉等很多方面有广泛的应用. C语言实现放在我的码云上,链接在此:https://git.oschina.net/rxdj/guidedFilter.git. 输入:引导图像I,待滤波图像P,滤波半径r, 阈值eps:输出:滤波结果图. 引导图可以是单通道或者三通道,三通道必须是RGB格式:待滤波图像必须是单通道图像,数据类型为double:

DES加密解密算法C语言代码实现

代码: 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 /*------------------------ 5 定义枚举型全局变量 6 ------------------------*/ 7 typedef enum 8 { 9 false = 0, 10 true = 1 11 } bool; 12 13 // 十六轮子密钥 14 static bool SubKey[16][48]=

关于中值滤波算法,以及C语言实现(转)

源:关于中值滤波算法,以及C语言实现 1.什么是中值滤波? 中值滤波是对一个滑动窗口内的诸像素灰度值排序,用其中值代替窗口中心象素的原来灰度值,它是一种非线性的图像平滑法,它对脉冲干扰级椒盐噪声的抑制效果好,在抑制随机噪声的同时能有效保护边缘少受模糊. 中值滤波可以过滤尖峰脉冲.目的在于我们对于滤波后的数据更感兴趣.滤波后的数据保留的原图像的变化趋势,同时去除了尖峰脉冲对分析造成的影响. 以一维信号的中值滤波举例.对灰度序列80.120.90.200.100.110.70,如果按大小顺序排列,其

关于中值滤波算法,以及C语言实现

1.什么是中值滤波? 中值滤波是对一个滑动窗口内的诸像素灰度值排序,用其中值代替窗口中心象素的原来灰度值,它是一种非线性的图像平滑法,它对脉冲干扰级椒盐噪声的抑制效果好,在抑制随机噪声的同时能有效保护边缘少受模糊. 中值滤波可以过滤尖峰脉冲.目的在于我们对于滤波后的数据更感兴趣.滤波后的数据保留的原图像的变化趋势,同时去除了尖峰脉冲对分析造成的影响. 以一维信号的中值滤波举例.对灰度序列80.120.90.200.100.110.70,如果按大小顺序排列,其结果为70.80.90.10O.110

经典滤波算法总结

第1种方法限幅滤波法(又称程序判断滤波法) A方法 根据经验判断,确定两次采样允许的最大偏差值(设为A) 每次检测到新值时判断: 如果本次值与上次值之差<=A,则本次值有效 如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值代替本次值 B优点 能有效克服因偶然因素引起的脉冲干扰 C缺点 无法抑制那种周期性的干扰 平滑度差 /* A 值可根据实际情况调整 value 为有效值,new_value 为当前采样值 滤波程序返回有效的实际值 */ #define A 10 char val

数字图像处理之快速中值滤波算法

快速中值滤波算法 中值滤波算法: 在图像处理中,在进行如边缘检测这样的进一步处理之前,通常需要首先进行一定程度的降噪.中值滤波是一种非线性数字滤波器技术,经常用于去除图像或者其它信号中的噪声.这个设计思想就是检查输入信号中的采样并判断它是否代表了信号,使用奇数个采样组成的观察窗实现这项功能.观察窗口中的数值进行排序,位于观察窗中间的中值作为输出.然后,丢弃最早的值,取得新的采样,重复上面的计算过程.中值滤波是图像处理中的一个常用步骤,它对于斑点噪声和椒盐噪声来说尤其有用.保存边缘的特性使它在不希

各种滤波算法的介绍及其实现

1.限幅滤波法(又称程序判断滤波法) A.方法:   根据经验判断,确定两次采样允许的最大偏差值(设为A)   每次检测到新值时判断:   如果本次值与上次值之差<=A,则本次值有效   如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值代替本次值B.优点:   能有效克服因偶然因素引起的脉冲干扰C.缺点   无法抑制那种周期性的干扰   平滑度差 2.中位值滤波法A.方法:   连续采样N次(N取奇数)   把N次采样值按大小排列   取中间值为本次有效值B.优点:   能有效克

目标跟踪之粒子滤波---Opencv实现粒子滤波算法

目标跟踪学习笔记_2(particle filter初探1) 目标跟踪学习笔记_3(particle filter初探2) 前面2篇博客已经提到当粒子数增加时会内存报错,后面又仔细查了下程序,是代码方面的问题.所以本次的代码与前几次改变比较小.当然这些code基本也是参考网上的.代码写得很不规范,时间不够,等以后有机会将其优化并整理成类的形式.)              Opencv实现粒子滤波算法            摘要 本文通过opencv实现了一种目标跟踪算法——粒子滤波算法,算法的

AD采集滤波算法

收集的关于基础滤波算法: 理论上讲单片机从A/D芯片上采集的信号就是需要的量化信号,但是由于存在电路的相互干扰.电源噪声干扰和电磁干扰,在A/D芯片的模拟输入信号上会叠加周期或者非周期的干扰信号,并会被附加到量化值中,给信号带来一定的恶化.考虑到数据采集的实时性和安全性,有时需要对采集的数据进行软处理,一尽量减小干扰信号的影响,这一过程称为数据采集滤波. 以下介绍十种数据采集滤波的方法和编程实例.这10种方法针对不同的噪声和采样信号具有不同的性能,为不同场合的应用提供了较广的选择空间.选择这些方