电子秤5KG+上限警报设计
原理图:
程序运行图:
部分程序:
#include "main.h"
#include "LCD1602.h"
#include "HX711.h"
#include "EEPROM.H"
//定义变量
unsigned char KEY_NUM = 0; //用来存放按键按下的键值
unsigned long HX711_Buffer = 0; //用来存放HX711读取出来的数据
unsigned long Weight_Maopi = 0; //用来存放毛皮数据
long Weight_Shiwu = 0; //用来存放实物重量
long Max_Value = 0; //用来存放设置最大值
char maxValueTable[4] = {1,0,0,0};//这就是用来储存最大值变量的四位值
unsigned char state = 0; //用来存放设置状态
unsigned char Blink_Speed = 0;
#define Blink_Speed_Max 6 //该值可以改变设置指针闪烁频率
//校准参数
//因为不同的传感器特性曲线不是很一致,因此,每一个传感器需要矫正这里这个参数才能使测量值很准确。
//当发现测试出来的重量偏大时,增加该数值。
//如果测试出来的重量偏小时,减小改数值。
//该值可以为小数
#define GapValue 430
//传感器最大测量值,单位是g
#define AlarmValue 5000
//****************************************************
//主函数
//****************************************************
void main()
{
Init_LCD1602(); //初始化LCD1602
LCD1602_write_com(0x80); //设置LCD1602指针
LCD1602_write_word("Welcome to use!");
Get_Maopi();
Get_Maopi();
Delay_ms(2000); //延时2s
Get_Maopi();
Get_Maopi(); //称毛皮重量 //多次测量有利于HX711稳定
LCD1602_write_com(0x01); //清屏
//读取EEPROM中保存的报警值
maxValueTable[0] = byte_read(0x2000);
maxValueTable[1] = byte_read(0x2001);
maxValueTable[2] = byte_read(0x2002);
maxValueTable[3] = byte_read(0x2003);
Max_Value = maxValueTable[0]*1000+maxValueTable[1]*100+maxValueTable[2]*10+maxValueTable[3]; //计算超限报警界限值
while(1)
{
Get_Weight();
//显示当前重量
LCD1602_write_com(0x80);
LCD1602_write_word("Weight=");
LCD1602_write_data(Weight_Shiwu%10000/1000 + 0x30);
LCD1602_write_data('.');
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("Kg");
KEY_NUM = Scan_Key();
if(KEY_NUM == 1) //按键1切换设置状态
{
state++;//这个数据用来显示电子秤的最大值
if(state == 5)//就是MAX=X.XXXKG,其中X.XXX共5位,5位过后开始将其中的值保存在EEPROM中
{
state = 0;
SectorErase(0x2000);
byte_write(0x2000,maxValueTable[0]); //保存EEPROM数据
byte_write(0x2001,maxValueTable[1]);
byte_write(0x2002,maxValueTable[2]); //保存EEPROM数据
byte_write(0x2003,maxValueTable[3]);
Max_Value = maxValueTable[0]*1000+maxValueTable[1]*100+maxValueTable[2]*10+maxValueTable[3]; //计算超限报警界限值
}
}
if(KEY_NUM == 2) //按键加
{
if(state != 0)//就是为了防止起始位的影响
{
maxValueTable[state-1]++;//该位的值加加
if(maxValueTable[state-1] >= 10)//当该位的值=10时就为它清零
{
maxValueTable[state-1] = 0;
}
}
}
if(KEY_NUM == 3) //按键减
{
if(state != 0)
{
maxValueTable[state-1]--;
if(maxValueTable[state-1] <= -1)
{
maxValueTable[state-1] = 9;
}
}
}
资料包括:
需要完整的资料可在我的资源里下载,也可以加入我的纷传圈子,里面有资源压缩包的百度网盘下载地址及提取码。
纷传点击用微信打开即可,过程有点繁琐请见谅。