Table of Contents
1. Introduction to HX711
2. Module Operating Principle
3. Code Implementation
4. Conclusion
01
—
Introduction to HX711
Kimi, start!

In summary, HX711 is essentially an ADC.
02
—
Module Operating Principle
The internal structure diagram of HX711 is as follows:

The working principle of HX711 is as follows:

Inside HX711, there is a controller, and during use, the MCU pins receive data in a timed sequence.
03
—
Code Implementation
(1)hx711.h
#ifndef _HX711_H_
#define _HX711_H_
#include "reg52.h"
#include "intrins.h"
#define HX711_DATA P10 // Assume connected to P1.0
#define HX711_CLK P11 // Assume connected to P1.1
unsigned long Read_HX711(void);
unsigned long Get_weight(void);
unsigned long Get_1kg_weight(void);
void delay_ms(unsigned char ms);
void delay_us(unsigned char us);
#endif
(2)hx711.c
#include "hx711.h"
unsigned int weight_1kg = 0;
void delay_ms(unsigned char ms)
{
{
unsigned char i, j;
_nop_();
_nop_();
_nop_();
i = 11;
j = 190;
do
{
while (--j);
} while (--i);
}while(ms--);
}
void delay_us(unsigned char us)
{
{
_nop_();
_nop_();
}while(us--);
}
unsigned long Get_1kg_weight(void) // Call this function after placing a 1 kg object on the platform
{
weight_1kg = Read_HX711();
return weight_1kg;
}
unsigned long Get_weight(void)
{
unsigned int weight = 0;
weight = Read_HX711();
weight /= weight_1kg;
return weight;
}
unsigned long Read_HX711(void) // CLK is 25, input channel A
{
unsigned long count;
unsigned char i;
HX711_CLK = 0;
count = 0;
while(HX711_DATA); // Wait for DATA to go low
for (i = 0; i < 24; i++) {
HX711_CLK = 1; // CLK goes high, ready to read data bit
count = count << 1; // Shift left by one bit to make room for the next data bit
HX711_CLK = 0; // CLK goes low, actually read data bit on the rising edge
if (HX711_DATA)
count++;
}
HX711_CLK = 1; // Send an extra pulse to set the gain for the next read
count = count ^ 0x800000; // Can convert to negative if needed
HX711_CLK = 0;
return (count);
}
void main(void) {
unsigned long weight;
// Perform any necessary initialization
// ...
while(1) {
weight = Read_HX711();
// Use the read weight value
// ...
}
}
First call the Get_1kg_weight function, then call the Get_weight function.
04
—
Conclusion
Using HX711 is quite simple, mainly focusing on the output of the measurement completion signal.