51单片机电子秤系列weight
1. 引言这是一套基于STC89C52REGX52.H的智能称重分拣系统核心硬件包括HX71124 位高精度 A/D 转换芯片负责读取称重传感器电阻应变式的原始数据DS1302实时时钟芯片用于记录每次称重的日期与时间AT24C02I²C 接口的 EEPROM用于断电保存累计合格数、次品数、标准重量、误差阈值等关键参数LCD1602两行 16 字符液晶屏用于人机交互显示蜂鸣器 LED超重/异常报警输出。本文从代码实现角度逐段讲解这段代码的工作原理、数据流向与各模块的协作方式帮助你彻底读懂这套称重分拣系统的每一行代码。文末附有函数职责总览表与状态机流程图方便你快速把握全局。2. 系统整体架构与模块划分2.1 硬件连接概览外设模块接口类型与单片机连接作用HX711自定义 GPIO 时序P 口SCK/DOUT读取称重传感器原始值DS1302三线串行RST/SCLK/IO提供实时时钟AT24C02I²CSCL/SDA掉电保存统计数据LCD1602并行 8 位P0/P2 等显示模式、重量、时间蜂鸣器GPIO 输出任意 I/O超重报警LEDGPIO 输出P2.4超重指示2.2 软件模块划分MODE 1MODE 2MODE 3MODE 4是否main() 主循环mode 判断Display_M1 时间显示Display_M2 称重超重报警Display_M3 误差检测/批量测量Display_M4 数据统计/串口发送Get_Weight() 读取重量超重?Buzzer_Time(100) 报警LED1 正常3. 代码逐段精讲3.1 全局变量与宏定义sbit LEDP2^4;unsignedintWeight_Maopi0,Range1000,qupi,num;longWeight_Shiwu0;unsignedcharnum_Store,Weight_Store_Num0,mode,m4;unsignedcharERROR1,Bad_Num1,Keynum,TimeSetSelect7,TimeSetFlashFlag;unsignedcharWeight_Shiwu_Flag1,num_Flag,Weight_Shiwu_Flag2;unsignedintWeight_Standard1,FanWei_Max,FanWei_Min;intWeight_Standard200;chartemp,m3,ERROR,Bad_Num,sum,Month,Day,Hour,Minute,m3_Flag;unsignedchari,Weight_Flag,KeynumFlag1,k8,m3_qingling;floatT;#defineGapValue426.04讲解要点Weight_Maopi毛皮重量与qupi去皮值是两个容易混淆的变量前者是 HX711 原始读数后者是去皮后的偏移量二者在Get_Weight()中分别承担「零点偏移」与「去皮」两个不同阶段的补偿。Weight_Shiwu用long是因为 HX711 原始值可达 24 位有符号数unsigned int16 位会溢出。GapValue是标定系数注释已说明不同传感器需单独校准——它决定了原始 A/D 值到克数的换算比例是称重系统能否准确的关键参数。### 3.2 去皮函数Get_Maopi()voidGet_Maopi(){qupiWeight_Shiwu;}逻辑分析该函数把当前净重存入qupi作为去皮基准。它依赖Weight_Shiwu已被Get_Weight()更新过因此调用顺序很关键——必须先执行Get_Weight()得到当前重量再调用Get_Maopi()记录去皮值后续称重时Get_Weight()会减去该值得到净重。3.3 重量读取与超重判断Get_Weight()voidGet_Weight(){Weight_ShiwuHX711_Read();Weight_ShiwuWeight_Shiwu-Weight_Maopi;Weight_Shiwu(unsignedint)((float)(Weight_Shiwu)/GapValue)-qupi;Weight_Shiwu-18600;if(Weight_Shiwu0||Weight_Shiwu5000){Weight_Shiwu0;}if(Weight_Shiwu0Weight_Shiwu5000){if(Weight_ShiwuRangemode2){Buzzer_Time(100);LED0;}elseif(mode2Weight_ShiwuRange){LED1;}}}逐行讲解代码行作用潜在问题HX711_Read()读取 24 位原始 A/D 值需确认返回类型是有符号还是无符号- Weight_Maopi减去毛重零点偏移Weight_Maopi初始为 0首次需先标定(float)/GapValue原始值 → 克数换算GapValue需按传感器实测标定- qupi去皮偏移与Weight_Maopi功能重叠易混淆- 18600经验补偿值硬编码魔法数建议改为宏定义并注释来源5000归零超量程保护量程上限写死建议用宏MAX_WEIGHT关键点说明18600是经验补偿值用于修正传感器零点漂移属于硬编码常量理解时需结合具体传感器特性量程上限5000是超量程保护阈值超过该值重量被强制归零避免异常读数超重判断仅在mode2称重模式下生效其他模式不触发报警。### 3.4 时间设置与显示TimeSet()/Timeshow()TimeSet()是状态机式的按键处理Keynum1切换当前编辑的时间字段年→月→日→时→分→秒循环Keynum5当前字段加 1并做边界回绕如月份 1–12、日期按大小月/闰年判断Keynum6当前字段减 1同样做边界回绕。亮点闰年判断DS1302_Time[0]%40已实现逻辑完整。实现细节大小月判断通过查表或分支实现日期边界按月份天数回绕按键处理为单次触发未做消抖与长按加速。### 3.5 数据存储AT24C02_*系列voidAT24C02_Writebyte_Data(){AT24C02_Writebyte(0,sum);Delay(5);AT24C02_Writebyte(1,Bad_Num);Delay(5);// ... 共 10 个字节}存储布局表EEPROM 地址存储内容数据类型说明0x00sumunsigned char累计合格数0x01Bad_Numunsigned char累计次品数0x02–0x03Weight_Standardint低/高字节标准重量0x04ERRORunsigned char误差阈值0x05–0x08月/日/时/分unsigned char最后称重时间0x09m3_Flagunsigned char模式 3 标志写入机制说明每次写 10 个字节都带Delay(5)可改为「先写后校验读回」建议增加**校验和checksum**字节防止掉电写入不完整导致数据损坏AT24C02_Writebyte_qingling_data()与AT24C02_Writebyte_qingling()功能几乎重复可合并为一个函数并加参数。3.6 显示函数族Display_*函数名显示内容适用模式Display_M1()MODE 1 时间占位模式 1Display_M2()MODE 2 MAX 当前重量模式 2Display_M3()MODE 3 ERROR 标准重量模式 3 设置Display_M3_Measure()MODE 3 NUM 当前重量模式 3 测量Display_M3_Store()“save data …”模式 3 保存Display_M4_Standard()Weight ERROR模式 4 查看标准Display_M4_Num()SUM BadNum模式 4 统计Display_M4_Time()最后称重时间模式 4 时间Display_M4_Send()“SEND DATA ?”模式 4 确认发送Display_M4_successful()“send successfully”模式 4 发送成功设计评价每个显示函数职责单一、命名清晰是这段代码中结构最规范的部分值得保持。6. 案例补充一个完整的称重分拣场景场景某小型电子厂需要对电阻进行重量分拣标准重量 200g误差 ±5g。操作流程上电→ 系统自动读取 AT24C02 中保存的标准重量 200g、误差 5g模式 2 称重→ 放上电阻LCD 显示实时重量超重判断→ 若 205g蜂鸣器报警、LED 亮判定为次品模式 3 批量测量→ 连续测量 10 个自动统计合格/次品数模式 4 查看统计→ 显示 SUM8、BadNum2并通过串口发送到上位机掉电保护→ 数据自动存入 AT24C02下次上电可恢复。串口输出示例last time: 10-11 20:27 last standard: error: 5 weight: 0200 last data: sum: 008 bad: 0027. 函数职责总览表函数名所属模块职责依赖Get_Maopi()称重记录去皮值Weight_ShiwuGet_Weight()称重读取并换算重量、超重报警HX711、蜂鸣器、LEDTimeshow()时间读取 DS1302 并刷新 LCDDS1302、LCDTimeSet()时间按键设置时间含闰年判断按键、DS1302AT24C02_Readbyte_Data()存储从 EEPROM 读回全部参数AT24C02AT24C02_Writebyte_Data()存储保存全部参数到 EEPROMAT24C02Display_M1~M4_*()显示各模式界面刷新LCD1602UART_Send_num()通信串口发送统计结果UART8. 总结这段代码功能完整、模块划分清晰尤其是显示函数族和 AT24C02 存储设计值得肯定。主要改进空间集中在消除魔法数用宏定义替代硬编码收敛全局变量用结构体或状态机封装补齐边界处理按键消抖、变量类型、初始化增加数据校验提升掉电可靠性。如果你需要我可以进一步把TimeSet()重构为查表法、为Get_Weight()增加数字滤波滑动平均、或补充完整的main()主循环框架。

