基于51单片机的HX711电子称(Proteus仿真)

        基于51单片机的HX711电子秤,利用AT89C51作为系统主控,HX711作为称重模块,矩阵键盘用于单价输入,系统自动进行总价的统计。为了可视化显示,使用LCD1602作为显示器件,显示单价、重量、总价等。为了方便进行提示用户,本次设计使用蜂鸣器和LED作为提示器件。

一、硬件设计

1、51单片机最小系统

        一般单片机的最小系统主要包括芯片、晶振电路、复位电路等,但是在仿真中,不添加这些部分也是可以正常仿真的,但是为了严谨,本次设计将晶振电路和复位电路添加进去了。

2、HX711电路

        由于Proteus8.9里并没有HX711,但是我们需要使用HX711进行仿真,综合查询多个资料,我找到了解决方法,通过加载一个HX711仿真文件我们实现了功能。

3、DS1302电路

        本次设计利用DS1302获取系统时间,由于DS1302是仿真,在没有手动设置时间,一般他的时间会和电脑的时间保持一致,我们通过写DS1302的串行通信程序可以读出DS1302携带的年、月、日、时、分、秒数据。另外,我们还需要给DS1302提供晶振,一般来说,频率是32.768k。

4、矩阵键盘电路

        矩阵键盘通常使用扫描的方式进行数据读取,所连接方式是按键两端都连上IO口,如下图所示:

剩下的一些LCD电路、蜂鸣器电路、LED电路这边并不做多阐述

二、软件设计

1、驱动函数书写

        本次设计的驱动函数模块,主要包括LCD、HX711、DS1302、矩阵按键、延时函数,根据封装的设计思路,让我们的应用层代码只需要调用API就可以完成对硬件功能的驱动,实现整体功能。

2、程序设计

        ·(1)本次程序设计,使用按键进行操作,主要有两个状态,一个是正常计价模式,一个是休眠模式,程序开始运行,我们循环获取矩阵按键的按键值,这个系统具有小数点的功能,于是在基础价格的基础上我们有一个小数点位置记忆功能,实现简单的小数点运算。参考代码如下:

		//获取矩阵按键型号
		keyNum = MatrixKey();
		if(keyNum >= 0 && keyNum <= 10){
			if(len<4){
				if(keyNum != 10){
					val = val*10+keyNum;
					len++;
				}
				//小数点按下,进行小数点的位置记忆
				if(keyNum==10){
					dot=1;
					dot_pos=len;
				}					
			}
		}

        (2)本次设计的按键,除了输入单价的功能,还有别的功能,分别是去皮、减、加、清零、确认这5个功能,参考代码如下:

		//按下去皮按键,进行去皮
		if(keyNum == 11){
			if(qupi==0)
			qupi=Weight_Shiwu;
			else
			qupi=0;
		}
		//校验减
		if(keyNum == 12){
			if(GapValue<10000)
			GapValue+=10;
			write_eeprom();	
		}
		//校验加
		if(keyNum == 13){
			if(GapValue>1)
			GapValue-=10;
			write_eeprom();	
		}
		
		//进行价格计算
		if(keyNum == 15 && over==0){
			if(dot != 0){
				res = (float)val * Weight_Shiwu/LCD_Pow(10, len-dot_pos);
			}
			else{
				res = (float)val * Weight_Shiwu;
			}
		}
		//清零
		if(keyNum == 14){
			val=0;
			res=0;
			dot_pos=0;
			len=0;
			dot=0;
			LCD_ShowString(1,11, "        ");
		}

        (3)同时,设计中包含的功能还有休眠功能,即长时间没有进行操作,系统自动进行休眠,直到再次进行系统操作,系统才会被唤醒。参考代码如下:

		//休眠计时
		if(keyNum == 255){
			cnt_flag=1;
		}
		else{
			cnt=0;
			cnt_flag=0;
			sleep_flag=0;
		}
		//不休眠情况下,进行计价
		if(sleep_flag == 0){
			//每0.5秒称重一次
			if (FlagTest==1)
			{
				Get_Weight();
				FlagTest = 0;
			}	
			
			//显示最后价格
			LCD_ShowNum(2,10, res/1000, 3);
			LCD_ShowString(2,13, ".");
			LCD_ShowNum(2,14, res%1000, 3);
			
			//显示小数点
			if(dot_pos !=0){
				LCD_ShowString(1,11+dot_pos, ".");
			}
			temp=0;
			for(i=0; i<len; i++){
				if(i==dot_pos && dot_pos!=0)temp++;
				LCD_ShowNum(1,11+temp, val/LCD_Pow(10, len-i-1)%10, 1);
				temp++;
			}
			
			//显示实时时间
			DS1302_ReadTime();
			LCD_ShowNum(2,1, DS1302_Time[3], 2);
			LCD_ShowString(2, 3, ":");
			LCD_ShowNum(2,4, DS1302_Time[4], 2);
			LCD_ShowString(2, 6, ":");
			LCD_ShowNum(2,7, DS1302_Time[5], 2);
		}
		else{
			//清屏
			LCD1602_write_com(0x01);			
		}

三、功能演示

        1、首先,程序开始运行,系统打印提示,欢迎进入系统,经过一段时间的延时后进行系统。

        2、进入系统,显示屏显示重量、时间、总价,在没有输入之前,单价位置是白色的。等待用户键盘进行输入。

        3、调节HX711的重量,同时按键输入单价,如下图:

        4、按下确认,系统进行价格运算,得出最终的价格,如下图所示:

        5、如果长时间未进行操作,系统会进行休眠态,此时LCD白屏,按下任意按键,系统才会进行唤醒。

        6、按下清零键,系统进行清零,可进行下一次输入。

        7、另外系统还有去皮、校验减、校验加,这里不进行测试了。

四、项目总结

        本次项目使用51单片机进行设计,HX711作为本次设计的核心传感器,主要进行称重的功能,使用按键进行用户交互,并且支持小数价格输入,按下确认后进行价格,并且有时间显示、价格计算等一系列功能,在Proteus上完成了简单的称中功能。

以下是本项目的地址:

基于51单片机的电子称系统仿真_哔哩哔哩_bilibili

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值