一套基于 51 单片机的智能电子秤方案,采用 HX711 24 位高精度 AD 转换模块 + 电阻应变式称重传感器,配合 LCD1602 液晶显示,支持去皮、阈值报警、砝码校准等实用功能。适合课程设计、毕业设计参考。

一、系统功能

本设计实现了一个完整的智能电子秤系统,核心功能包括:

  • 实时称重显示 — HX711 采集称重传感器信号,LCD1602 实时显示当前重量(单位:g)
  • 去皮功能 — 按下 CHOICE 键一键去皮,自动记录皮重并从后续测量中扣除
  • 阈值报警 — 可通过 ADD/REDUCE 按键设定重量上限,超限蜂鸣器报警
  • 砝码校准 — 支持 1000g 标准砝码校准,自动计算校正系数存入 EEPROM
  • 累计称重 — MODE 键切换累计模式,自动累加多次称重结果

二、硬件方案

2.1 元器件清单

元器件数量说明
STC89C52 单片机1主控 MCU,51 内核,8KB Flash
HX711 模块124 位高精度 AD 转换器,专用称重传感器接口
电阻应变式称重传感器1量程 5kg,四线制差分输出
LCD1602 液晶屏116×2 字符型液晶显示模块
轻触按键4ADD / REDUCE / MODE / CHOICE
有源蜂鸣器1超限报警
10K 排阻1P0 口上拉电阻

2.2 系统框图

系统以 STC89C52 为核心,HX711 模块负责称重传感器的激励与信号采集,通过两线串行接口(PD_SCK + DOUT)与 MCU 通信。LCD1602 采用 8 位并行数据接口 + 3 线控制(RS、RW、EN),4 个独立按键分别对应加减/模式/选择功能。

系统原理图

Proteus仿真图

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。

四、调试要点

  1. HX711 时序:PD_SCK 的高电平脉宽需 > 0.2μs,51 单片机在 12MHz 晶振下直接操作 GPIO 即可满足
  2. 称重传感器接线:红线(E+)、黑线(E-)、绿线(A+)、白线(A-),接错会导致读数不变或跳变
  3. 去皮时机:应在传感器空载稳定后执行,否则零点漂移会影响后续测量精度
  4. 电源稳定性:HX711 的 AVDD 需干净供电(推荐使用 3.3V LDO 单独供电),纹波太大会导致读数跳动
  5. 校准精度:建议用 1000g 以上砝码校准,系数取多次测量平均值,写入后重新上电验证

资料下载

完整资料包含:

  • 51 单片机 Keil C51 工程源码(含 HX711 驱动、LCD1602 驱动、主程序)
  • 原理图 PDF
  • Proteus 仿真工程文件
  • 测试视频
  • 详细设计文档

通过网盘分享的文件:嵌入式-基于51单片机的智能电子秤设计(HX711、LCD1602、按键) 链接: https://pan.baidu.com/s/1NER94ot35afrAXCsLxPiqw?pwd=3c3r 提取码: 3c3r