相关新闻

离散元分析(DEM)和机器学习(Machine Learning, ML)

离散元分析(DEM)和机器学习(Machine Learning, ML)

文章目录1. 机器学习辅助2PFV-DEM参数标定2. GNN DEM:最值得作为创新点3. AI预测非饱和土土水特征曲线4. 深度学习识别SEM/MIP细观结构 → DEM胶结模型5. 论文最推荐的AI路线第一阶段第二阶段第三阶段(创新)第四阶段最终可以形成的论文题目方…

2026/10/15 3:57:45 阅读更多 →
第五章 检索增强与知识库

第五章 检索增强与知识库

前面四章已经让 Agent 具备了工具调用、多步规划、错误恢复和记忆能力。但它还有一个重要限制:模型只能依靠训练数据和当前上下文回答问题。如果用户问的是公司内部文档、产品手册、私有知识库,或者最近刚发生的事件,模型就可能答不上来&…

2026/10/15 3:57:45 阅读更多 →
东北农业大学转专业怎么申请?2025级条件、流程和热门学院考核一文讲透

东北农业大学转专业怎么申请?2025级条件、流程和热门学院考核一文讲透

东北农业大学2025级本科生集中转专业安排在2026年春季进行,3上旬起线上填报,每名学生限报1个专业志愿。申请人须未受学校纪律处分、已修课程全部及格,补考及格也可参加;通过学校资格审核后,再按目标学院规则参加考核。…

