#include "hx711.h" #include "public.h" //校准参数 //因为不同的传感器特性曲线不是很一致,因此,每一个传感器需要矫正这里这个参数才能使测量值很准确。 //当发现测试出来的重量偏大时,增加该数值。 //如果测试出来的重量偏小时,减小改数值。 //该值可以为小数 #define GapValue 710 //5kg量程对应参数430附近,3kg量程对应710附近,1kg量程对应2150附近 //报警值,单位是g #define AlarmValue 10000 //100kg unsigned long HX711_Buffer = 0; //用来存放HX711读取出来的数据 unsigned long Weight_Maopi = 0; //用来存放毛皮数据 long Weight_Shiwu = 0; //用来存放实物重量 void Get_Maopi(void); long Get_Weight(void); void Hx711Init(void); void Hx711Init(void) { HX711_DOUT_PIN_OUT(); HX711_SCK_PIN_OUT(); } //**************************************************** //读取HX711 //**************************************************** unsigned long HX711_Read(void) //增益128 { unsigned long count; unsigned int timeout=0; unsigned char i; HX711_DOUT_PIN_OUT(); HX711_DOUT_PIN=1; system_delay_us(1); HX711_SCK_PIN=0; count=0; HX711_DOUT_PIN_IN(); while((HX711_DOUT_PIN)&&(++timeout<3000)); for(i=0;i<24;i++) { HX711_SCK_PIN=1; count=count<<1; HX711_SCK_PIN=0; HX711_DOUT_PIN_IN(); if(HX711_DOUT_PIN) count++; } HX711_SCK_PIN=1; count=count^0x800000;//第25个脉冲下降沿来时,转换数据 system_delay_us(1); HX711_SCK_PIN=0; return(count); } //**************************************************** //获取毛皮重量 //**************************************************** void Get_Maopi(void) { Weight_Maopi = HX711_Read(); } //**************************************************** //称重 //**************************************************** long Get_Weight(void) { Weight_Shiwu = HX711_Read(); Weight_Shiwu = Weight_Shiwu - Weight_Maopi; //获取净重 if(Weight_Shiwu >= 0) { Weight_Shiwu = (unsigned long)((float)Weight_Shiwu/GapValue); //计算实物的实际重量 } else { Weight_Shiwu = 0; } return Weight_Shiwu; }