STC89C52+HX711完成电子秤设计

一、项目背景

电子秤是一种通过传感器测量物体质量的设备,被广泛应用于商业和工业领域。传统的机械秤已经逐渐被电子秤取代,因为电子秤具有更高的精度、更方便的使用和更多的功能。

本项目利用STC89C52单片机和HX711模块完成电子秤设计,具有去皮功能、累加功能以及LCD1602显示屏显示实时称重数据。通过HX711模块实现对物品重量的精确测量;支持去皮功能,可以在测量前将容器的重量减去,得到净重;具备累加功能,可以记录多次测量结果并进行累加;使用LCD1602显示屏实时显示当前称重数据,方便用户查看。

该电子秤实现了基本称重功能和去皮功能。基本称重功能指的是通过传感器测量物体质量并显示结果。HX711模块连接到电子秤上的传感器,通过读取HX711模块输出的数字信号来获取物体的重量数据。STC89C52单片机通过串行通信协议与HX711模块进行通信,并从中获取到称重数据。然后,通过控制LCD1602显示器,将称重结果以可读的方式显示在LCD屏幕上。用户可以清晰地看到物体的重量。

除了基本称重功能,该电子秤还具有去皮功能。当用户按下独立按键时,系统将自动记录当前的称重值为皮重。之后,无论在物体放置前还是放置后按下独立按键,系统都会自动去除皮重,并显示净重。这样可以方便地进行物体重量的测量,而无需手动计算。

整个系统的核心是STC89C52单片机,负责与HX711模块和LCD1602显示器进行通信,并控制显示内容和去皮功能。该设计不仅简单实用,而且具有良好的可扩展性和稳定性,适用于各种实际应用场景,如商业称重、食品加工等。

image-20230913121655031

image-20230913115026419

二、项目设计思路

【1】硬件设计思路:

本项目采用STC89C52单片机作为核心控制器,HX711模块作为传感器,以及LCD1602显示屏和独立按键作为用户接口。

整个系统的连接方式如下:

将PD_SCK引脚连接到P1.5引脚(中断0),DOUT引脚连接到P1.6引脚(中断1),这两个引脚用于与HX711模块进行SPI通信。LCD1602显示屏数据线DB0-DB7分别连接到P0.0-P0.7引脚,RS(寄存器/数据选择)引脚连接至P2.0引脚,R/W(读写模式选择)引脚连接至P2.1引脚,E(使能)引脚连接至P2.2引脚,这些引脚用于控制LCD1602显示器上的文本显示。独立按键引脚连接至P3.2引脚,用于触发去皮功能。

【2】软件设计思路:

(1)初始化 LCD1602 显示器。设置显示模式、清除显示、光标复位等。

(2)初始化 HX711 模块。通过 SPI 通信协议与模块建立连接,设置增益和偏移量等参数。

(3)建立中断服务程序。P1.5和P1.6引脚在正常工作时,都是高电平状态,但当需要进行SPI通信时,需要向这两个引脚分别输出规定的低电平与高电平。可以通过设置中断服务程序,在需要进行SPI通信的时候向P1.5和P1.6引脚分别输出指定的电平。当SPI通信完成后,恢复高电平状态。

(4)定义数据结构体。在程序中定义一个数据结构体,包含去皮函数的标志位、去皮值以及重量值等变量。当需要对秤进行去皮操作时,可以通过修改该数据结构体中的参数来实现。

(5)测量重量并显示结果。通过调用HX711模块的函数读取传感器的模拟信号,并将其转换为数字信号。然后再通过数学运算计算出物体的重量,并将其转换成字符串的形式依次显示在LCD1602显示屏上的第一行和第二行。

(6)实现去皮功能。当用户按下独立按键时,首先判断是否已经进行过去皮操作,如果没有就记录当前称重值为皮重值。之后,每次测量重量时都从当前重量中减去去皮值,得到净重值。

(7)主程序循环执行。主程序通过延时函数实现循环执行的功能。在这个过程中,不断测量重量并显示结果,同时根据用户输入实现去皮功能。

本项目的硬件设计采用STC89C52单片机、HX711模块、LCD1602显示屏和独立按键。软件设计主要包括初始化程序、中断服务程序、重量测量与显示程序、去皮函数和主程序等部分。通过完美地结合硬件和软件的功能,可以实现电子秤的基本称重和去皮功能,并且具有较高的精度和稳定性。

三、项目代码编写

