STC89C51单片机+HX711称重模块电子秤程序

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

电子秤是基于STC89C51单片机,以及HX711称重模块,利用单片机控制A/D转换,屏幕数据显示,键盘实时输入,设计方案能够易于各种场合使用。


单片机源程序如下:

#include

#include

#include

#include "main.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 p=0;

//键盘处理变量

unsigned char keycode;

unsigned char key_press_num=0;


uint GapValue,GapValue1;

bit flag_cz=0;


uchar code  LEDData[]={0x5F,0x44,0x9D,0xD5,0xC6,0xD3,0xDB,0x47,0xDF,0xD7,0xCF,0xDA,0x9B,0xDC,0x9B,0x8B}; //数码管显示码表

//定义标识

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;

sbit DIAN = P0^5;                        //小数点


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();           //保存数据

        }       

}

/*****显示开机初始化等待画面*****/

void Disp_init(void)   

{

        P0 = ~0x80;      //显示----

        P2 = 0xBF;                 //依次打开各位

        Delay_ms(1);                 //延时

        P2 = 0xEF;

        Delay_ms(1);   

        P2 = 0xFB;

        Delay_ms(1);

        P2 = 0xFE;

        Delay_ms(1);

        P2 = 0xFF;         //关闭显示

}


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

void Display_Weight()

{

    P0 = ~LEDData[Weight_Shiwu%10];      //

        P2 = 0xBF;                 //打开位

        Delay_ms(1);                 //延时

        P2 = 0xff;         //关闭显示

        P0=~LEDData[Weight_Shiwu%100/10];    //显示个位

        P2 = 0xEF;

        Delay_ms(1);

        P2 = 0xff;         //关闭显示

        P0 =~LEDData[Weight_Shiwu%1000/100];    //显示十位

        P2 = 0xFB;

        Delay_ms(1);

        P2 = 0xff;         //关闭显示

        P0 =~LEDData[Weight_Shiwu%10000/1000];    //显示百位

        DIAN = 0;         //显示小数点

        P2 = 0xFE;

        Delay_ms(1);

        P2 = 0xff;         //关闭显示

}


//定时器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)   //清零键

        {

                Display_Weight();

                if(ROW1==0)

                {

                        if(qupi==0)

                        qupi=Weight_Shiwu;

                        else

                        qupi=0;

                        Buzzer=0;

                        for(p=0;p<10;p++)

                        Display_Weight();

                        Buzzer=1;       

                        while(ROW1==0) Display_Weight();

                }

        }

        if(ROW2==0)           //加

        {

                Display_Weight();

                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;

                                                for(p=0;p<2;p++)

                                                Display_Weight();

                                                Buzzer=1;

                                                for(p=0;p<2;p++)

                                                Display_Weight();

                                                Get_Weight();

                                        }

[1] [2]
关键字:STC89C51  单片机  HX711 引用地址:STC89C51单片机+HX711称重模块电子秤程序

上一篇:详细LCD1602串行或者并行数据传输51单片机程序
下一篇:DS18B20单片机数字温度计

推荐阅读最新更新时间:2024-11-08 10:39

