2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 基于51单片机HX711的电子秤称重计价proteus仿真程序设计

基于51单片机HX711的电子秤称重计价proteus仿真程序设计

时间:2023-09-11 07:35:18

相关推荐

基于51单片机HX711的电子秤称重计价proteus仿真程序设计

设计要求

1、利用压力传感器检测重量信号,经放大和A/D转换,送单片机进行处理,并在液晶屏上显示出被称重量值;

2、最小显示单位为1克;

3、量程超过报警值蜂鸣器报警

资料下载地址:基于51单片机HX711的电子秤称重计价proteus仿真程序设计资料

仿真图1

系统刚上电显示物体重量和报警值

仿真图2

按下HX711模块的加键,模拟物体称重,超重报警。

硬件设计

电子称原理图

程序设计

部分程序

/*********************************************************************************************************************************************/#include "main.h"#include "HX711.h"#include "uart.h"#include "LCD1602.h"unsigned long HX711_Buffer = 0;unsigned long Weight_Maopi = 0;long Weight_Shiwu = 0;unsigned char flag = 0;bit Flag_ERROR = 0;sbit speak= P1^7;//校准参数//因为不同的传感器特性曲线不是很一致,因此,每一个传感器需要矫正这里这个参数才能使测量值很准确。//当发现测试出来的重量偏大时,增加该数值。//如果测试出来的重量偏小时,减小改数值。//该值可以为小数#define GapValue 400//****************************************************//主函数//****************************************************void main(){Uart_Init();Send_Word("Welcome to use!\n");Send_Word("Made by Beetle Electronic Technology!\n");Init_LCD1602();LCD1602_write_com(0x80);LCD1602_write_word("Welcome to use!");Delay_ms(1000); //延时,等待传感器稳定Get_Maopi();//称毛皮重量while(1){EA = 0;Get_Weight();//称重EA = 1;Scan_Key();//显示当前重量if( Flag_ERROR == 1){Send_Word("ERROR\n");LCD1602_write_com(0x80+0x40);LCD1602_write_word("ERROR ");speak=0;}else{speak=1;Send_ASCII(Weight_Shiwu/1000 + 0X30);Send_ASCII(Weight_Shiwu%1000/100 + 0X30);Send_ASCII(Weight_Shiwu%100/10 + 0X30);Send_ASCII(Weight_Shiwu%10 + 0X30);Send_Word(" g\n");LCD1602_write_com(0x80+0x40);LCD1602_write_data(Weight_Shiwu/1000 + 0X30);LCD1602_write_data(Weight_Shiwu%1000/100 + 0X30);LCD1602_write_data(Weight_Shiwu%100/10 + 0X30);LCD1602_write_data(Weight_Shiwu%10 + 0X30);LCD1602_write_word(" g");}}}//****************************************************//获取毛皮重量//****************************************************void Get_Maopi(){Weight_Maopi = HX711_Read();} //****************************************************//MS延时函数(12M晶振下测试)//****************************************************void Delay_ms(unsigned int n){unsigned int i,j;for(i=0;i<n;i++)for(j=0;j<123;j++);}

LCD1602.h```handlebars#include "LCD1602.h"//****************************************************//MS延时函数(12M晶振下测试)//****************************************************void LCD1602_delay_ms(unsigned int n){unsigned int i,j;for(i=0;i<n;i++)for(j=0;j<123;j++);}//****************************************************//写指令//****************************************************void LCD1602_write_com(unsigned char com){LCD1602_RS = 0;LCD1602_delay_ms(1);LCD1602_EN = 1;LCD1602_PORT = com;LCD1602_delay_ms(1);LCD1602_EN = 0;}//****************************************************//写数据//****************************************************void LCD1602_write_data(unsigned char dat){LCD1602_RS = 1;LCD1602_delay_ms(1);LCD1602_PORT = dat;LCD1602_EN = 1;LCD1602_delay_ms(1);LCD1602_EN = 0;}//****************************************************//连续写字符//****************************************************void LCD1602_write_word(unsigned char *s){while(*s>0){LCD1602_write_data(*s);s++;}}void Init_LCD1602(){LCD1602_EN = 0;LCD1602_RW = 0;//设置为写状态LCD1602_write_com(0x38);//显示模式设定LCD1602_write_com(0x0c);//开关显示、光标有无设置、光标闪烁设置LCD1602_write_com(0x06);//写一个字符后指针加一LCD1602_write_com(0x01);//清屏指令}

全套资源如下

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。