深入解析:基于51单片机电子称称重压力检测阈值报警系统设计
基于51单片机电子称称重压力检测阈值报警系统设计
1 功能介绍
本设计是一套基于STC89C52单片机的电子称重系统,集成了LCD1602液晶显示电路、HX711称重传感器电路、蜂鸣器报警电路、按键电路和电源电路。系统主要用于实现重量的实时采集、显示与超重报警,并支持阈值设置和掉电保存功能。
其主要功能如下:
- 实时重量显示:LCD1602液晶屏实时显示当前重量和用户设定的报警阈值。
- 阈值设置功能:用户通过按键设置报警阈值,范围为0–5000g,满足日常称重和检测需求。
- 超重报警:当实际重量超过设定阈值时,系统自动驱动蜂鸣器发出报警声。
- 高精度称重:采用HX711称重传感器模块,量程为0–5kg,转换精度高,能够满足小范围高精度测量。
- 掉电数据保存:设置的阈值存储于EEPROM中,即便系统掉电重启后也能保留用户设定数据,避免频繁设置的麻烦。
该系统适用于家庭、实验室、小型商业场合的称重场景,同时具有良好的学习和实验价值,能够帮助电子技术初学者掌握单片机与传感器结合的应用开发方法。
2 系统电路设计
系统电路由多个功能模块组成,下面分别进行详细介绍。
2.1 STC89C52单片机电路
STC89C52单片机是本设计的核心控制单元,基于8051内核,具备丰富的I/O接口,能够轻松实现对液晶显示、传感器数据采集、按键输入和蜂鸣器输出的综合控制。其主要作用包括:
- 接收HX711传感器传输的重量数据;
- 驱动LCD1602液晶显示模块;
- 处理用户按键输入,实现阈值调整;
- 控制蜂鸣器输出报警信号;
- 调用EEPROM存储模块,实现掉电数据保存。
单片机电路需要外接晶振、复位电路和电源管理电路,保证其正常稳定运行。
2.2 LCD1602液晶显示电路
LCD1602是一款常用的字符型液晶显示模块,能够显示两行,每行16个字符。系统中LCD1602用于实时显示两类信息:
- 第一行显示称重传感器采集的实时重量数据,单位为克(g);
- 第二行显示当前用户设置的报警阈值。
通过单片机的I/O端口与LCD1602相连,采用4位数据通信方式,减少了占用引脚数量,同时满足显示需求。
2.3 HX711称重传感器电路
HX711是专用于称重系统的高精度24位A/D转换器模块,能够将传感器输出的微弱模拟电压信号转换为数字信号,并传送给单片机进行处理。其主要特性包括:
- 内部集成稳压电路与时钟电路,外围元件少,简化了电路设计;
- 高分辨率,能够满足0–5000g的重量采集精度要求;
- 与单片机的接口仅需两根信号线(DT和SCK),通信简单可靠。
HX711模块与应变片式传感器结合,可实现稳定精准的重量测量。
2.4 蜂鸣器报警电路
蜂鸣器电路由单片机直接驱动。当检测到实际重量超过用户设定的阈值时,单片机输出高电平信号,蜂鸣器发出报警声,提醒用户重量已超出设定范围。蜂鸣器选用有源蜂鸣器,电路简单,可靠性高。
2.5 按键电路
系统设置有两个按键:
- 增加键:用于增加报警阈值;
- 减少键:用于降低报警阈值。
按键采用独立式接法,每个按键均通过一个I/O口与单片机连接。软件程序中设计了消抖处理机制,保证用户操作的准确性和稳定性。
2.6 电源电路
系统统一采用+5V直流供电,保证STC89C52单片机、LCD1602液晶、HX711模块以及蜂鸣器等器件正常运行。为了提升稳定性,电源电路增加了滤波电容和稳压芯片,以减少电压波动对系统工作的影响。
3 程序设计
程序设计是实现系统功能的核心部分,涵盖初始化、重量采集、阈值设置、LCD显示、报警控制和EEPROM存储。
3.1 主程序框架
主程序流程如下:
- 系统初始化,包括LCD、HX711、EEPROM、蜂鸣器和按键;
- 循环读取HX711传感器数据,计算重量;
- 显示重量和阈值信息;
- 检测重量与阈值的比较结果,决定是否触发报警;
- 处理按键输入,调整阈值,并存储到EEPROM。
#include <reg52.h>#include "lcd1602.h"#include "hx711.h"#include "eeprom.h"unsigned long weight = 0;// 当前重量unsigned int threshold = 1000;// 默认阈值1000gvoid main() {LCD_Init();HX711_Init();EEPROM_Init();threshold = EEPROM_Read(0x00);// 掉电数据恢复while(1) {weight = HX711_Read();LCD_ShowString(1,1,"Weight:");LCD_ShowNum(1,8,weight,5);LCD_ShowString(2,1,"Thresh:");LCD_ShowNum(2,8,threshold,5);if(weight > threshold) {P2 = 0x01;// 蜂鸣器报警} else {P2 = 0x00;// 关闭蜂鸣器}Key_Scan();// 按键处理}}
3.2 HX711数据采集程序
HX711通过时钟信号与单片机通信,采集重量数据。
#include <reg52.h>sbit HX711_DT = P3^2;sbit HX711_SCK = P3^3;long HX711_Read(void) {long count=0;unsigned char i;HX711_DT=1;HX711_SCK=0;while(HX711_DT);for(i=0;i<24;i++) {HX711_SCK=1;count=count<<1;HX711_SCK=0;if(HX711_DT) count++;}HX711_SCK=1;count=count^0x800000;HX711_SCK=0;return(count/100);// 转换为克}
3.3 LCD1602显示程序
LCD用于显示实时重量和阈值信息:
void LCD_Init() {
LCD_WriteCmd(0x38);
LCD_WriteCmd(0x0C);
LCD_WriteCmd(0x06);
LCD_WriteCmd(0x01);
}
void LCD_ShowNum(unsigned char row, unsigned char col, unsigned int num, unsigned char len) {
unsigned char i;
LCD_SetCursor(row,col);
for(i=len;i>
0;i--) {
LCD_WriteData(num/10000%10+'0');
}
}
3.4 按键设置与EEPROM存储
按键用于调整报警阈值,数据存储在EEPROM中。
sbit KEY_UP = P1^0;
sbit KEY_DOWN = P1^1;
void Key_Scan(void) {
if(KEY_UP==0) {
threshold += 10;
EEPROM_Write(0x00, threshold);
while(KEY_UP==0);
}
if(KEY_DOWN==0) {
if(threshold >
10) threshold -= 10;
EEPROM_Write(0x00, threshold);
while(KEY_DOWN==0);
}
}
EEPROM存储读写函数:
unsigned int EEPROM_Read(unsigned char addr) {
return *((unsigned int code*)addr);
}
void EEPROM_Write(unsigned char addr, unsigned int dat) {
unsigned int code *p = (unsigned int code*)addr;
*p = dat;
}
4 总结
本设计利用STC89C52单片机结合HX711高精度称重模块、LCD1602液晶显示、蜂鸣器和EEPROM,构建了一套功能完整的电子称重系统。系统能够实现实时重量采集与显示、阈值设置与报警、掉电数据保存等功能,具有电路简单、实用性强、稳定性高等优点。
该系统不仅适合日常生活和实验室场景的称重与安全提醒,也为电子技术学习者提供了一个综合性较强的单片机应用案例,有助于掌握传感器数据采集、阈值判断、报警处理以及数据存储等核心技术。