一套基于 51 单片机的智能电子秤方案,采用 HX711 24 位高精度 AD 转换模块 + 电阻应变式称重传感器,配合 LCD1602 液晶显示,支持去皮、阈值报警、砝码校准等实用功能。适合课程设计、毕业设计参考。
一、系统功能
本设计实现了一个完整的智能电子秤系统,核心功能包括:
- 实时称重显示 — HX711 采集称重传感器信号,LCD1602 实时显示当前重量(单位:g)
- 去皮功能 — 按下 CHOICE 键一键去皮,自动记录皮重并从后续测量中扣除
- 阈值报警 — 可通过 ADD/REDUCE 按键设定重量上限,超限蜂鸣器报警
- 砝码校准 — 支持 1000g 标准砝码校准,自动计算校正系数存入 EEPROM
- 累计称重 — MODE 键切换累计模式,自动累加多次称重结果
二、硬件方案
2.1 元器件清单
| 元器件 | 数量 | 说明 |
|---|---|---|
| STC89C52 单片机 | 1 | 主控 MCU,51 内核,8KB Flash |
| HX711 模块 | 1 | 24 位高精度 AD 转换器,专用称重传感器接口 |
| 电阻应变式称重传感器 | 1 | 量程 5kg,四线制差分输出 |
| LCD1602 液晶屏 | 1 | 16×2 字符型液晶显示模块 |
| 轻触按键 | 4 | ADD / REDUCE / MODE / CHOICE |
| 有源蜂鸣器 | 1 | 超限报警 |
| 10K 排阻 | 1 | P0 口上拉电阻 |
2.2 系统框图
系统以 STC89C52 为核心,HX711 模块负责称重传感器的激励与信号采集,通过两线串行接口(PD_SCK + DOUT)与 MCU 通信。LCD1602 采用 8 位并行数据接口 + 3 线控制(RS、RW、EN),4 个独立按键分别对应加减/模式/选择功能。


2.3 HX711 称重模块
HX711 是专为高精度电子秤设计的 24 位 AD 转换器芯片,内置稳压电源和片内时钟振荡器,外围电路极简。与 MCU 通过两根线通信:
- PD_SCK:时钟线,MCU 输出
- DOUT:数据线,HX711 输出,低电平表示数据就绪
// HX711 读取函数
ulong Read_HX711(void)
{
ulong count = 0;
uchar i;
// 等待 DOUT 变低(数据就绪)
while(HX711_DOUT);
// 读取 24 位数据
for(i = 0; i < 24; i++)
{
HX711_SCK = 1;
count = count << 1;
HX711_SCK = 0;
if(HX711_DOUT) count++;
}
// 第 25 个脉冲选择通道 A,增益 128
HX711_SCK = 1;
count = count ^ 0x800000; // 异或转换二进制补码
HX711_SCK = 0;
return count;
}
HX711 输出的是 24 位有符号数,通过校准系数换算为实际重量(g)。
三、软件设计
3.1 主程序流程
void main(void)
{
Init_LCD1602(); // 初始化液晶
Get_Tare(); // 读取皮重
LCD1602_Display(weight); // 显示初始重量
while(1)
{
weight = Get_Weight(); // 获取当前重量
LCD1602_Display(weight); // 更新显示
// 按键扫描
if(ADD == 0) { delay_ms(20); Weight_Threshold_Add(); }
if(REDUCE == 0) { delay_ms(20); Weight_Threshold_Sub(); }
if(MODE == 0) { delay_ms(20); Mode_Switch(); }
if(CHOICE == 0) { delay_ms(20); Tare_Clear(); }
// 超限报警判断
if(weight > weight_yuzhi) BEEP = 0; // 蜂鸣器响
else BEEP = 1;
}
}
3.2 重量计算与去皮
ulong Get_Weight(void)
{
ulong hx711_dat;
hx711_dat = Read_HX711(); // 读取 HX711 原始值
weight = hx711_dat / hx711_xishu; // 除以校准系数换算为克
if(weight > pi_weight)
weight = weight - pi_weight; // 减去皮重
else
weight = 0;
return weight;
}
void Get_Tare(void) // 去皮
{
pi_weight = Read_HX711() / hx711_xishu;
}
3.3 砝码校准算法
校准的核心思想是用已知重量的标准砝码,反向推算 HX711 的换算系数:
// 校准公式:hx711_xishu = (原始读数) * 1000 / (实际砝码重量)
// 例如:1000g 砝码,HX711 原始读数 32514
// hx711_xishu = 32514 * 1000 / 934 = 34811(根据实测偏移修正)
校准步骤:放置 1000g 标准砝码 → 读取 HX711 原始值 → 计算系数 → 写入 EEPROM。
四、调试要点
- HX711 时序:PD_SCK 的高电平脉宽需 > 0.2μs,51 单片机在 12MHz 晶振下直接操作 GPIO 即可满足
- 称重传感器接线:红线(E+)、黑线(E-)、绿线(A+)、白线(A-),接错会导致读数不变或跳变
- 去皮时机:应在传感器空载稳定后执行,否则零点漂移会影响后续测量精度
- 电源稳定性:HX711 的 AVDD 需干净供电(推荐使用 3.3V LDO 单独供电),纹波太大会导致读数跳动
- 校准精度:建议用 1000g 以上砝码校准,系数取多次测量平均值,写入后重新上电验证
资料下载
完整资料包含:
- 51 单片机 Keil C51 工程源码(含 HX711 驱动、LCD1602 驱动、主程序)
- 原理图 PDF
- Proteus 仿真工程文件
- 测试视频
- 详细设计文档
通过网盘分享的文件:嵌入式-基于51单片机的智能电子秤设计(HX711、LCD1602、按键) 链接: https://pan.baidu.com/s/1NER94ot35afrAXCsLxPiqw?pwd=3c3r 提取码: 3c3r