基于51单片机的电子秤设计详解(包含源码、硬件和论文)

文章目录

  • 0 前言
  • 1 主要功能
  • 2 硬件设计(原理图)
  • 3 核心软件设计
  • 4 实现效果
  • 5 最后

  • 0 前言

    🔥
    这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。

    为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是

    🚩 毕业设计 基于51单片机的电子秤设计(源码+硬件+论文)

    🥇学长这里给一个题目综合评分(每项满分5分)

  • 难度系数:3分
  • 工作量:3分
  • 创新点:4分
  • 🧿 项目分享:

    https://gitee.com/sinonfin/sharing

    1 主要功能

    本系统采用STC89C52RC芯片为主要控制单元,并配有单片机最小系统,由复位模块,晶振模块,电源电路模块,构成了一个最小的主控系统。主控系统以4×4矩阵键盘作为基于单片机的电子秤系统的控制输入模块;以LCD12864液晶显示模块作为单片机为核心的电子秤系统输出显示模块;5KG压力传感器作为基于单片机的电子秤系统的物品重量模拟量采集模块;以HX711模块作为AD模数转换模块,把读取到的物品重量AD值传给STC89C52RC芯片,再通过相关数据公式转换,把物体的实际重量和物品数量总价通过LCD12864液晶显示模块显示出来。基于单片机的电子秤系统的硬件设计图如图

    2 硬件设计(原理图)

    3 核心软件设计

    基于单片机的电子秤系统主程序流程图分为:模块初始化、初始化显示信息、物品重量的测量、物品总重量和总价格计算、蜂鸣器报警模块、矩阵键盘扫描和LCD1602液晶显示。系统主程序运行后,搭载的所有模块都会被初始化,当所有模块初始化完,LCD12864液晶显示模块会显示“价格 ”等字符,接着进行物品重量的测量,当读取到的物体重量超出范围时,LED灯闪烁报警,LCD12864液晶显示模块会显示错误,以此提示物体超重,当物品在测量范围内,就可以通过4×4矩阵按键扫描输入物品的总数量和单价计算出物品的总价格和总质量并通过LCD12864液晶显示模块显示这些信息。程序流程图如图

    关键代码

    #include<reg52.h>	 
    #include<lcd12864.H>
    #include<HX711.h>
    #include<KEY.h>
    #include<math.h>
    #include<stdio.h>
    #define	MAX 3		 宏定义,单价最大输入3位数
    sbit led=P3^2; 超重指示灯
    uchar key;       储存按键值    
    double price=0;      储存0时单价
    double prices=0;      储存最终单价 
    double pricess=0;    储存最终总价
    bit price_f=0;       记录输入单价标志
    bit price_w=0;       记录输入单价完成标志
    bit dian_f=0;         小数单价标志
    bit dian_w=0;        
    uchar n=0;	          
    uchar z_s[9]="        \0"; 
    uchar wei=0;	     
    void clear_data()
    {
    	uchar i;
    	for(i=wei;i<8;i++) 
    		z_s[i]=' ';
    }
    /********************************************************
    void fixed_display()
    {  	
    	LCD12864_display_string(0,1,"重量: ");  
    	LCD12864_display_string(0,2,"单价: 0 "); 
    	LCD12864_display_string(0,3,"总价: ");
    	LCD12864_display_string(0,4,"合计: ");
    
    	LCD12864_display_string(7,1,"g ");
    	LCD12864_image3216(6,2,ASI);		   
    	LCD12864_display_string(7,3,"元");
    	LCD12864_display_string(7,4,"元");
    } 
    void chuli()
    {
    	if(key<=9)//判断当前按下是否为0~9的数字键
    	{
    		if((price_f==1&&price_w==0&&n<MAX)||(dian_f==1&&dian_w==0)) 
    		{
    			if(dian_f==0)		    
    			{
    				if(price==0)		
    				{
    					price=key;      
    					n=1;			
    				}
    				else				
    				{
    					price=price*10+key; 
    					n++;				
    				}
    				if(n==MAX)			
    					price_w=1;				
    			}
    			else					 
    			{						  
    				price=price+(float)key/10;
    				dian_w=1;				  
    				price_w=1;				 
    			}				 
    		}
    	}
    	if(key=='.')
    	{		
    		if(price_f==1&&dian_f==0) 
    			dian_f=1;
    	}
    	if(key=='Q')
    	{
    		if(price_f==0)			 
    			init_val=fil(3);		 
    	}  
    	if(key=='D')
    	{
    		 price_f=1;				
    		 LCD12864_display_string(3,2,"        ");
    	}
    	if(key=='T')				  
    	{
    		 if(price_f==1&&price!=0) 
    		 {
    		 	if(dian_f==1)		 
    			{
    				price_w=0;
    				dian_w=0;		
    				dian_f=0;
    				price=(ulong)price;	
    				LCD12864_display_string(3,2,"        ");
    			}
    			else				  
    			{
    				n--;			 
    				price_w=0;			
    				price=(ulong)price/10;
    				LCD12864_display_string(3,2,"        ");
    			}
    		 }
    		 else
    			 if(price_f==0)
    			 {
    			 	 prices=0;
    				 LCD12864_display_string(3,2,"        ");
    			 	 pricess=0;
    				 LCD12864_display_string(3,4,"        ");
    			 }
    	}
    	if(key=='C')
    	{
    		if(price_f==0&&value<=10000)
    		{
    			pricess+=(double)value/1000*prices;    	   
    			wei=sprintf(z_s,"%0.1f",(double)pricess);
    			clear_data();						   
    			LCD12864_display_string(3,4,z_s);	   
    		}
    	}
    	if(key=='=')
    	{
    		if(price_f==1)	  
    		{	
    			 prices=price; 
    			 price_f=0;   
    			 price=0;
    			 n=0;
    			 price_w=0;
    			 dian_f=0;
    			 dian_w=0;
    	    }
    	}
    }
    void main()
    {
    	LCD12864_init();	  
    	LCD12864_display_string(0,2,"欢迎使用电子秤. ");
    	init_val=fil(30);				
    	while(ii>=8000)					
    	{
    		LCD12864_clear12864();			
    		LCD12864_display_string(2,1,"☆警告☆");	  
    		LCD12864_display_string(1,2,"未检测到模块");
    		LCD12864_display_string(0,3,"关闭电源后检测下");
    		LCD12864_display_string(0,4,"HX711 是否插接好");		
    	}
    	init_val=fil(10);  调用一个fil函数,给了个参数值是10,给了个返回值,init_val
    	write_com(0x01);  
    	LCD12864_clear12864();      
    	fixed_display();				
    	while(1)					    
    	{
    		if(price_f==0)			   
    		{
    			value=fil(3);         
    			if(value<init_val) 
    				value=(init_val-value)/357.53;
    			else
    			{
    				value=0;			
    				led=1;				
    			}
    			if(value<=5000)        
    			{
    				led=1;             
    			    wei=sprintf(z_s,"%ld",(ulong)value);
    				clear_data();		
    				LCD12864_display_string(3,1,z_s);
    				wei=sprintf(z_s,"%0.1f",(double)value/1000*prices);
    				clear_data();		
    				LCD12864_display_string(3,3,z_s);
    			}
    			else
    			{
    				led=0; 
    				LCD12864_display_string(3,1,"超重    "); 
    			}	
    		}
    		key=keyscan()
    		if(key!=0xff) 
    		{
    			chuli();
    			if(price_f==1) 
    			{
    				if(dian_f==1)
    				{
    					wei=sprintf(z_s,"%0.1f",price);	  
    					clear_data();					   
    					LCD12864_display_string(3,2,z_s);  
    					LCD12864_clear3216(6,2);
    				}
    				else
    				{
    					wei=sprintf(z_s,"%ld",(ulong)price);	
    					clear_data();					    
    					LCD12864_display_string(3,2,z_s);   
    					LCD12864_clear3216(6,2);	
    				}
    			}
    			else
    			{
    				wei=sprintf(z_s,"%0.1f",prices);	   
    				clear_data();						   
    				LCD12864_display_string(3,2,z_s);	    
    				LCD12864_image3216(6,2,ASI);		    
    			} 			
    		} 			
    	}
    }
    

    4 实现效果

    5 最后

    包含内容

    🧿 项目分享:

    https://gitee.com/sinonfin/sharing

    物联沃分享整理
    物联沃-IOTWORD物联网 » 基于51单片机的电子秤设计详解(包含源码、硬件和论文)

    发表评论