HX711.H
#ifndef _HX711_H_
#define _HX711_H_
#include "sys.h"
#define ADC1_DR_Address ((uint32_t)0x4001244C) //ADC1这个外设的地址(查参考手册得出)
#define ADCPORT GPIOA //定义ADC接口
#define ADC_CH0 GPIO_Pin_0 //定义ADC接口 电压电位器
#define ADC_CH1 GPIO_Pin_1 //定义ADC接口 电压电位器
void Init_Hx711(void); //初始化
uint32_t Hx_Read(void); //读取值
#endif
HX711.C
#include "delay.h"
#include "hx711.h"
void Init_Hx711()
{
GPIO_InitTypeDef GPIO_InitStructure; //定义DMA初始化结构体
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC,ENABLE); //接口全开
//DT <-----> PA0
//SCK <-----> PA1
// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //选择IO接口工作方式
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //DT设置为浮空输入
GPIO_InitStructure.GPIO_Pin = ADC_CH0; //选择端口
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //设置输出
GPIO_InitStructure.GPIO_Pin = ADC_CH1; //选择端口
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
/**
* @brief HX711读数据
* @param None
* @return HX711一次读取到的数据
* @details val为24位数据,程序循环读取24次DT引脚电平数据,通过移位操
* 作写入val,注意!返回的并不是实际重量,只是一个采样电平值
*/
uint32_t Hx_Read(void) //增益128
{
uint32_t val = 0;
uint8_t i = 0;
GPIO_SetBits(GPIOA, GPIO_Pin_0); //初始状态DT引脚为高电平
GPIO_ResetBits(GPIOA, GPIO_Pin_1); //初始状态SCK引脚为低电平
//判断模块是否准备好
while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0));
delay_us(1);
//sck 拉低
//GPIO_ResetBits(GPIOB,GPIO_Pin_6);
//再次判断是否准备好
while(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0));
for(i=0; i<24; i++)
{
delay_us(100);
GPIO_SetBits(GPIOA,GPIO_Pin_1);
val=val<<1;
delay_us(1);
GPIO_ResetBits(GPIOA,GPIO_Pin_1);
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0))
val++;
delay_us(1);
}
GPIO_SetBits(GPIOA,GPIO_Pin_1);
val = val^0x800000;
delay_us(1);
GPIO_ResetBits(GPIOA,GPIO_Pin_1);
delay_us(1);
return val;
}
#include "hx711.h"
#include "stm32f10x.h" //STM32头文件
#include "sys.h"
#include "delay.h"
#include "touch_key.h"
#include "relay.h"
#include "oled0561.h"
#include "adc.h"
uint32_t b;
int main(void)
{
delay_ms(500); //上电时等待其他器件就绪
RCC_Configuration(); //系统时钟初始化
//TOUCH_KEY_Init();//触摸按键初始化
RELAY_Init();//继电器初始化
ADC_Configuration(); //ADC初始化设置
I2C_Configuration();//I2C初始化
OLED0561_Init(); //OLED初始化
Init_Hx711(); //HX711初始化
while(1){
b= Hx_Read();
//将光敏电阻的ADC数据显示在OLED上
OLED_DISPLAY_8x16(6,10*8,b/1000+0x30);//
OLED_DISPLAY_8x16(6,11*8,b%1000/100+0x30);//
OLED_DISPLAY_8x16(6,12*8,b%100/10+0x30);//
OLED_DISPLAY_8x16(6,13*8,b%10+0x30);//
delay_ms(500); //延时
}
}