#include <reg52.h>
#include <intrins.h>// 定义LCD1602相关引脚
sbit RS = P2^0;   // RS引脚
sbit RW = P2^1;   // RW引脚
sbit E = P2^2;    // E引脚
sbit DATA = P0;   // 数据线引脚// 定义HX711相关引脚
sbit PD_SCK = P1^5;   // 时钟引脚
sbit DOUT = P1^6;     // 数据引脚// 定义独立按键引脚
sbit KEY = P3^2;// 定义全局变量
bit tareFlag = 0;     // 去皮操作标志位
long tareValue = 0;   // 去皮值// LCD1602写命令
void LcdWriteCmd(unsigned char cmd) {RS = 0;RW = 0;DATA = cmd;_nop_();E = 1;_nop_();E = 0;_nop_();
}// LCD1602写数据
void LcdWriteData(unsigned char dat) {RS = 1;RW = 0;DATA = dat;_nop_();E = 1;_nop_();E = 0;_nop_();
}// LCD1602初始化
void LcdInit() {LcdWriteCmd(0x38);   // 设置16x2显示模式LcdWriteCmd(0x0c);   // 开启光标并关闭闪烁LcdWriteCmd(0x06);   // 光标右移LcdWriteCmd(0x01);   // 清除显示LcdWriteCmd(0x80);   // 设置显示位置为第一行第一个字符
}// HX711读取数据
long Hx711Read() {unsigned char i;long value = 0;while(DOUT);for (i = 0; i < 24; i++) {PD_SCK = 1;value = value << 1;_nop_();if (DOUT) {value++;}PD_SCK = 0;_nop_();}for (i = 0; i < 1; i++) {PD_SCK = 1;_nop_();PD_SCK = 0;_nop_();}return value;
}// 延时函数
void Delay(unsigned int n) {unsigned int i, j;for (i = n; i > 0; i--) {for (j = 110; j > 0; j--);}
}// 显示重量和去皮值
void DisplayWeight(long weight) {unsigned char i;unsigned long temp;unsigned char str[] = "Weight:";temp = weight;for (i = 7; i >= 0; i--) {str[7 - i + 7] = temp % 10 + '0';temp /= 10;}for (i = 0; i < 8; i++) {LcdWriteData(str[i]);}if (tareFlag) {unsigned char strTare[] = " Tare:";temp = tareValue;for (i = 7; i >= 0; i--) {strTare[7 - i + 6] = temp % 10 + '0';temp /= 10;}for (i = 0; i < 7; i++) {LcdWriteData(strTare[i]);}}
}// 去皮操作
void Tare() {tareFlag = 1;tareValue = Hx711Read();
}// 主函数
void main() {long weight;LcdInit();   // 初始化LCD1602Delay(5);while (1) {weight = Hx711Read();   // 读取重量if (tareFlag) {weight -= tareValue;   // 计算净重}DisplayWeight(weight);   // 显示重量if (KEY == 0) {Delay(50);if (KEY == 0) {Tare();   // 执行去皮操作while (!KEY);Delay(10);}}}
}

项目代码里实现了HX711传感器读取重量数据,并通过LCD1602模块显示重量信息。在引入头文件和定义相关引脚后,通过全局变量来设置去皮操作的标志位和去皮值。定义了几个辅助函数,包括LCD1602的写命令和写数据函数、LCD1602的初始化函数、HX711传感器读取数据函数以及延时函数。

在主函数中,进行LCD1602的初始化。进入一个无限循环,不断读取HX711传感器的重量数据并显示在LCD上。如果去皮操作的标志位被设置了,会计算净重并显示在LCD上。当检测到一个按键按下时,执行去皮操作,并等待按键释放。

四、总结

本项目是一个基于8051单片机的电子秤程序,利用HX711传感器读取重量数据,并通过LCD1602模块显示重量信息。

在项目实现过程中,进行了硬件的连接,包括将HX711传感器与单片机相连以及将LCD1602模块与单片机相连。然后,通过编写相应的代码来实现功能。

在代码实现中,主要包括了对LCD1602的初始化和写命令、写数据操作的函数定义,以及对HX711传感器的数据读取和显示重量的函数定义。利用全局变量设置了去皮操作的标志位和去皮值,并在主函数中通过循环不断读取HX711传感器的重量数据并进行相应的处理和显示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/176718.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Axure9基本操作

产品经理零基础入门&#xff08;四&#xff09;Axure 原型图教程&#xff0c;2小时学会_哔哩哔哩_bilibili Axure 9 从入门到精通全集&#xff0c;自学必备_哔哩哔哩_bilibili 1. ① 页面对应页面个数&#xff0c;概要对应每个页面的具体内容 ② 文件类型 ③ 备用间隔改为5分…

