基于51单片机的电子秤
前言
电子秤是将检测与转换技术、计算机技术、信息处理、数字技术等技术综合一体的现代新型称重仪器。它与我们日常生活紧密结合息息相关。电子称主要以单片机作为中心控制单元,通过称重传感器进行模数转换单元,在配以键盘、显示电路及强大软件来组成。电子称不但计量准确、快速方便,更重要的自动称重、数字显示,对人们生活的影响越来越大,广受欢迎。
准备
- 材料
- Proteus8绘图软件
- keil uv4软件
- stc-isp烧录软件
硬件设计
- 硬件设计框图
- 原理图设计
软件设计
- 软件设计框图
- 源码
main.c主程序
#include "main.h"
#include "HX711.h"
/////共阴数码管段选/////
unsigned char table[22]={0x3F,0x06,0x5B,0x4F,0x66,
0x6D,0x7D,0x07,0x7F,0x6F,
0x77,0x7C,0x39,0x5E,0x79,0x71,
0x40,0x38,0x76,0x00,0xff,0x37};//'-',L,H,灭,全亮,n 16-21
float m__1=3.50; //调整值
unsigned long HX711_Buffer = 0;
unsigned int Weight_Maopi = 0,Weight_Shiwu = 0;
char Price_Count = 0;
unsigned char KEY_NUM = 0,j=0;
unsigned char Price_Buffer[3] = {0x00,0x00,0x00};
unsigned long Money = 0;
bit Flag_OK = 0;
void delay(unsigned int ms)
{
unsigned char x;
for(ms;ms>0;ms--)
for(x=10;x>0;x--);
}
void display()//显示重量 单位g
{
w1=0;P0=table[Weight_Shiwu/1000];delay(10); //第1位
P0=0x00;w1=1;delay(1);
w2=0;P0=table[Weight_Shiwu%1000/100];delay(10);//第2位
P0=0x00;w2=1;delay(1);
w3=0;P0=table[Weight_Shiwu%100/10]; delay(10);//第3位
P0=0x00;w3=1;delay(1);
w4=0;P0=table[Weight_Shiwu%10];delay(10);//第4位
P0=0x00;w4=1;delay(1);
}
//主函数
void main()
{
Get_Maopi(); //称毛皮重量
while(1)
{
if( Flag_OK == 0)
{
Get_Weight(); //称重
for(j=0;j<100;j++)display();//显示重量 单位g
//显示当前重量
}
if(key1==0)
{
delay(10);
if(key1==0) //消抖
{
while(!key1);
Get_Maopi(); //去皮
}
}
if(key2==0)
{
delay(10);
if(key2==0) //消抖
{
while(!key2); // 微调重量-
m__1=m__1+0.10;
if(m__1>=5.10)m__1=5.00;
}
}
if(key3==0)
delay(10);
if(key3==0) //消抖
{
while(!key3); // 微调重量+
m__1=m__1-0.10;
if(m__1<=1.10)m__1=2.50;
}
}
}
}
//称重
void Get_Weight()
{
HX711_Buffer = HX711_Read();
HX711_Buffer = HX711_Buffer/100;
if(HX711_Buffer > Weight_Maopi)
{
Weight_Shiwu = HX711_Buffer;
Weight_Shiwu = Weight_Shiwu - Weight_Maopi; //获取实物的AD采样数值。
Weight_Shiwu = (unsigned int)((float)Weight_Shiwu/m__1+0.05); //计算实物的实际重量
//因为不同的传感器特性曲线不一样,因此,每一个传感器需要矫正这里的4.30这个除数。
//当发现测试出来的重量偏大时,增加该数值。
//如果测试出来的重量偏小时,减小改数值。
//该数值一般在4.0-5.0之间。因传感器不同而定。
//+0.05是为了四舍五入百分位
Buzzer = 1; //关闭警报
}
// else if(HX711_Buffer < Weight_Maopi - 30)
// {
// Buzzer = 0; //负重量报警
// }
// else if(HX711_Buffer > Weight_Maopi + 24970) //大于5Kg的最大量程,报警
// {
// Buzzer = 0;
// }
if(Weight_Shiwu > 5000 )
{
Buzzer = 0;
}
else
{
Buzzer = 1;
}
if(Weight_Shiwu < 5)Weight_Shiwu=0;
}
//获取毛皮重量
void Get_Maopi()
{
HX711_Buffer = HX711_Read();
Weight_Maopi = HX711_Buffer/100;
}
实物和工艺
- 焊接实物图
- 操作演示
没有上传视频,等哪天上传了,再放!