51HX711+单片机10kg电子秤源程序+上线报警设置(加继电器)

发布者:Ziran520最新更新时间:2020-12-22 来源: 51hei关键字:单片机 手机看文章 扫描二维码
随时随地手机看文章

电子秤的制作,能够去皮,范围10KG


单片机源程序如下:

/************************************************

功能:

     按键K1为去皮功能,K2和K3是修改报警参数值。K2加,K3减。当所测重量大于设置的报警值时,P3.0驱动继电器工作,继电器可以接报警装置等。

         校正方法:如果所测重量偏小。则按住K3键不放,再按下K1键。 直到显示重量为正确重量时再放开K1和K3按键。

                        如果所测重量偏大。则按住K2键不放,再按下K1键。 直到显示重量为正确重量时再放开K1和K2按键。。 校正系数具有断电保存功能。

时间:2018.4.25

作者:Obligation

*************************************************/


#include "main.h"

#include "LCD1602.h"

#include "HX711.h"

#define uchar unsigned char  //无符号字符型 宏定义        变量范围0~255

#define uint  unsigned int         //无符号整型 宏定义        变量范围0~65535



#include "eeprom52.h"

//定义变量

unsigned char KEY_NUM = 0;   //用来存放按键按下的键值

unsigned long HX711_Buffer = 0;  //用来存放HX711读取出来的数据

unsigned long Weight_Maopi = 0; //用来存放毛皮数据

long Weight_Shiwu = 0;          //用来存放实物重量

unsigned char Max_Value;             //用来存放设置最大值


unsigned char state = 0;    //用来存放设置状态

unsigned char Blink_Speed = 0;

#define Blink_Speed_Max 6          //该值可以改变设置指针闪烁频率



uint GapValue= 210;           //传感器曲率


unsigned char num1,num2,times; //num1 和 num2  是存储在单片机eeprom内部的。


sbit JDQ=P3^0;


//报警值,单位是g

#define AlarmValue 10000                       




/******************把数据保存到单片机内部eeprom中******************/

void write_eeprom()

{  

    num1=GapValue/256;

        num2=GapValue%256;


    SectorErase(0x2000);

        byte_write(0x2001,Max_Value);

        byte_write(0x2002,  num1);

        byte_write(0x2003,  num2);


    byte_write(0x2060, a_a);       

}


/******************把数据从单片机内部eeprom中读出来*****************/

void read_eeprom()

{

        Max_Value = byte_read(0x2001);

        num1   = byte_read(0x2002);

        num2   = byte_read(0x2003);

       

    a_a      = byte_read(0x2060);

        GapValue= num1*256+num2;

}


/**************开机自检eeprom初始化*****************/

void init_eeprom()

{

        read_eeprom();                //先读

        if(a_a != 3)                //新的单片机初始单片机内问eeprom

        {

           a_a =3;

           Max_Value = 10;

           GapValue= 210;

       write_eeprom();

        }       

       

       

       

}



//扫描按键

void Scan_Key()

