找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5356|回复: 5
打印 上一主题 下一主题
收起左侧

分享一个STM32F103写的HX711电子秤头文件

[复制链接]
跳转到指定楼层
楼主
ID:285545 发表于 2018-5-14 11:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我来试试怎么样发贴~
来吧~
w我也是初学,大家见谅哈



HX711.zip (1.78 KB, 下载次数: 66)




#ifndef __HX711_H
#define __HX711_H         
#include "sys.h"

        
#define HX711_PORT        GPIOA        //定义IO接口
#define HX711_DT        GPIO_Pin_11        //定义IO接口
#define HX711_SK        GPIO_Pin_12        //定义IO接口
extern unsigned long HX711_init_Read ;
void HX711_Init();                                  //初始化
unsigned long HX711_Read();//读数据
float HX711_Weight();                        //读出当前重量 单位g        
u8 HX711_WaitData(float);
#endif



/*

HX711-是24位AD 芯片。
两路差分输入,默认128 增益。
串口输出。

*/
#include "sys.h"
#include "hx711.h"
#include "delay.h"
#include "led.h"
#include "usart.h"
unsigned long HX711_init_Read=0;        //全局变量
void HX711_Init(){//初始化
        u8 a =0;
        unsigned long c=0;
        GPIO_InitTypeDef  GPIO_InitStructure;
                //HX711_DT 为输入初始化
          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);      
    GPIO_InitStructure.GPIO_Pin = HX711_DT; //选择端口号(0~15或all)                        
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //选择IO接口工作方式         
        GPIO_Init(HX711_PORT, &GPIO_InitStructure);
          //HX711_SK 为输出初始化   
    GPIO_InitStructure.GPIO_Pin = HX711_SK; //选择端口号(0~15或all)                        
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //选择IO接口工作方式      
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置IO接口速度(2/10/50MHz)   
        GPIO_Init(HX711_PORT, &GPIO_InitStructure);        
        delay_ms(10);
        for(a=0;a<2;a++){
                c += HX711_Read();
                delay_ms(3);
        };
        HX711_init_Read =HX711_Read();        //作为初始的值
        delay_ms(50);
}

unsigned long HX711_Read(){//读取HX711的数值
  unsigned long Count=0;
        u8 a=0;
        GPIO_ResetBits(HX711_PORT,HX711_SK);        //将SK 拉低 等待数据到来
        delay_us(1);
        while(GPIO_ReadInputDataBit(HX711_PORT,HX711_DT));        //等待DT变低 说明开始传输数据
        delay_us(1);        //最小值 0.1us
        for(a=0;a<24;a++){//前24个数据
                GPIO_SetBits(HX711_PORT,HX711_SK);//拉高 SK
                Count = Count<<1;
                delay_us(1);//最大值50us 最小值0.2us
                GPIO_ResetBits(HX711_PORT,HX711_SK);        //拉低 SK
                if(GPIO_ReadInputDataBit(HX711_PORT,HX711_DT))//收到 1
                        Count++;        
                delay_us(1);//最小值0.2us
        };
        GPIO_SetBits(HX711_PORT,HX711_DT);//拉高 SK
        Count = Count^0x800000;
        GPIO_ResetBits(HX711_PORT,HX711_DT);        //拉低 SK
        delay_us(1);
        return Count;
}
   
float HX711_Weight(){//读取当前数值 并转化为g 返回
//        unsigned long b=0;
        unsigned long count = 0;        //读取数值
        float weight=0.0;
//        b = HX711_Read();
//        delay_ms(5);
        count = HX711_Read();
        delay_us(2);
        weight = (long)(count>>7)-(long)(HX711_init_Read>>7);        //(long)(HX711_init_Read>>5);//差值为当前数值
        weight = weight/16.84;
        delay_us(2);
        return weight;
}

u8 HX711_WaitData(float weight){//讲重量换算成数值 然后一直等待数值
        int MachineData =0;
        int count=0;
        MachineData = (int)((weight*16.84)+(HX711_init_Read>>7));
        GPIO_SetBits(LEDPORT,LED1);
        printf("MachineData = %d \r\n" ,MachineData);
        count = (int)(HX711_Read()>>7);        //读取
        if(MachineData>=count){//设定值大于当前值
                while(MachineData - count > 10){//循环对比
                        delay_ms(100);
                        count = (int)(HX711_Read()>>7)+20;        //读取
                        printf("count = %d \r\n",count);
                };
                GPIO_ResetBits(LEDPORT,LED1);
                return 1;
        }else{        //设定值小于当前值
                while(count- MachineData > 10){//循环对比
                        delay_ms(100);
                        count = (int)(HX711_Read()>>7);        //读取
                        printf("count = %d \r\n",count);
                };
                GPIO_ResetBits(LEDPORT,LED1);
                return 1;
        }
}
        

/*278014   270079
选择IO接口工作方式:
GPIO_Mode_AIN 模拟输入
GPIO_Mode_IN_FLOATING 浮空输入
GPIO_Mode_IPD 下拉输入
GPIO_Mode_IPU 上拉输入
GPIO_Mode_Out_PP 推挽输出
GPIO_Mode_Out_OD 开漏输出
GPIO_Mode_AF_PP 复用推挽输出
GPIO_Mode_AF_OD 复用开漏输出
*/


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:285545 发表于 2018-5-14 11:14 | 只看该作者
国际惯例,自己沙发
回复

使用道具 举报

板凳
ID:302666 发表于 2020-8-22 10:38 | 只看该作者
希望版主深讲
回复

使用道具 举报

地板
ID:815539 发表于 2020-8-22 22:42 来自手机 | 只看该作者
挺好的这就沉了吗
回复

使用道具 举报

5#
ID:271215 发表于 2021-9-8 17:50 | 只看该作者
#include "sys.h"
#include "hx711.h"
#include "delay.h"
#include "led.h"
#include "usart.h"

楼主我就是个小白,这些头文件能给一下吗
回复

使用道具 举报

6#
ID:430492 发表于 2021-9-9 17:14 | 只看该作者
HX711做电子称的案例很多,感谢楼主!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表