没有设计经验的新手如何制作一本电子画册?

移动信息时代&#xff0c;电子画册逐渐取代纸质画册&#xff0c;它无需印刷&#xff0c;环保节能&#xff0c;也无需随身携带&#xff0c;通过手机/平板/电脑等设备即可随时在线浏览阅读&#xff0c;十分方便。那没有设计经验的新手如何制作一本这样随身携带方便的电子画册呢&a…

Android WebView专题

WebView 专题 第一个WebView程序&#xff1a;加载远程网址 Layout添加WebView组件&#xff1b; <WebViewandroid:id"id/webView_first"android:layout_width"match_parent"android:layout_height"match_parent"/>初始化组件&#xff0c;加…

理工ubuntu20.04电脑配置记录

8188gu无线网卡配置 首先下载github上的文件&#xff0c;进入文件夹 安装make命令 1. 查看usb无线网卡 sudo lsusb|grep 8188 2. 环境准备 sudo apt-get install git make build-essential git dkms linux-headers-$(uname -r) 3. 编译安装 git clone https://github.com…

揭秘拍卖竞价源码的前沿技术:加密、智能合约与更多

在数字时代的今天&#xff0c;拍卖竞价源码成为了炙手可热的话题。作为该领域的专家&#xff0c;我将带您深入了解这一前沿技术的奥秘。本文将揭示拍卖竞价源码的工作原理、加密技术的应用、智能合约的作用以及其他相关技术。 2. 拍卖竞价源码的工作原理 拍卖竞价源码是一种用…

搭建项目环境,集成ts和jest

前言 开新坑。 斥巨资购入大崔哥的 mini-vue 课程&#xff0c;为了改变自己东一榔头西一棒槌的学习状态&#xff0c;也是因为深刻思考了自己身无长物浑浑噩噩这么多年只会敲代码&#xff0c;别无出路&#xff0c;也只能提升自己继续走技术这条路&#xff0c;那提高技术绕不过…

CTFhub-RCE-远程包含

给咱一个phpinfo那么必然有他的道理 PHP的配置选项allow_url_include为ON的话&#xff0c;则include/require函数可以加载远程文件&#xff0c;这种漏洞被称为"远程文件包含漏洞(Remote File Inclusion RFI)"。 allow_url_fopen On 是否允许打开远程文件 allow_u…

ESP32网络开发实例-将数据保存到InfluxDB时序数据库

将数据保存到InfluxDB时序数据库 文章目录 将数据保存到InfluxDB时序数据库1、InfluxDB介绍与安装3、软件准备4、硬件准备5、代码实现6、InfluxDB数据可视化在本文中,将介绍 InfluxDB 以及如何将其与 ESP32 开发板一起使用。 我们将向展示如何创建数据库桶并将 ESP32 数据发送…

V10chrony服务配置

Chrony简介 Chrony是一个开源自由的网络时间协议 NTP 的客户端和服务器软软件。它能让计算机保持系统时钟与时钟服务器&#xff08;NTP&#xff09;同步&#xff0c;因此让你的计算机保持精确的时间&#xff0c;Chrony也可以作为服务端软件为其他计算机提供时间同步服务。 Ch…

【Java 进阶篇】JQuery 案例:优雅的隔行换色

在前端的设计中&#xff0c;页面的美观性是至关重要的。而其中一个简单而实用的设计技巧就是隔行换色。通过巧妙地使用 JQuery&#xff0c;我们可以轻松地实现这一效果&#xff0c;为网页增添一份优雅。本篇博客将详细解析 JQuery 隔行换色的实现原理和应用场景&#xff0c;让我…

算法通关村第八关-白银挑战二叉树的深度和高度问题

大家好我是苏麟 , 今天说说几道二叉树深度和高度相关的题目 . LeetCode给我们造了一堆的题目&#xff0c;研究一下104、110和111三个题&#xff0c;这三个颗看起来挺像的&#xff0c;都是关于深度、高度的。 最大深度问题 描述 : 二叉树的 最大深度 是指从根节点到最远叶子…

【Redis】Zset有序集合

上一篇&#xff1a; Hash哈希类型 https://blog.csdn.net/m0_67930426/article/details/134382507?spm1001.2014.3001.5502 目录 Zadd Zrange Zcard Zcount Zrem set是一个无序且元素不可重复的集合 而Zset是一个有序的集合,集合里的每个元素都有一个评分&#xff08;…