基于51单片机的电子秤Proteus仿真设计研究

本设计仅供学习参考
基于51单片机的电子秤proteus仿真设计(仿真+程序+原理图+报告+讲解)
原理图:Altium Designer
仿真图proteus 7.8
程序编译器:keil 4/keil 5
编程语言:C语言
编号C0033

【腾讯文档】C0033 网盘链接
资料下载链接

功能说明:
数据采集模块+最小系统模块+超重报警模块+键盘+显示模块。
1、数据采集模块包括称重传感器和A/D转换电路;
2、最小系统部分主要包括AT89C51、晶振电路和复位电路;
3、键盘由4X4位矩阵键盘组成,可以控制显示重量和价钱等信息;
4、显示部分由LCD1602液晶显示。
5、可以实现称重、置零、计价和显示等功能。其称重范围为0~10Kg,分度值为0.001g。

仿真图(提供源文件):

程序:
main函数

//****************************************************
//主函数
//****************************************************
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();			   //保存数据
	  }
	}
}

HX711驱动

#include "HX711.h"


//****************************************************
//延时函数
//****************************************************
void Delay__hx711_us(void)
{
	_nop_();
	_nop_();
}

//****************************************************
//读取HX711
//****************************************************
unsigned long HX711_Read(void)	//增益128
{
	unsigned long count; 
	unsigned char i; 							    
  	HX711_DOUT=1; 
	Delay__hx711_us();
  	HX711_SCK=0; 
  	count=0; 
  	while(HX711_DOUT); 
  	for(i=0;i<24;i++)
	{ 
	  	HX711_SCK=1; 
	  	count=count<<1; 
		HX711_SCK=0; 
	  	if(HX711_DOUT)
			count++; 
	} 
 	HX711_SCK=1; 
    count=count^0x800000;//第25个脉冲下降沿来时,转换数据
	Delay__hx711_us();
	HX711_SCK=0;  
	return(count);
}







原理图(提供源文件):

参考论文:

物联沃分享整理
物联沃-IOTWORD物联网 » 基于51单片机的电子秤Proteus仿真设计研究

发表评论