标题: 电子称重秤设计 89C51单片机+HX711(源码+原理图) [打印本页]
作者: cm7626 时间: 2025-6-13 11:25
标题: 电子称重秤设计 89C51单片机+HX711(源码+原理图)
传感器与电路板对接顺序:
红、白、黑、绿 四根线分别依次对应电路板上的 E+、E-、A-、A+ 。
系统供电5V,可使用手机充电器USB接口或电脑USB接口直接供电。
一、日历时间的设置
接通电源后,打开开关,开机默认处于“日历时间模式”。屏幕显示如下图:
在“日历时间模式”下,仅A、B、C、D四个按键有效。
A:设置;依次按下A键,年、月、日、时、分、秒的光标依次闪烁,可通过B、C键调节。
B:加键;按一下,数值加一。
C:减键;按一下,数值减一。
D:查看闹钟;进入“闹钟界面”。
二、闹铃的设置
在闹钟设置界面,依次按下A键,闹铃的:开/关、时、分、秒的光标依次闪烁。
然后可通过B、C键进行调节。
按D键则随时可退出“闹铃设置界面”返回到“日历时间界面”。
三、计价秤功能
在正常显示时间的情况下,按下C键,将切换到到“计价秤模式”,显示界面如下图:
第一行显示重量,单位是kg。
第二行显示“单价P”和“金额M”,单位都是元。
在“计价秤模式”下,16按键全部有效。
数字键介绍
1234567890数字键代表数字,可通过键盘设置P= 的值,数值可精确到0.1g。
设置单价后系统会自动计算出金额M。
A:清零、去皮
B:清除单价P
C:切换到“日历时间模式”
D:切换到“计数秤模式”
四、计数秤功能
在计价秤模式下,按下D键,即切换到“计数秤模式”,显示如下图:
第一行:重量值kg。
第二行:D=单个物品重量值,N=物品个数。
键盘说明:
1234567890数字键代表数字,可通过键盘设置D= 的值,数值可精确到0.1g。
设置单重后系统会自动计算出个数N。
A:清零/去皮
B:清除单重D
C:切换到“日历时间模式”
D:切换到“计数秤模式”
五、系统校准方法:
打开开关,等系统稳定后,在秤盘上放一个固定重量的物体(比如放100个一角硬币320g)。如果系统显示重量不等于这个固定重量(320g),就长按 # 键3秒,然后屏幕的第一行右边会显示出“校准系数”。
校准系数出现以后,可以通过C、D两个键对校准系数进行增大和较小,通过对“校准系数”的调节使得屏幕上重量显示的值正好等于物体的真实重量(320g)。
最后长按 # 键3秒,校准系数消失,校准完成。
电路原理图如下:
单片机源程序如下:
- #include<reg52.h>
- #include <intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar naozhong_en; //闹钟开关位
- sbit bell = P2 ^ 7; //蜂鸣器,低电平响
- /*********************电子秤*******************************/
- unsigned long HX711_Buffer = 0;
- unsigned long Weight_Maopi = 0; //毛皮重量
- long Weight = 0;//重量
- long danjia = 0;//单价
- long zongjia = 0;//总价
- uint com1, com2, temp; //键盘用的到的变量
- uchar com, P_a = 0, P_b = 0, P_c = 0, P_d = 0, m = 0;
- bit a = 0;
- bit jia_shu = 0;
- bit Flag_ERROR = 0;
- void Delay_ms(unsigned int n);
- void Get_Weight();
- void Get_Maopi();
- void display_weight();//显示重量和校准参数
- void delay_3us();//3US的延时程序
- void keyscan_4x4();//矩阵键盘扫描函数
- //hx711 IO设置
- sbit HX711_DOUT = P2 ^ 0;
- sbit HX711_SCK = P2 ^ 1; //IO设置
- void Delay__hx711_us();
- unsigned long HX711_Read(void);
- uint GapValue;//校准参数:GapValue
- //不同的传感器特性曲线不是很一致,每个传感器需矫正这个参数才能测量准确。
- //当测试的重量偏大时,增加该数值。如果测试的重量偏小时,减小改数值。
- uchar flag_24c02;//和24C02通讯是否正常的标志
- sbit sda_24c02 = P1 ^ 7; //定义24C02串行数据线
- sbit scl_24c02 = P1 ^ 6; //定义24C02串行时钟线
- void delay_3us();
- void nack_24c02();//24C02非应答信号
- void stop_24c02();//停止通讯信号
- void star_24c02();//启动信号
- void cack_24c02();//检测应答信号
- void mack_24c02();//发送应答信号
- void w1byte_24c02(uchar byte1);//向24C02写入一字节的数据
- uchar rd1byte_24c02(void);
- void read_24c02();//读数据操作
- void write_24c02();//写入16字节的数据操作
复制代码
PCB:无
仿真: 无
代码:
代码.7z
(574.01 KB, 下载次数: 0)
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |