• 方案介绍
  • 相关推荐
申请入驻 产业图谱

基于单片机的去皮计价与超重报警电子秤设计与实现

10/14 10:20
688
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

基于单片机的去皮计价与超重报警电子秤设计与实现


1. 系统功能概述

本设计以单片机为核心控制器,构建了一个具有去皮计价与超重报警功能的智能电子秤系统。系统通过高精度称重传感器采集重量信号,经放大与模数转换后由单片机处理,实现重量测量、去皮计算、价格计算与报警提示等功能。该系统在传统电子秤的基础上增加了智能化的参数设置、自动判断与交互显示功能,具有较高的实用价值与技术可扩展性,广泛适用于超市称重结算、小型工业测量及实验仪器等领域。

系统主要功能包括:

  1. 重量测量功能:利用高精度 HX711称重传感器模块,实现0~10kg范围内的重量测量,确保数据的准确性与稳定性。
  2. 去皮功能:通过按键操作实现容器去皮,自动将当前重量设置为零点,以便后续称量显示净重。
  3. 价格计算功能:用户可通过按键输入商品单价,系统自动计算并显示总价,实现智能计价功能。
  4. 液晶显示与交互功能:采用 128×64汉字液晶屏 实时显示重量、单价、金额及系统状态信息,交互友好直观。
  5. 超重报警功能:当检测重量超过设定上限时,系统自动启动蜂鸣器与指示灯报警,提示超载风险。

本系统具有高精度、高可靠性、操作便捷、可视化程度高等特点,特别适用于对称重结果与价格显示要求较高的场景。

点击链接下载资料:https://download.csdn.net/download/m0_51061483/92081456


2. 系统电路设计

整个系统由以下几个功能模块构成:

  • 单片机最小系统模块
  • 称重采集模块(HX711)
  • 按键输入与去皮设置模块
  • 显示模块(12864液晶屏)
  • 报警模块(蜂鸣器+LED)
  • 电源模块

各模块之间通过总线信号相互连接,形成完整的信号采集、处理与输出体系。


2.1 单片机最小系统模块

本系统选用 STC89C52单片机 作为主控芯片。该芯片基于MCS-51内核,具有较强的运算能力和良好的外围接口资源,内部含有丰富的I/O端口,可满足多模块控制需求。
最小系统电路主要包括以下部分:

  • 晶振电路:采用12MHz晶振,确保系统稳定运行;
  • 复位电路:使用RC复位结构,系统上电自动复位;
  • 电源输入与稳压电路:通过7805芯片提供稳定的+5V电源供整个系统使用;
  • I/O分配设计:P1口用于连接HX711信号输入,P2口连接LCD12864,P3口用于按键和报警控制。

单片机在系统中承担“中枢”功能,负责重量数据的采集、滤波、运算、显示控制以及报警逻辑判断。


2.2 称重采集模块(HX711)

称重信号的采集是整个系统的核心部分。为实现高精度测量,本系统采用 HX711高精度24位A/D转换模块,其与应变式称重传感器配合使用,能够实现稳定的微小信号采集。

HX711模块的主要特点如下:

传感器将机械变形转换为电信号,经HX711放大与模数转换后输出数字信号。单片机通过时钟脉冲读取数据,并对结果进行平均滤波,以消除抖动和噪声干扰,从而获得精准的重量值。

在设计中,HX711的PD_SCK引脚接P1.0,DOUT引脚接P1.1。模块输出的数字信号经过处理后再由单片机计算出实际重量值。


2.3 按键输入与去皮设置模块

系统通过按键实现人机交互操作,包括去皮、单价设置和确认输入三大功能。

主要按键功能如下:

  • TARE(去皮键):将当前称重值设为零点,实现容器重量的自动去除;
  • SET(设置键):进入单价输入模式;
  • ADD(增加键)/SUB(减少键):调整单价数值;
  • OK(确认键):确认输入并返回主界面。

按键电路采用独立式接法,每个按键对应一个独立I/O口,并配有上拉电阻,程序中通过延时消抖技术实现可靠识别。


2.4 显示模块(12864液晶显示屏)

显示模块采用 128×64汉字液晶屏,具备显示字符、图形及汉字的能力,适合展示重量、单价与金额等多参数信息。
LCD通过并行通信方式与单片机连接,RS、RW、EN控制信号分别连接P2口的低三位。

显示界面设计简洁直观,典型显示内容如下:

重量:2.356 kg
单价:12.00 元/kg
金额:28.27 元
状态:正常

当用户进行去皮操作或输入单价时,液晶会实时更新对应界面内容。


2.5 报警模块(蜂鸣器+LED)

为防止超载,本系统设计了声光报警模块。
当称重值超过系统设定上限(如10kg)时,蜂鸣器发出报警声,同时红色LED闪烁提示。报警电路三极管驱动,能够提供足够电流驱动蜂鸣器与LED灯。
报警阈值可在程序中修改,系统可通过设置不同的安全等级应用于多种环境。


2.6 电源模块

