基于单片机的去皮计价与超重报警电子秤设计与实现
1. 系统功能概述
本设计以单片机为核心控制器,构建了一个具有去皮计价与超重报警功能的智能电子秤系统。系统通过高精度称重传感器采集重量信号,经放大与模数转换后由单片机处理,实现重量测量、去皮计算、价格计算与报警提示等功能。该系统在传统电子秤的基础上增加了智能化的参数设置、自动判断与交互显示功能,具有较高的实用价值与技术可扩展性,广泛适用于超市称重结算、小型工业测量及实验仪器等领域。
系统主要功能包括:
- 重量测量功能:利用高精度 HX711称重传感器模块,实现0~10kg范围内的重量测量,确保数据的准确性与稳定性。
- 去皮功能:通过按键操作实现容器去皮,自动将当前重量设置为零点,以便后续称量显示净重。
- 价格计算功能:用户可通过按键输入商品单价,系统自动计算并显示总价,实现智能计价功能。
- 液晶显示与交互功能:采用 128×64汉字液晶屏 实时显示重量、单价、金额及系统状态信息,交互友好直观。
- 超重报警功能:当检测重量超过设定上限时,系统自动启动蜂鸣器与指示灯报警,提示超载风险。
本系统具有高精度、高可靠性、操作便捷、可视化程度高等特点,特别适用于对称重结果与价格显示要求较高的场景。
点击链接下载资料: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转换精度,配合滤波算法能有效消除噪声干扰;
- 操作简便:按键设置直观,支持一键去皮与单价快速输入;
- 显示直观:汉字液晶界面信息清晰,实时更新数据;
- 报警功能完善:超重声光报警,保障系统使用安全;
- 可扩展性强:系统预留通信接口,可与上位机或无线模块结合,实现远程监控。
综上所述,本设计实现了一款功能完备、性能稳定的智能电子秤系统,在日常商业与工业应用中具有广泛的应用前景。
688