程序:
void Delay__hx711_us(void)
{
_nop_();
_nop_();
}
//****************************************************
// 读取 HX711
//****************************************************
unsigned long HX711_Read(void) //增益 128
{
unsigned long count;
unsigned char i;
HX711_DOUT=1;
Delay__hx711_us();
HX711_SCK=0;
count=0;
while(HX711_DOUT);
for(i=0;i<24;i++)
{
HX711_SCK=1;
count=count<<1;
HX711_SCK=0;
if(HX711_DOUT) count++;
}
HX711_SCK=1;
count=count^0x800000;//第25个脉冲下降沿来时,转换数据
Delay__hx711_us();
HX711_SCK=0;
return(count);
}
主函数直接用定义unsigned long 的date变量来获得date=HX711_Read();
但是在LCD1602 完全没有反应,1602显示是正常的,接线也没有问题,HX711的管脚接51
单片机的 DouT=P3^0;
SCLK = P3^3;请问怎么解决?哪里的问题
//获得物体的真实重量
unsigned long Get_Weight(void )
{
HX711_Buffer = HX711_Read();
HX711_Buffer = HX711_Buffer/100;
if(HX711_Buffer > Get_plank())
{
True = HX711_Buffer;
True = True - Get_plank(); // 获取实物的 AD 采样数值。
True = (unsigned int)((float)True/4.257 +0.05); // 计 算 实 物 的 实际重量
// 因 为不同的传感器特性曲线不一样,因此,每一个传感器需要矫正这里的 4.30 这个除数。
// 当 发现测试出来的重量偏大时,增加该数值。
// 如 果测试出来的重量偏小时,减小改数值。
// 该 数值一般在 4.0-5.0 之间。因传感器不同而定。
//+0.05是为了四舍五入百分位
Buzzer = 1; // 关闭警报
}
// else if(HX711_Buffer < Weight_Maopi - 30)
// {
// Buzzer = 0; // 负重量报警
// }
// else if(HX711_Buffer > Weight_Maopi + 24970) // 大于 5Kg 的最大量程,报警
// {
// Buzzer = 0;
// }
// if(True > 5000 || HX711_Buffer < Get_plank() - 30)
// {
// Buzzer = 0;
// }
// else
// {
// Buzzer = 1;
// }
// True *=19.11;
// if(mode!=0) True-=76;
return True;
}
//****************************************************
// 获取上板的重量
//****************************************************
unsigned long Get_plank(void)
{
// unsigned long aa;
// HX711_Buffer=(HX711_Read()-8387600);
// HX711_Buffer=(unsigned long)((HX711_Buffer*50)/33490);
// HX711_Buffer=(HX711_Buffer-311)*10/11-9-aa;
HX711_Buffer = HX711_Read();
Plank = HX711_Buffer/100;
return Plank;
// return HX711_Buffer;
}
按照理解代码应该是这样的,但是在不加重量1602显示好大的数字,过千位。我的称重传感器是10kg 的。是程序哪里有问题吗?
一周热门 更多>