|
发表于 2020-6-25 17:14:23
|
显示全部楼层
- #include "hx711.c"
- #define wtime2 30
- #define wdtm 35
- uchar idata wtime0=6 ; //默认值5,6,10 震动值
- uchar idata wtime1=5 ; //5,5,10
- uchar idata wtime4=2 ;//2,2,5
- uchar idata fash1 ; //默认值4,5, 8,10,10,12 缓冲区值
- uchar idata fash2 ; //默认值8,10,12,12,15,18
- uchar idata fash3 ; //默认值10,12,15,20,15,20
- uchar idata mer1 ; //默认值100,150,250 震动值
- uchar idata mer2 ; //默认值80,100,180
- uchar idata mer3 ; //默认值40,50,100
- bit pick;
- bit f_bit6;
- bit stab2;
- unsigned long idata ad_out;
- xdata unsigned long adbuff[50];
- xdata unsigned long adw_li;
- idata unsigned long i1c,i21;
- idata unsigned long ls_li;
- idata unsigned long ls_lei;
- unsigned char ch_12,ch_13,ch_14,ch_15,ch_16,ch_17,ch_11;
- union adhc
- {
- unsigned long mr;
- unsigned char mr1[4];
- }ad;
- ////////////////////////////
- void InitFilter (void)//滤波参数初始化
- {
- ch_13=1;
- ch_14=1;
- ch_17=wtime2;
- }
- void load_adbuff(void)
- {
- uchar i;
- for(i=0;i<50;i++)
- {
- adbuff[i]=ad_out;
- }
- }
- unsigned long int madd(unsigned char n1,unsigned char n2)//累计数据
- {
- unsigned char loop;
- ls_lei = 0;
- for (loop = 0; loop<n2; loop++)
- {
- ls_lei= ls_lei + adbuff[n1];
- n1++;
- }
- return(ls_lei);
- }
- void move(unsigned char dest,unsigned char num)//数值向右移位
- {
- unsigned char loop,sour;
- sour = dest + 1;
- for (loop = 0; loop < num; loop++)
- {
- adbuff[dest] = adbuff[sour];
- dest++;
- sour++;
- }
- }
- ////////////////////////////
- void maic( void )
- {
- move(0,fash1);//移位,去掉最低位的数据,从第一参数开始移第一参数个数据
- adbuff[fash1-1] =ad.mr; //加入新数据
- ad.mr = madd(0,fash1);//累加数据,从数据0开始,
- ad.mr=ad.mr/fash1;//求平均
- ls_li = ad.mr;
- ls_li = ls_li - i21;
- if (ls_li > 0x80000000)
- {
- ls_li = -ls_li;
- }
- if(ls_li > mer1)
- {
- ch_13--;
- if (ch_13!=0)
- {
- return;
- }
- else
- {
- ch_13 = 1;
- ch_14 = 1;
- ch_15 = 1;
- ch_16 = 1;
- ch_11 = 1;
- ch_12=1;
- ch_17=1;
- }
- }
- else
- {
- if ( (ch_14 ^ fash2) !=0 )
- {
- ch_14++;
- }
- else
- {
- ch_13 = wtime0;
- }
- }
- move(fash1,fash2);
- adbuff[fash1+fash2-1] = ad.mr;
- ad.mr = madd(fash1+fash2-ch_14,ch_14);
- ad.mr= ad.mr / ch_14;
- ls_li = ad.mr;
- f_bit6=0;
- ls_li = ls_li - i21;
- if ( ls_li > 0x80000000 )
- {
- ls_li = -ls_li;
- f_bit6=1;
- }
- i21 = ad.mr;
- //////////////////////
- if (ls_li>mer2)
- {
- ch_15--;
- if (ch_15 != 0)
- {
- return;
- }
- else
- {
- ch_15 = 1;
- ch_16 = 1;
- ch_11 = 1;
- ch_12=1;
- ch_17=1;
- }
- }
- else
- {
- if ( (ch_14 ^ fash2) == 0)
- {
- ls_li = ls_li >> 1;
- if ( f_bit6 != 0)
- {
- ad.mr = ad.mr - ls_li;
- }
- else
- {
- ad.mr = ad.mr + ls_li;
- }
- if ((ch_16 ^ fash3) !=0)
- {
- ch_16++;
- }
- }
- }
- move(fash1+fash2, fash3);
- adbuff[fash1+fash2+fash3-1] = ad.mr;
- ad.mr = madd(fash1+fash2+fash3-ch_16,ch_16);
- ad.mr =ad.mr / ch_16;
- i21 = ad.mr;
- ls_li =ad.mr;
- ls_li = ls_li - adw_li;
- if (ls_li > 0x80000000)
- ls_li = -ls_li;
- if (ls_li > mer3)
- {
- goto cal16;
- }
- else
- {
- goto cal17;
- }
- cal16:
- ch_11--;
- stab2=0;
- if (ch_11!=0)
- {
- return;
- }
- else
- {
- ch_11=1;
- ch_12=1;
- ch_17=1;
- goto cal18;
- }
- cal17:
- if ((ch_16^fash3) !=0)
- {
- goto cal16;
- }
- ch_15 = wtime1;
- ch_11 = wtime4;
- ch_12++;
- stab2 = 1;
- if ( (ch_12 ^wdtm) !=0 )
- {
- goto cal18;
- }
- ch_12 =wdtm;
- i1c = i1c + ad.mr;
- ch_17--;
- if (ch_17!=0)
- {
- return;
- }
- ad.mr = i1c / wtime2;
- adw_li = adw_li +ad.mr;
- adw_li = adw_li >> 1;
- i21 = adw_li;
- cal18:
- adw_li=i21;
- ad_out = adw_li;
- i1c = 0;
- pick = 1;
- ch_17 = wtime2;
- }
- void read_ad(void)
- {
- HX_OUT1=1;
- HX_CLK1=0;
- if (HX_OUT1==0)
- {
- ad.mr =hx711_ad();//AD采样
- maic();//滤波
- }
- }
- //楼主,应用场景说一下呗 或许原作者就在论坛哦
复制代码
|
|