{

        if(KEY1 == 0 && KEY2 ==1 && KEY3 ==1 )

        {

                Delay_ms(5);

                if(KEY1 == 0 && KEY2 ==1 && KEY3 ==1 )

                {

                        while(KEY1 == 0 && KEY2 ==1 && KEY3 ==1 );

                    Get_Maopi();

                        Buzzer_Di();

                }       

        }


        if(KEY2 == 0 && KEY1 ==1 && KEY3 ==1 )

        {

                Delay_ms(5);

                if(KEY2 == 0 && KEY1 ==1 && KEY3 ==1 )

                {

                        while(KEY2 == 0 && KEY1 ==1 && KEY3 ==1 );

                    if(Max_Value<10)         { Max_Value++;}

                    write_eeprom();       //保存数据

                        Buzzer_Di();

                        LCD1602_write_com(0x80+0x40);

            LCD1602_write_word("JDQ=");

            LCD1602_write_data(Max_Value/100 + 0x30);

            LCD1602_write_data(Max_Value%100/10 + 0x30);

            LCD1602_write_data(Max_Value%10 + 0x30);

                }       

        }


        if(KEY3 == 0 && KEY1 ==1 && KEY2 ==1 )

        {

                Delay_ms(5);

                if(KEY3 == 0 && KEY1 ==1 && KEY2 ==1)

                {

                        while(KEY3 == 0 && KEY1 ==1 && KEY2 ==1);

                    if(Max_Value>1)         { Max_Value--; }

                         write_eeprom();       //保存数据

                         Buzzer_Di();

                         LCD1602_write_com(0x80+0x40);

            LCD1602_write_word("JDQ=");

            LCD1602_write_data(Max_Value/100 + 0x30);

            LCD1602_write_data(Max_Value%100/10 + 0x30);

            LCD1602_write_data(Max_Value%10 + 0x30);

                }       

        }



   //=======================对实物进行重量校正================================

        if( KEY1 == 0 && KEY2 ==0)

        {

                Delay_ms(25);

                if( KEY1 == 0 && KEY2 ==0)

                {

                    times=0;

                        Buzzer =0;

                        Delay_ms(25);

                        Buzzer =1;

                    if(GapValue<999)  { GapValue++; }

                        write_eeprom();       //保存数据

                        LCD1602_write_com(0x80+0x40+11);

            LCD1602_write_word("K=");

                LCD1602_write_data(GapValue/100 + 0x30);

            LCD1602_write_data(GapValue%100/10 + 0x30);

            LCD1602_write_data(GapValue%10 + 0x30);


                }       

        }


        if(KEY1 == 0 && KEY3 ==0)

        {

                Delay_ms(25);

                if(KEY1 == 0 && KEY3 ==0)

                {       

                    times=0;

                        Buzzer =0;

                        Delay_ms(25);

                        Buzzer =1;

                    if(GapValue>1)  {         GapValue--; }

                         write_eeprom();       //保存数据

                        LCD1602_write_com(0x80+0x40+11);

            LCD1602_write_word("K=");

                LCD1602_write_data(GapValue/100 + 0x30);

            LCD1602_write_data(GapValue%100/10 + 0x30);

            LCD1602_write_data(GapValue%10 + 0x30);


                }       

        }


}




//****************************************************

//主函数

//****************************************************

void main()

