电子秤称重系统设计,HX711压力传感器,51单片机(Proteus仿真、C程序、原理图、论文等全套资料)

设计要求
1.系统可实现电子秤基本的称重功能(称重范围为0~10Kg,重量误差不大于±0.005Kg);
2.系统应具备键盘输入单价,显示重量,计算总价的功能;
3.单价和总价金额的单位为元,最大金额数值为999.99元,金额误差不大于0.01元;
4.系统超出最大测量范围10Kg时,具有报警指示功能(蜂鸣器、LED灯报警提示);
5.该电子秤设计同时具备去皮功能和重量校准功能;

设计概述
电子秤系统主要由单片机最小系统、数据采集系统、人机交互界面系统、报警系统五大部分组成。

单片机最小系统主要包括AT89C51和经典复位电路;数据采集部分由称重传感器、信号放大和A/D转换部分组成,信号放大和A/D转换部分主要由专用型高精度24位AD转换芯片HX711实现。

人机交互界面为键盘输入和点阵式液晶显示,主要使用4*4矩阵键盘和1602液晶显示器,可以方便的输入数据和直观的显示数据;报警系统由蜂鸣器和LED灯组成。
在这里插入图片描述
仿真电路图
在这里插入图片描述
在这里插入图片描述
电子秤原理图
在这里插入图片描述
仿真结果分析
打开Proteus仿真文件,其后缀名为DSN。双击单片机,加载main.hex文件(位置在:单片机加载文件);然后,双击HX711芯片,加载HX711.hex文件(位置在:HX711模块加载文件)。
在这里插入图片描述
点击Proteus软件左下角运行按钮,运行仿真。LCD1602液晶显示:Welcom to Use Electronic Scale.
在这里插入图片描述
紧接着,一声提示音过后,红色LED灯点亮,LCD显示重量、单价和总价,数值均为0。此时,系统处于等待货物称重的状态。

LCD显示的3个参数分别是:WE(Weight,重量的缩写)、PR(Price, 单价的缩写)和MONEY(表示总价)。
在这里插入图片描述
按下‘重量+’或‘重量-’键,模拟货物称重,称重范围为:0~10Kg。重量若大于10Kg,超重报警,蜂鸣器鸣叫,红色LED闪烁,LCD中WE显示:-.–。
在这里插入图片描述
在这里插入图片描述
通过矩阵键盘输入单价(PR),最大输入单价为99.9,可以输入小数点,单价设置精确到角。比如输入5.4元,输入数字键5、圆点键和数字键4即可。

单价输入完成,自动显示总价(MONEY),总价精确到小数点后1位;总价最大为999元,大于该值,LCD显示‘-.–’表示超出显示量程。
在这里插入图片描述
在这里插入图片描述
本仿真设计有校准功能,通过‘校准+’和‘校准-’两个键,可以小范围(按下1次,重量显示改变0.001Kg)校准电子秤显示的货物重量。例如,将重量由3.576Kg校准为3.574Kg。
在这里插入图片描述
货物称重完成后,点击‘清除’键,清除单价和总价,点击‘去皮’键清除重量显示,注意去皮键兼具清除重量显示的功能;然后就可进行下次称重了。
在这里插入图片描述
模拟去皮功能
首先通过按下‘重量+’/‘重量-’键,模拟篮子或者箱子的重量,该重量设置好后,按下‘去皮’键,此时重量显示清零。

例如,按下‘重量+’键,设置篮子重量1.083Kg,然后点击‘去皮’键,WE显示清零。
在这里插入图片描述
在这里插入图片描述
去皮后,再次按下‘重量+’模拟货物的净重4.880Kg,然后,输入单价3.0元,总价14.06元。
在这里插入图片描述
再次按下‘去皮’键,此时WE显示货物净重加篮子的重量,总价也计算了篮子的部分,再次按下‘去皮’键,重量清零。
在这里插入图片描述
部分C代码

void main()
{
	init_eeprom();  //开始初始化保存的数据
	Init_LCD1602();									//初始化LCD1602
   EA = 0;
   Data_Init();
   Timer0_Init();
   //初中始化完成,开断
   EA = 1;
	
//	Get_Maopi();
	LCD1602_write_com(0x80);						//指针设置
   LCD1602_write_word(" Welcome To Use ");	//  
   LCD1602_write_com(0x80+0x40);						//指针设置
   LCD1602_write_word("Electronic Scale");
//   Delay_ms(2000);
   Get_Maopi();
   LCD1602_write_com(0x80);						//指针设置
   LCD1602_write_word("WE:0.000 PR:00.0");
   LCD1602_write_com(0x80+0x40);				//指针设置
   LCD1602_write_word("MONEY:  0.00    ");
   Display_Price();
//	Get_Maopi();				//称毛皮重量

	while(1)
	{
//每0.5秒称重一次
	  if (FlagTest==1)
		{
			Get_Weight();
			FlagTest = 0;
		}			
	  	
	  keycode = Getkeyboard();
	  //有效键值0-15
	  if (keycode<16)
	  {
		 KeyPress(keycode);
		 Buzzer=0;
		 Delay_ms(100);
		 Buzzer=1;
		 while(keycode<16)
		 {
			if(keycode==12||keycode==13)
			{
				Buzzer=0;
				 Delay_ms(10);
				 Buzzer=1;
				 KeyPress(keycode);
				 Get_Weight();
				 flag_key=1;
			}
			keycode = Getkeyboard();
		 }
		 write_eeprom();			   //保存数据
	  }
	}
}
//****************************************************
//称重
//****************************************************
void Get_Weight()
{
	Weight_Shiwu = HX711_Read();
	Weight_Shiwu = Weight_Shiwu - Weight_Maopi;		//获取净重
	
	Weight_Shiwu = (unsigned int)((float)Weight_Shiwu*10/GapValue)-qupi; 	//计算实物的实际重量																
	if(Weight_Shiwu > 10000)		//超重报警
	{
		Buzzer = !Buzzer;	
		LED=!LED;
		LCD1602_write_com(0x83);
	   LCD1602_write_word("-.---");
	}
	else
	{
		if(Weight_Shiwu==0)
		LED=1;
		else if(Weight_Shiwu>0)
		LED=0; 
		Buzzer = 1;
		Display_Weight();
		money = Weight_Shiwu*price/1000;  //money单位为分
	       //显示总金额
	       Display_Money();
	}
}

//****************************************************
//获取毛皮重量
//****************************************************
void Get_Maopi()
{
	unsigned char clear;
mm:	Weight_Maopi_0 = HX711_Read();
	for(clear=0;clear<10;clear++)
	{
		Buzzer=1;
		LED=1;
		Delay_ms(100);
		LED=0;
		Delay_ms(100);	
	}
	Weight_Maopi = HX711_Read();
	if(Weight_Maopi/GapValue!=Weight_Maopi_0/GapValue)
	goto mm;
	Buzzer=0;
	Delay_ms(500);
	Buzzer=1;
} 

分享的资源有
(1)基于51单片机和HX711压力传感器的电子秤系统设计毕设论文完整版;
(2)Proteus仿真文件;
(3)Keil C程序文件;
(4)HX711模块资料;
(5)Visio流程图;
(6)电子秤原理图;
(7)电子元器件清单;
(8)评优文献翻译;

全套资源如下
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
重要的事情说三遍!

重要的事情说三遍!

重要的事情说三遍!

获取电子秤设计毕业论文、Proteus仿真、C程序、原理图、Visio流程图、元器件清单、HX711模块等全套资料。

请微信搜索关注公众号:交大小智

猜你喜欢

转载自blog.csdn.net/JiaoDaBoy/article/details/106139154