2026/10/15 3:57:45 阅读更多 →

最新新闻

Java反射机制原理、优化与实践指南

Java反射机制原理、优化与实践指南

1. 反射机制的本质与核心价值Java反射是运行时动态获取类信息并操作类成员的能力集合。与静态编码不同,反射允许程序在编译期未知具体类的情况下,通过Class对象完成方法调用、字段存取等操作。这种能力源于JVM的类型信息保留机制——即使经过编译擦除&am…

2026/10/15 6:56:51 阅读更多 →
QT Socket 客户端服务端一体化调试工具:原理、实现与避坑指南

QT Socket 客户端服务端一体化调试工具:原理、实现与避坑指南

简介:本资源是一份基于Qt的TCP网络编程实战项目源码,面向具备一定C与Qt基础、希望掌握网络通信开发的初学者和进阶开发者。项目将TCP客户端与服务器端功能集成于同一GUI程序,借助Qt Network模块中的QTcpSocket与QTcpServer类,演示…

2026/10/15 6:56:51 阅读更多 →
空间站锂离子电池技术解析与应用前景

空间站锂离子电池技术解析与应用前景

1. 项目背景与核心价值在太空探索领域,能源系统堪称航天器的"心脏"。最近我国空间站开展的新型锂离子电池在轨实验,标志着空间能源技术迈入新阶段。作为一名曾参与卫星电源系统设计的工程师,我深知这项实验对后续深空探测任务的意义…

2026/10/15 6:56:51 阅读更多 →
PyTorch深度学习实战:动态图、自动求导与训练调优全解析

PyTorch深度学习实战:动态图、自动求导与训练调优全解析

1. 为什么“PyTorch”这三个字值得反复咀嚼如果你最近在技术社区里闲逛,或者翻看各类招聘需求,会发现“PyTorch”这个词的出现频率高得离谱。它不只是一个深度学习框架的名字,更像是一张通行证——从学术论文的代码复现,到工业级推…

2026/10/15 6:56:51 阅读更多 →
C语言经典练手题:水仙花数拆解循环与取余的巧妙应用

C语言经典练手题:水仙花数拆解循环与取余的巧妙应用

这两年我一直在坚持整理一套C语言入门练手题,专栏名字就叫“菜鸟编程C语言100例”。前面三道题分别过了一遍变量与数据类型、格式化输出、if-else分支判断,到了第四题,我想着该让循环结构登场了。但纯写一个“for循环讲解”又太枯燥&#xff…

2026/10/15 6:56:51 阅读更多 →
SpringBoot+Vue轻量级博客系统设计与实现

SpringBoot+Vue轻量级博客系统设计与实现

1. 项目概述:SpringBootVue轻量级博客系统设计去年帮学弟评审毕业设计时,发现市面上很多博客系统要么功能冗余,要么扩展性差。于是我们决定用SpringBootVue搭建一个轻量级但五脏俱全的在线创作社区。这个系统最核心的特点是采用前后端分离架构…

2026/10/15 6:55:51 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →