采集AD值做运算,偶尔有几个值会偏大或者偏小,导致计算结果很不稳,用冒泡排序做处理,程序如下:
void sort(uint16_t *a, uint16_t l)//a为数组地址,l为数组长度。
{
int i, j;
int v;
//排序主体
for(i = 0; i < l - 1; i ++)
for(j = i+1; j < l; j ++)
{
if(a[i] > a[j])//如前面的比后面的大,则交换。
{
v = a[i];
a[i] = a[j];
a[j] = v;
}
}
}
接下来对AD值处理,去掉两头的数,取中间一段,计算结果会相对稳定。
void voltage0(void)
{
uint16_t adrange[10];
uint8_t i = 0;
uint16_t sum = 0;
//取10次电压平均值
for (i = 0;i < 10;i++)
{
adrange[i]= ADCConvertedValue[i * 2];
}
sort( adrange, 10);
sum=adrange[2]+adrange[3]+adrange[4]+adrange[5]+adrange[6];
sum1=sum/4;
}