HX711模块称重51单片机电子秤称重压力检测阈值报警仪系统 源码+原理图仿真(文件,文件
HX711模块称重51单片机电子秤称重压力检测阈值报警仪系统 源码+原理图仿真(文件,文件,文件) 本系统由STC89C52单片机、LCD1602液晶显示、HX711称重传感器、 蜂鸣器报警、按键及电源组成。 1、LCD602液晶实时显示重量和设置阈值。 2、按键可以设置报警阈值,阈值范围0-5000g,实际重量高于阈值 报警,否则不报警。 3、称重传感器量程:0-5KG即0-5000g。 4、设置阈值具有eeprom存储功能,即掉电不丢失数据。 注意:称重/压力传感器上电时,保持没有重物,去皮功能。
刚搞完这个51单片机电子秤项目,手头还有点余温,直接上干货。这系统核心就三块:HX711称重、阈值报警和掉电存储。咱们从硬件连线开始捋,别急着敲代码,硬件不对啥都白搭。
传感器接法要注意,HX711的DT脚接P3^2,SCK接P3^3。为啥选这俩引脚?51的INT0中断刚好在P3^2,采集数据时用查询方式更方便。上电前切记空载,这是去皮的关键,代码里得体现:
void HX711_Tare(void)
{
unsigned long sum = 0;
for(uint8_t i=0;i<10;i++) //取10次平均值
{
sum += HX711_Read();
}
offset = sum / 10; //去皮基准值
}
这个函数在初始化时调用,把空载时的AD值存到offset变量。后面每次读数都要减去这个基准,相当于电子秤的归零操作。

阈值设置用三个按键:设置键、加、减。这里有个坑,按键防抖必须做,不然数值跳得你怀疑人生。看这段状态机实现:
if(KeySet_Press) //设置键按下
{
__asm__("nop"); //空指令做延时
if(KeySet_Press)
{
setting_mode = !setting_mode; //切换设置模式
BEEP = 0; //蜂鸣器短响
delay_ms(50);
BEEP = 1;
while(KeySet_Press); //等待松手
}
}
用while卡住直到松手,实测比延时更靠谱。设置好的阈值要存EEPROM,STC89C52自带Flash模拟EEPROM,注意写之前先擦除扇区:
void Save_Threshold(uint16_t val)
{
IAP_CONTR = 0x80; //使能ISP
IAP_CMD = 0x03; //擦除模式
IAP_ADDRH = 0x80; //扇区地址
IAP_ADDRL = 0x00;
IAP_Trigger();
_nop_();
IAP_CMD = 0x02; //写模式
IAP_DATA = val>>8; //存高字节
IAP_Trigger();
IAP_DATA = val&0xFF;//存低字节
IAP_Trigger();
IAP_Disable(); //关闭ISP
}
这里有个细节,STC的EEPROM操作需要严格按照时序,每次操作后都要Disable,否则可能锁死芯片。
报警逻辑简单粗暴,主循环里加个判断:
if(real_weight > threshold && threshold!=0)
{
BEEP = 0; //持续报警
LED = 0; //指示灯亮
}
else
{
BEEP = 1; //关闭报警
LED = 1;
}
注意threshold=0时相当于关闭报警功能,这个细节很多新手会漏掉。
HX711模块称重51单片机电子秤称重压力检测阈值报警仪系统 源码+原理图仿真(文件,文件,文件) 本系统由STC89C52单片机、LCD1602液晶显示、HX711称重传感器、 蜂鸣器报警、按键及电源组成。 1、LCD602液晶实时显示重量和设置阈值。 2、按键可以设置报警阈值,阈值范围0-5000g,实际重量高于阈值 报警,否则不报警。 3、称重传感器量程:0-5KG即0-5000g。 4、设置阈值具有eeprom存储功能,即掉电不丢失数据。 注意:称重/压力传感器上电时,保持没有重物,去皮功能。

显示部分用LCD1602,第一行显示实时重量,第二行显示阈值。重量显示要转成字符串处理,别直接怼数值到液晶:
sprintf(display_buf,"Weight:%05d g",real_weight);
LCD_Write_String(0,0,display_buf);
用%05d固定5位显示,避免数值跳动时字符位置乱窜。实测这样显示稳定很多。
最后说校准,这是项目的灵魂。准备标准砝码,比如500g、1kg的,通过修改校准系数:
float calibration_factor = 106600.0; //这个值需要实测调整
real_weight = (HX711_Read()-offset)/calibration_factor;
不同传感器的系数可能差个数量级,建议先用串口输出原始AD值,再计算系数。别相信商家给的标称值,自己测才准。
掉电存储实测时发现个坑:频繁写入会导致Flash寿命缩短。解决方法是在设置阈值时加个3秒延时,只有数值稳定超过3秒才存储,避免误操作损耗。

整个项目最费时间的不是代码,是结构装配。传感器要悬空固定,单片机板得和秤盘物理隔离,不然你会看到重量值自己在那儿蹦迪。用3D打印了个支架,效果比洞洞板好太多。
更多推荐
所有评论(0)