基于51单片机的电子秤

基于51单片机的电子秤

前言

电子秤是将检测与转换技术、计算机技术、信息处理、数字技术等技术综合一体的现代新型称重仪器。它与我们日常生活紧密结合息息相关。电子称主要以单片机作为中心控制单元,通过称重传感器进行模数转换单元,在配以键盘、显示电路及强大软件来组成。电子称不但计量准确、快速方便,更重要的自动称重、数字显示,对人们生活的影响越来越大,广受欢迎。

准备

硬件设计

  • 硬件设计框图
    硬件设计框图
  • 原理图设计
    原理图设计

软件设计

  • 软件设计框图
    软件流程框图
  • 源码

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;		
} 

实物和工艺

  1. 焊接实物图
    焊接正面图
    焊接背面图
  2. 操作演示
    没有上传视频,等哪天上传了,再放!
    实物演示
需要完整源码可以留言邮箱
发布了31 篇原创文章 · 获赞 22 · 访问量 9502

猜你喜欢

转载自blog.csdn.net/richowe/article/details/103084319