电子天平专用高精度的模数转换芯片 HX711 的c语言驱动程序,讲解详细,一看就会。
bugAD_F(void)
{
u8 str[26];
int i=0,j=0,k=0;
delay_init(72);
UsartConf(9600);
ADInit();
BUFInit();//往队列数组BUF里面存入N个采样值,初始化SUM为N个采样值的和。
while(1)
{
IntToStr(filter(),str); //IntToStr()函数在进行形参传递时,把filter()函数返回的浮点数转化为了整型数,
//所以,此处调用IntToStr()函数不会出错。
for(i=0;str[i]!='\0';i++); //计算数字是几位数。
if(i == 7) //如果只有7位数,前面用一个空格补齐8位。
USendStr(" ");
USendStr(str);
USendStr(" ");
j++; //j实现输出数字个数的计数,每输出6个数字,换2行。
if(j == 6)
{
j = 0;
USendStr("\n");
USendStr("\n");
}
k++;
if(k == 100)break; //输出100个数据后,结束调试。
delay_ms(500);
}
}
void BUFInit(void) //初始化队列数组BUF和SUM,即,往里面先存入N个采样值,SUM为N个采用值的和。
{
int j=0;
for(j=0;j
{
BUF[j] = ReadAD();
SUM+=BUF[j];
}
}
long double filter(void) //滑动均值滤波法的函数。
{
unsigned long temp=0,max=0,min=0;
int j=0;
temp = ReadAD();
/*下面一句不使用SUM+=temp-BUF[i]的形式,是为了避免temp-BUF[i]的运算,以免产生
负数,引起误差。*/
SUM = SUM+temp-BUF[i];
BUF[i]=temp;
i++;
if(i == N)
i=0;
max=BUF[0];
min=BUF[0];
for(j=0;j
{
if(max
if(min>BUF[j])min=BUF[j];
}
/*下面一句中的(SUM-max-min)/(N-2),不能用SUM=SUM-max-min; SUM/(N-2);
这两句来替代,因为,这样会改变SUM的值,越减越小,到最后,会出现负数了。*/
return (SUM-max-min)/(N-2);
}