#define N 8
/********************* 算术滤波子涵数 ***********************
* 名称: Float_Value filter_valve(void)
* 功能: 滤波子涵数
* 调用: X_Read();
* 返回值: 平均数
*****************************************************************/
Float_Value filter_valve(void)
{
unsigned char i , j , count;
float xdata valve_buf[N];
float xdata sum = 0 , temp;
/**************** 采样 N 次 ******************/
for(count=0 ; count < N ; count++)
{PCA0CPH2 = 0x0E; // 喂狗
valve_buf[count] = X_Read();
}
/***************** 冒泡排序 ******************/
for(j = 0 ; j < N - 1 ; j++)
{
for(i = 0 ; i < N - j ; i++)
{PCA0CPH2 = 0x0E; // 喂狗
if(valve_buf[i] > valve_buf[i + 1])
{PCA0CPH2 = 0x0E; // 喂狗
temp = valve_buf[i];
valve_buf[i] = valve_buf[i + 1];
valve_buf[i + 1] = temp;
}
}
}
/*********** 减去两个最大 减去两个最小 累加 **********/
for(count = 2 ; count < N - 2 ; count++)
{PCA0CPH2 = 0x0E; // 喂狗
sum += valve_buf[count];
}
/**************** 平均后反回 *********************/
return (sum / (N - 3));
}
/************ 单通道启动检测函数 *************
* 名称: X_Read();Y_Read();Z_Read();
* 说明: 单通道启动
* 功能: 检测数据读取
* 调用: 中断 ADC0_ISR
* 输入: 无
* 返回值: X_Scale , Y_Scale , Z_Scale ;
*********************X*************************/
long X_Read(void) // V
{
ADC0CN = Gain_x; // 增益设置 == x
ADC0MUX = 0x01; // 0x08; 检测通道差动配置
if (ADC0MD == 0x80){ADC0MD = 0x82;};
EIE1 = 0x08; // 开启 ADC_ISR
while(AD0BUSY)PCA0CPH2 = 0x0E; // 喂狗
return(rawValue.result);
}
猜您喜欢
推荐内容
开源项目推荐 更多
热门活动
热门器件
用户搜过
随便看看
热门下载
热门文章
热门标签
评论