假定从8位ad中读取数据(如果是更高位的ad可定义数据类型为int),子程序为get_ad();
1、限副滤波
#define a 10
char value;
char filter()
{
charnew_value;
new_value = get_ad();
if ( ( new_value - value> a ) || ( value - new_value> a )
return value;
return new_value;
}
2、中位值滤波法
#define n11
char filter()
{
char value_buf[n];
char count,i,j,temp;
for ( count=0;count{
value_buf[count] = get_ad();
delay();
}
for (j=0;j{
for (i=0;i{
if ( value_buf>value_buf[i 1] )
{
temp = value_buf;
value_buf = value_buf[i 1];
value_buf[i 1] = temp;
}
}
}
return value_buf[(n-1)/2];
}
3、算术平均滤波法
#define n 12
char filter()
{
intsum = 0;
for ( count=0;count{
sum = get_ad();
delay();
}
return (char)(sum/n);
}
4、递推平均滤波法(又称滑动平均滤波法)
#define n 12
char value_buf[n];
char i=0;
char filter()
{
char count;
intsum=0;
value_buf[i ] = get_ad();
if ( i == n )i = 0;
for ( count=0;countsum = value_buf[count];
return (char)(sum/n);
}
5、中位值平均滤波法(又称防脉冲干扰平均滤波法)
#define n 12
char filter()
{
char count,i,j;
char value_buf[n];
intsum=0;
for(count=0;count{
value_buf[count] = get_ad();
delay();