基于51单片机的电子秤(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;
                }
            }
        }

  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白茶丫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值