利用USB2.0单片机实现全数字图像的实时采集
摘要:主要论述利用USB2.0单片机接口技术实现高分辨率(640%26;#215;480点阵以上)、快速(24帧/s以上)全数字图像的实时采集、传输的原理、方法和系统实现,以及相应的固件程序设计。 关键词:USB2.0 接口技术 数字图像 单片机 引言 传统的方法是用视频采集卡(如1394)对视频信号进行采集,利用相应的软件传给PC机,既不方便,也不经济。本文介绍一种利用Cypress公司2002年发布的世界上第一块带 有USB2.0接口的芯片CY7C68013与PC机(主板为支持USB2.0的华硕主板PB533)实现了高分辨率(640%26;#215;480点阵以上)、快速(24帧/s以上)、全数字图像的实时采集系统。
[单片机]
基于Proteus的单片机演奏音乐的实现
当前的很多用单片机实现音乐演奏的系统都是利用开发板结合仿真器实现的,这种方法不是很复杂,实现也较方便,但是调试不是很方便,且成本也较高。 本文提出的一种基于Proteus 的单片机演奏音乐的方法,非常简单实用,且该方法基于软件来实现的,所以成本非常低,调试方便,效果也很不错,适合于爱好音乐的单片机学习者。 单片机系统的设计分两大部分:硬件设计部分和软件设计部分。 1 硬件设计 硬件部分比较简单,如果在开发板上做实验可仿下面图1 电路连接。 AT89C51 单片机的P2.5 口控制一个8550 的三极管,三极管控制电磁蜂鸣器的电源通断。 如果用Proteus 软件来仿真的话,电路更加简单,见图2。 图2 在Prot
[单片机]
基于Proteus的<font color='red'>单片机</font>演奏音乐的实现
AVR单片机主要特性简介
AVR 单片机 是1997年由ATMEL公司研发出的增强型内置Flash的RISC(Reduced Instruction Set CPU) 精简指令集高速8位单片机。AVR的单片机可以广泛应用于计算机外部设备、工业实时控制、仪器仪表、通讯设备、家用电器等各个领域。 AVR的主要特性   高可靠性、功能强、高速度、低功耗和低价位 , 一直是衡量 单片机 性能的重要指标,也是单片机占领市场、赖以生存的必要条件。   早期 单片机 主要由于工艺及设计水平不高、功耗高和抗干扰性能差等原因,所以采取稳妥方案:即采用较高的分频系数对时钟分频,使得指令周期长,执行速度慢。以后的 CMOS单片机虽然采用提高时钟频率和缩小分频系数等措施
[单片机]
单片机设计频率计
实验目标 频率计是我们经常会用到的实验仪器之一,本实验要使用单片机和计数电路及液晶器件来设计一个宽频的频率计。 期望达到10Hz-1.1G范围的频率精确测量。 实验电路图(初步方案) 1) 计数及显示电路: (点击图片放大) 2)前置放大及分频电路: 那位大侠有好的电路??? 设计思路 频率的测量实际上就是在1S时间内对信号进行计数,计数值就是信号频率。用单片机设计频率计通常采用两种办法,1)使用单片机自带的计数器对输入脉冲进行计数,或者测量信号的周期;2)单片机外部使用计数器对脉冲信号进行计数,计数值再由单片机读取。 由于单片机自带计数器输入时钟的频率通常只能是系统时钟频率
[单片机]
用<font color='red'>单片机</font>设计频率计
盛群再推出HT68F60、HT66F60Flash MCU系列
继全新系列的Enhanced Flash MCU,I/O型的HT68Fxx系列及A/D型的HT66Fxx系列后,盛群再推出12KWords HT68F60及HT66F60系列,全系列符合工业上-40℃ ~ 85℃工作温度与高抗噪声的性能要求,搭配盛群ICP (In-Circuit Programming) 技术方案,可轻易实现成品韧体更新,全系列搭载非挥发性数据存储器(EEPROM),可于生产过程或成品运作中储存相关调校参数与数据,并且不因电源关闭而消失,可有效提高生产效能与产品弹性。 Enhanced Flash MCU系列Program Memory为12K Words,SRAM 576 Bytes,内建256 B
[单片机]
盛群再推出HT68F60、HT66F60Flash <font color='red'>MCU</font>系列
瑞萨从闪存市场撤退 主攻闪存MCU
  五年前由日立与三菱电机的半导体业务合并而成的瑞萨科技(Renesas Technology),已完成从单机闪存市场退出的计划。   瑞萨董事长兼首席执行官Saturo Ito一年前宣布了逐步退出闪存市场的计划,并预测闪存占其2007财年营业收入的10%左右。   瑞萨科技欧洲业务的首席执行官Matthew Trowbridge表示:“我们停止开发4Gb以及容量更大的闪存,计划在2008财年完全退出这个市场。”他还指出,由于闪存价格继续低迷不振,单机闪存占2007财年瑞萨9505亿日元(约合92亿美元)的营业收入的5%。   Trowbridge强调,虽然有些公司可能已尝试卖掉或者干脆关闭闪存业务,并解雇员工,但瑞萨的选择
[焦点新闻]
单片机stm32 USART串口实际应用解析
  stm32作为现在嵌入式物联网单片机行业中经常要用多的技术,相信大家都有所接触,今天这篇就给大家详细的分析下有关于stm32的出口,还不是很清楚的朋友要注意看看了哦,在最后还会为大家分享有些关于stm32的视频资料便于学习参考。   什么是串口   UART : Universal Asynchronous Receiver/Transmitter 通用异步收发器   USART : Universal Synchronous Asynchronous Receiver/Transmitter   通用同步/异步收发器   一种是常用也是最简单的串行数据传输协议。数据线只需要两根就可以实现全双工。   Tx: 发送数据线
[单片机]
MSP432单片机学习记录(Code Composer Studio)
1、Code Composer Studio上手 官网地址如下,可自行下载安装,这个是免费的 https://www.ti.com.cn/tool/cn/CCSTUDIO 下面打开之后是下面这样的页面,下面是红色标志是一个图形化配置的页面,但是今天我要用的P401R这个板卡的图形化工具好像被下架了,因此这里只是展示下,打开就能看到的。 打开如下,输入432就可以看到一些相关的资源,然后就可以下载库了 也可以去官网下载SDK,位置如下 https://www.ti.com/tool/SIMPLELINK-MSP432-SDK 下面是新建工程,这里可以直接新建一个工程(在上面说的图形化配置里面找不到432P系列
[单片机]
MSP432<font color='red'>单片机</font>学习记录(Code Composer Studio)
小广播
设计资源 培训 开发板 精华推荐

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

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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