历史上的今天

今天是:2024年10月12日(星期六)

正在发生

2020年10月12日 | 51单片机+hx711电子秤

发布者:彩虹微笑 来源: 51hei关键字:51单片机  hx711  电子秤 手机看文章 扫描二维码
随时随地手机看文章

单片机源程序如下:

#include

#include

#include

#include "main.h"

#include "LCD1602.h"

#include "HX711.h"

#include "eeprom52.h"


#define uchar unsigned char

#define uint  unsigned int


unsigned long HX711_Buffer = 0;

unsigned long Weight_Maopi = 0;

unsigned long Weight_Maopi_0 = 0;

long Weight_Shiwu = 0;

unsigned int qupi=0;

//键盘处理变量

unsigned char keycode;

unsigned char key_press_num=0;

uint GapValue,GapValue1;


//定义标识

volatile bit FlagTest = 0;                //定时测试标志,每0.5秒置位,测完清0

volatile bit FlagKeyPress = 0;  //有键按下标志,处理完毕清0

//校准参数

//因为不同的传感器特性曲线不是很一致,因此,每一个传感器需要矫正这里这个参数才能使测量值很准确。

//当发现测试出来的重量偏大时,增加该数值。

//如果测试出来的重量偏小时,减小改数值。

//该值可以为小数

//#define GapValue 349

sbit LED=P1^1;

sbit ROW1=P3^0;

sbit ROW2=P3^1;

sbit ROW3=P3^2;

sbit ROW4=P3^3;


volatile bit ClearWeighFlag = 0; //传感器调零标志位,清除0漂


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

void write_eeprom()

{

        SectorErase(0x2000);

        GapValue1=GapValue&0x00ff;

        byte_write(0x2000, GapValue1);

        GapValue1=(GapValue&0xff00)>>8;

        byte_write(0x2001, GapValue1);

        byte_write(0x2060, a_a);        

}


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

void read_eeprom()

{

        GapValue   = byte_read(0x2001);

        GapValue   = (GapValue<<8)|byte_read(0x2000);

        a_a      = byte_read(0x2060);

}


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

void init_eeprom()

{

        read_eeprom();                //先读

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

        {

                GapValue  = 3500;

                a_a = 1;

                write_eeprom();           //保存数据

        }        

}


//显示重量,单位kg,两位整数,三位小数

void Display_Weight()

{

        LCD1602_write_com(0x80+0x40+8);

        if(Weight_Shiwu/10000==0)

        LCD1602_write_data(' ');

        else

        LCD1602_write_data(Weight_Shiwu/10000 + 0x30);

        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);

}


//定时器0初始化

void Timer0_Init()

{

        ET0 = 1;        //允许定时器0中断

        TMOD = 1;       //定时器工作方式选择

        TL0 = 0xb0;     

        TH0 = 0x3c;     //定时器赋予初值

        TR0 = 1;        //启动定时器

}


//定时器0中断

void Timer0_ISR (void) interrupt 1 using 0

{

        uchar Counter;

        TL0 = 0xb0;

        TH0 = 0x3c;     //定时器赋予初值


        //每0.5秒钟刷新重量

    Counter ++;

    if (Counter >= 10)

    {

       FlagTest = 1;

           Counter = 0;

    }

}



//按键响应程序,参数是键值

//返回键值:

//         7          8    9      10(清0)

//         4          5    6      11(删除)

//         1          2    3      12(未定义)

//         14(未定义) 0    15(.)  13(确定价格)


void KeyPress()

{

        if(ROW1==0)   //去皮键

        {

                Delay_ms(5);

                if(ROW1==0)

                {

//                        Get_Maopi();

                        if(qupi==0)

                        qupi=Weight_Shiwu;

                        else

                        qupi=0;

                        Buzzer=0;

                        Delay_ms(50);

                        Buzzer=1;        

                        while(ROW1==0);

                }

        }

        if(ROW2==0)           //加

        {

                Delay_ms(5);

                if(ROW2==0)

                {

                        while(!ROW2)

                        {

                                key_press_num++;

                                if(key_press_num>=100)

                                {

                                        key_press_num=0;

                                        while(!ROW2)

                                        {

                                                if(GapValue<10000)

                                                GapValue+=10;

                                                Buzzer=0;

                                                Delay_ms(10);

                                                Buzzer=1;

                                                Delay_ms(10);

                                                Get_Weight();

                                        }

                                }

                                Delay_ms(10);

                        }

                        if(key_press_num!=0)

                        {

                                key_press_num=0;

                                if(GapValue<10000)

                                GapValue++;

                                Buzzer=0;

                                Delay_ms(50);

                                Buzzer=1;

                        }

                        write_eeprom();               

                }

        }

        if(ROW3==0)  //减

        {

                Delay_ms(5);

                if(ROW3==0)

[1] [2] [3]
关键字:51单片机  hx711  电子秤 引用地址:51单片机+hx711电子秤

上一篇:MPX4115压力自动检测系统设计
下一篇:单片机+FDC2214手势识别装置设计

推荐阅读

观察今年美国电动汽车市场的情况,非常有意思。在电动汽车的市场,也出现了一款爆款Model 3,有以下的特征。 1)市场开始进一步集聚了传统汽车企业之前的产品开始进一步滞销,消费者对于电动汽车的要求开始提高了,如下所示,前八台车型超过了75%,其中Model 3 拉量以后已经超过1/3了。 累计全年的市场份额 如下图所示,差距越拉越大,几台PHEV由于...
下面以路灯控制器的设计为例说明 ADC12 的使用方法。路灯在一定的亮度值以上将熄灭,而在亮度低于某个数值时亮起来。下面是简图。当亮度较大、光线较强时,光敏电阻的电阻值比较小,这时它与下面 10K 分压,则送达 ADC12 的电压比较高;而当亮度较小、光线较弱时,光敏电阻的电阻值比较大,这时它与下面 10K 分压,则送达 ADC12 的电压比较低。...
今天,小米智能生活官方微博宣布,明天上午10点,小米降噪耳机Air2 Pro开启预售,预热海报显示小米降噪耳机 Air2 Pro 可以消除日常生活中常见的噪声源,例如吵闹街区、地铁轰鸣声、健身房吵闹声、机械厂房的噪声、邻居装修的噪声、车流涌动的公路等等。海报上还有小米降噪耳机Air2 Pro的剪影,与此前曝光的谍照一致,整体造型非常圆润,通体采用黑色...
1.读NorFlash我们首先来实现读flash的函数,我们默认每次读取64个字节,然后我们把读取到的内容打印出来,其中前面打印数值,后面打印字符,对于不可见字符用...代替。void do_read_nor_flash(void){ unsigned int addr; volatile unsigned char *p; int i, j; unsigned char c; unsigned char str[16]; /* 获得地址 */ printf("Enter the...

史海拾趣

问答坊 | AI 解惑

各自领域中所用到的芯片

1.音频pcm编码DA转换芯片cirrus logic的cs4344,cs4334 4334是老封装,据说已经停产,4344封装比较小,非常好用。还有菲利谱的。 8211等。 2.音频放大芯片4558,833,此二芯片都是双运放。为什么不用324等运放 个人觉得应该是对音频 ...…

查看全部问答∨

明明白白选择晶振

Paul Rako,EDN技术编辑 硅与MEMS振荡器正在加入到高度分化的振荡器市场中石英晶体与陶瓷谐振器的行列。选择正确的应用器件不需要水晶球,不过一些相关事实会有所帮助。  提示   * 陶瓷谐振器的精度为1%至0.1%,与之相比石英晶振为1ppm(百万 ...…

查看全部问答∨

2万个数中找出小20的个数,统计出来

问题:一个正弦波50HZ,20毫秒,每个周期采样2000个点,连续采样10个周期,共2万个点,存在数组中,需要对其中数组绝对值小于20点,进行位置判断,并记录出来,统计发送。针对这个有什么好的快速算法? 常规思路:从数组把数据读出来,记录点数据 ...…

查看全部问答∨

altium designer 6原理图与PCB设计

altium designer 6原理图与PCB设计 [ 本帖最后由 babyblue8 于 2010-7-6 15:51 编辑 ]…

查看全部问答∨

中断程序中关闭中断有没有问题

中断程序中关闭中断有没有问题 看到别人的代码,想不出来有什么问题!…

查看全部问答∨

如何访问Powerpc的immr寄存器

如果知道了immr这个寄存器的地址,可以直接用这个地址访问寄存器吗? 或者是不是需要把这个地址重新映射一下才可以。 刚开始弄这个,问题初级了一点。…

查看全部问答∨

【设计工具】《CPLD、FPGA高级应用开发指南》

目录第1章 可编程逻辑器件与eda技术 1.1 可编程逻辑器件及其特征 1.1.1 简单pld 1.1.2 cpld 1.1.3 fpca 1.1.4 门阵列 1.1.5 标准单元法 1.2 ppga的应用及设计要求 1.2.1 fpga的应用 1.2.2 fpga设计要求 1.3 eda技术简介及软件 ...…

查看全部问答∨

关于stm32 flash问题。

stm32内部flash可以用来当eeprom。用户用的时候可以随便用哪页(主存储区)?会不会和代码空间冲突,用时会不会把存代码的存储页擦除?…

查看全部问答∨

教你一步步为beaglebone制作linux系统

从同学那借了块狗板过来,写了点基础的东西。 第一个文件是从TI网站下一个安装包,并根据提供的文档制作成可用于启动的TF卡, 其中遇到的一些问题,在我的系统上都已经解决了。 第二个文件是用于测试linux下串口的文件。希望对大家有用。…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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