系统使用直流5V供电。对于HX711与液晶模块,为确保测量精度与显示稳定性,电源模块增加滤波电容(100μF+0.1μF并联)。
当输入电源波动较大时,系统也能保持稳定运行,防止ADC采样误差与LCD闪烁现象。


3. 系统程序设计

程序设计是系统实现的核心部分,主要包括数据采集、滤波处理、按键操作、去皮逻辑、价格计算、显示更新及报警控制等模块。

系统采用C语言在Keil环境下编写,使用模块化设计思想,提高代码的可读性与扩展性。


3.1 主程序设计

主程序负责系统初始化与主循环逻辑,包括称重采集、价格计算、报警检测与LCD更新显示。程序结构如下:

#include <reg52.h>
#include "lcd12864.h"
#include "hx711.h"
#include "key.h"

#define BEEP P3^7
#define LED  P3^6

float weight = 0;
float tare = 0;
float price = 0;
float total = 0;
float limit = 10.0;

void delay(unsigned int t) {
    while(t--);
}

void main() {
    LCD_Init();
    HX711_Init();
    Key_Init();
    LCD_ShowString(1,0,"智能电子秤系统");

    while(1) {
        weight = HX711_ReadWeight() - tare;
        if(weight < 0) weight = 0;
        total = weight * price;

        LCD_ShowWeight(weight);
        LCD_ShowPrice(price);
        LCD_ShowTotal(total);

        if(weight > limit) {
            BEEP = 1;
            LED = 1;
        } else {
            BEEP = 0;
            LED = 0;
        }

        Key_Scan();
        delay(500);
    }
}

该程序在主循环中不断采样并更新LCD显示。当检测到超重时,立即触发报警逻辑。


3.2 称重采集模块程序(HX711驱动)

HX711通过两线接口与单片机通信,采用时钟同步方式读取24位数据。以下为典型采样函数:

#include <reg52.h>

sbit HX711_DOUT = P1^1;
sbit HX711_SCK  = P1^0;

void HX711_Init() {
    HX711_SCK = 0;
}

long HX711_Read() {
    unsigned long count;
    unsigned char i;
    HX711_DOUT = 1;
    delay(1);
    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 ^= 0x800000;
    HX711_SCK = 0;
    return count;
}

float HX711_ReadWeight() {
    long data = HX711_Read();
    return (float)(data / 10000.0); // 转换为重量值
}

通过读取多次数据并取平均值,可有效消除噪声,提升称重稳定性。


3.3 按键处理与去皮逻辑模块

按键模块实现单价设置与去皮功能,代码如下:

#include <reg52.h>
#include "lcd12864.h"

extern float tare;
extern float price;

void Key_Scan() {
    if(P3_0 == 0) {     // 去皮键
        delay(1000);
        if(P3_0 == 0) tare = HX711_ReadWeight();
    }
    if(P3_1 == 0) {     // 设置单价
        delay(1000);
        if(P3_1 == 0) price += 0.5;
        if(price > 99.9) price = 0;
    }
}

用户按下去皮键后,当前称重值将被存储为容器重量,在显示时自动减去该值,从而实现净重计算。


3.4 显示模块程序

LCD显示模块用于显示重量、单价、总价与系统状态,显示函数如下:

void LCD_ShowWeight(float w) {
    LCD_SetXY(0,1);
    LCD_WriteString("重量:");
    LCD_ShowFloat(w,2);
    LCD_WriteString(" kg");
}

void LCD_ShowPrice(float p) {
    LCD_SetXY(0,2);
    LCD_WriteString("单价:");
    LCD_ShowFloat(p,2);
    LCD_WriteString(" 元/kg");
}

void LCD_ShowTotal(float t) {
    LCD_SetXY(0,3);
    LCD_WriteString("金额:");
    LCD_ShowFloat(t,2);
    LCD_WriteString(" 元");
}

该模块实现了动态刷新显示,使数据实时更新,保证用户操作的直观性。


3.5 报警模块程序

报警模块用于超重时的声光提示,代码如下:

void Alarm_Check(float weight) {
    if(weight > 10.0) {
        BEEP = 1;
        LED = 1;
        LCD_ShowString(0,0,"警告:超重!");
    } else {
        BEEP = 0;
        LED = 0;
    }
}

报警功能可根据需要调整阈值,并支持延时关闭或手动复位。


4. 系统总结

本系统通过STC89C52单片机与HX711高精度称重模块的配合,实现了重量检测、去皮、计价与报警等多项功能。系统结构清晰、精度高、可靠性强,适用于多种场合下的称重与计价任务。

主要特点总结如下:

  • 测量精度高:HX711具备24位A/D转换精度,配合滤波算法能有效消除噪声干扰;
  • 操作简便:按键设置直观,支持一键去皮与单价快速输入;
  • 显示直观:汉字液晶界面信息清晰,实时更新数据;
  • 报警功能完善:超重声光报警,保障系统使用安全;
  • 可扩展性强:系统预留通信接口,可与上位机无线模块结合,实现远程监控

综上所述,本设计实现了一款功能完备、性能稳定的智能电子秤系统,在日常商业与工业应用中具有广泛的应用前景。

相关推荐