{

        Init_LCD1602();                                                //初始化LCD1602

[1] [2]
关键字:单片机 引用地址:51HX711+单片机10kg电子秤源程序+上线报警设置(加继电器)

上一篇:单片机1602汉字与时间显示程序(年月日3个汉字)
下一篇:单片机红外遥控调光程序

推荐阅读最新更新时间:2024-11-12 23:57

单片机 10种软件滤波方法的示例程序
单片机学习笔记_10种软件滤波方法的示例程序 假定从8位AD中读取数据(如果是更高位的AD可定义数据类型为int),子程序为get_ad(); 1、限副滤波 /* A值可根据实际情况调整 value为有效值,new_value为当前采样值 滤波程序返回有效的实际值 */ #define A 10 char value; char filter() { char new_value; new_value = get_ad(); if ( ( new_value - value A ) || ( value - new_value A ) return value; return ne
[单片机]
8051单片机红外线遥控实验
如果网页显示格式错乱可从这里下载完整的源程序:http://www.51hei.com/f/dpjjmhw.rar // 遥控器 采用Ht6221 芯片 //红外线遥控 用外部中断作为红外线解码输入 红外遥控器1号键为 电风扇 启动键 #include reg51.h #define uchar unsigned char #define uint unsigned int code uchar seg ={0x28,0x7e,0xa2,0x62,0x74,0x61,0x21,0x7a,0x20,0x60}; //数码管码表 code uchar tab ={0x7f,0xbf,0xdf,0xef,0xf7
[单片机]
8051<font color='red'>单片机</font>红外线遥控实验
单片机LED数码管
电路图: 代码如下: #include reg51.h char led_mod = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f }; //LED 0 - 9 void delay(unsigned int time) { unsigned int j = 0; for(; time 0; time--) for(j = 0; j 125; j++); } void main(void) { char i = 0, j =0 ; P0 = P2 = led_mod ; while (1) { for(i
[单片机]
<font color='red'>单片机</font>LED数码管
基于51单片机超声波测距带语音播报JQ6500
功能说明: 1.本设计采用STC89C52单片机作为主控制器; 2.LCD1602液晶显示测量的距离和温度; 3.带有温度补偿功能(DS18B20传感器); 4.测量范围0.02m~4m,精度为0.01m; 5.带实时语音播报功能; 6.按键功能:按键2:加报警值按键3:减报警值按键1:设置按键(只有在按下设置的时候才可以加减报警值),在未按下按键1时,按下按键3播报测量距离。 实物制作图: 原理图: uchar ONE2 ={0x7E,0x04,0x03,0x00,0X0C,0xEF};//米 uchar ONE3 ={0x7E,0x04,0x03,0x00,0X0B,0xEF};//点 uchar ONE4 ={0x7E
[单片机]
基于51<font color='red'>单片机</font>超声波测距带语音播报JQ6500
MCS-51单片机的串行口应用的程序设计举例
1.实验设计 定时中断程序,串行口P3.0、P3.1输出,用74LS164移位寄存器驱动发光二极管 ; 定时器0于方式1,16位,10ms中断一次 ; 40H 10ms定时计数单元 ; 41H 初值为01101101B ; 位地址 00H=1 ; 定时方式1为10MS:THX=0ECH,TLX=78H ; 串行口以方式0工作,不需初始化 2.参考程序 LPOUT EQU 41H ;输出缓冲区 DISP EQU 0DE00H ;显示子程序入口 ; ORG 0000H START: AJMP MAIN ; ORG 000BH ;定时器0中断服 AJMP TINT0 ;务
[单片机]
KL03:飞思卡尔再刷最小MCU记录
2013年2月,飞思卡尔推出了业界当时最小的一颗32位ARM MCU KL02,而现在,这一纪录又被改写。近日,飞思卡尔推出的KL03微控制器比KL02尺寸还要小15%,封装尺寸为1.6 * 2.0m。(对比KL02的1.9 *2.0mm),同样采用Chip-Scale晶圆级封装。 如图所示,KL03还不如一个高尔夫球的球窝大。 Kinetis KL03 MCU完美结合了Kinetis L系列的能效与增强型低功耗功能(包括注册文件、SRTC、低功耗UART以及额外的低功耗唤醒引脚)。Kinetis KL03 MCU可与 超过900 Cortex-M产品实现代码兼容。此外,FRDM-KL03Z飞思卡尔自
[半导体设计/制造]
KL03:飞思卡尔再刷最小<font color='red'>MCU</font>记录
量产发布!国民技术首款车规级MCU N32A455上市
2023年2月20日,国民技术在深圳正式推出兼具通用性、硬件安全性和车规级高可靠性等优势特性的N32A455系列车规级MCU并宣布量产。这是继N32S032车规级EAL5+安全芯片之后,国民技术发布的符合AEC-Q100车规标准的首款主流型车规MCU产品。 汽车领域“新三化”驱动车用MCU芯片快速升级换代,对芯片性能、可靠性、适配性、安全性等方面提出了更高要求,N32A455系列车规MCU应运而生。芯片采用40nm车规级制程、搭载Arm® Cortex®-M4内核 + FPU,支持DSP指令和MPU,工作主频高达144MHz,采用市场主流配置,具有高处理性能、丰富的模拟外设与通信接口资源,以及硬件级安全和AEC-Q100
[汽车电子]
量产发布!国民技术首款车规级<font color='red'>MCU</font> N32A455上市
【GD32 MCU 入门教程】GD32 MCU 常见外设介绍(7)I2C 模块介绍
7.1.I2C 基础知识 I2C(Inter-Integrated Circuit)总线是一种由Philips公司开发的两线式串行总线,用于内部IC控制的具有多端控制能力的双线双向串行数据总线系统,能够用于替代标准的并行总线,连接各种集成 电路和功能模块。I2C器件能够减少电路间的连接,减少电路板的尺寸,降低硬件成本并提高系统的可靠性。I2C总线传输模式具有向下兼容性,传输速率标准模式下可达100kbps,快速模式下可 达400kbps,高速模式下可达3.4Mbps。 为了清楚起见,在此对I2C通信中关于设备的基本概念进行简要讲解。 ① 发送设备:发送数据到总线上的设备。 ② 接收设备:从总线上接收数据的设备。 ③ 主设备:启
[单片机]
【GD32 <font color='red'>MCU</font> 入门教程】GD32 <font color='red'>MCU</font> 常见外设介绍(7)I2C 模块介绍
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved