|
我來(lái)試試怎么樣發(fā)貼~
來(lái)吧~
w我也是初學(xué),大家見(jiàn)諒哈
HX711.zip
(1.78 KB, 下載次數(shù): 66)
2018-5-14 11:08 上傳
點(diǎn)擊文件名下載附件
hx711 下載積分: 黑幣 -5
#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();//讀數(shù)據(jù)
float HX711_Weight(); //讀出當(dāng)前重量 單位g
u8 HX711_WaitData(float);
#endif
/*
HX711-是24位AD 芯片。
兩路差分輸入,默認(rèn)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; //選擇端口號(hào)(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; //選擇端口號(hào)(0~15或all)
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //選擇IO接口工作方式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //設(shè)置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的數(shù)值
unsigned long Count=0;
u8 a=0;
GPIO_ResetBits(HX711_PORT,HX711_SK); //將SK 拉低 等待數(shù)據(jù)到來(lái)
delay_us(1);
while(GPIO_ReadInputDataBit(HX711_PORT,HX711_DT)); //等待DT變低 說(shuō)明開(kāi)始傳輸數(shù)據(jù)
delay_us(1); //最小值 0.1us
for(a=0;a<24;a++){//前24個(gè)數(shù)據(jù)
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(){//讀取當(dāng)前數(shù)值 并轉(zhuǎn)化為g 返回
// unsigned long b=0;
unsigned long count = 0; //讀取數(shù)值
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);//差值為當(dāng)前數(shù)值
weight = weight/16.84;
delay_us(2);
return weight;
}
u8 HX711_WaitData(float weight){//講重量換算成數(shù)值 然后一直等待數(shù)值
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){//設(shè)定值大于當(dāng)前值
while(MachineData - count > 10){//循環(huán)對(duì)比
delay_ms(100);
count = (int)(HX711_Read()>>7)+20; //讀取
printf("count = %d \r\n",count);
};
GPIO_ResetBits(LEDPORT,LED1);
return 1;
}else{ //設(shè)定值小于當(dāng)前值
while(count- MachineData > 10){//循環(huán)對(duì)比
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 開(kāi)漏輸出
GPIO_Mode_AF_PP 復(fù)用推挽輸出
GPIO_Mode_AF_OD 復(fù)用開(kāi)漏輸出
*/
|
評(píng)分
-
查看全部評(píng)分
|