基于32 的电子秤显示问题

2019-08-18 20:46发布

各位好友,刚接触32,做了一个电子秤,hx711的ad转换,1kg量程的重量显示小数点后两位,为啥一直跳动呢,也加入了软件滤波,还是不行。买的电子秤不都是放上去实物,数值会稳定的吗,还是ad采集要做些什么吗?
while(1)
        {       
    a=KEY_Scan(0);
    switch(a)
                {                                 
                        case KEY0_PRES:
                  Get_Maopi();
                                break;
                        case KEY1_PRES:

       Get_Weightchuzhi();
       delay_ms(10);
       weightchuzhi=Get_Weightchuzhi();
       break;
                        case WKUP_PRES:       
         Get_Maopi();
                                break;
                        default:
                                delay_ms(10);       
    }



                if(t%10==0)
           {
       Get_Weight();
     delay_ms(10);
     weight=Get_Weight();

    POINT_COLOR=RED;//éèÖÃ×ÖìåÎaoìé«
    LCD_ShowNum(100,170, weight/10000,1,16);//ÏÔê¾êμê±ÖØá¿
          LCD_ShowNum(100+8,170,weight%10000/1000,1,16);
    LCD_ShowNum(100+8+8,170,weight%1000/100,1,16);
    LCD_ShowNum(100+8+16+8,170,weight%100/10,1,16);
    LCD_ShowNum(100+8+16+8+8,170,weight%10,1,16);

             
  }                                  
            delay_ms(100);       
             t++;
     if(t==10)
                {
                   t=0;
                        LED0=!LED0;
    }

        }

}
获取重量
s32 Get_Weight(void)
{

         HX711_Buffer=HX711_val_filtered();

  if(HX711_Buffer > Weight_Maopi)                       
        {

                Weight_Shiwu = HX711_Buffer;
                Weight_Shiwu = Weight_Shiwu - Weight_Maopi;                               

                Weight_Shiwu = (s32)((float)Weight_Shiwu/GapValue+0.05);        
                        delay_us(1);                                                                                                       
        }




  return (Weight_Shiwu);
}





滤波
u32 HX711_val_filtered(void)
{
  u32 Sam[18],tmpmax,tmpmin,sum=0,Average;
   u8 i;
  for(i=0;i<18;i++)
{
    Sam[i]=HX711_Read();

  if(i==0)
{
     tmpmax=Sam[0];

tmpmin=Sam[0];
}
   if(i>0)
{
if(Sam[i]>tmpmax) tmpmax=Sam[i];
if(Sam[i]<tmpmin) tmpmin=Sam[i];

}
  }

    for(i=0;i<18;i++)

{   
     if(!(Sam[i]==tmpmax||Sam[i]==tmpmin))

{   sum=sum+Sam[i];

}

}
  Average=sum/(18-2);
   return Average;


}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。