初始化仓库

This commit is contained in:
2025-08-31 21:43:17 +08:00
commit be600d0769
45 changed files with 22852 additions and 0 deletions

91
Source/hx711.c Normal file
View File

@@ -0,0 +1,91 @@
#include "hx711.h"
#include "gpio.h"
uint32 hx711_last_read_value[10];
void hx711_init()
{
gpio_mode(HX711_DT_PIN, GPIO); // 设置DT引脚为推挽输出
gpio_mode(HX711_SCK_PIN, GPIO); // 设置SCK引脚为推挽输出
gpio_set_level(HX711_SCK_PIN, 0); // 初始化SCK为低电平
gpio_set_level(HX711_DT_PIN, 1); // 初始化DT为高电平
}
uint32 hx711_read_set(HX711_ch_enum next_ch,uint8 avg_times)
{
uint32 result = 0;
uint8 i;
if(avg_times > 10) /* 限制平均次数最大值为10 */
{
avg_times = 10;
}
gpio_set_level(HX711_SCK_PIN, 0); /* SCK低电平开始读数据 */
gpio_set_level(HX711_DT_PIN, 1); /* 确保DT高电平等待HX711准备好数据 */
while(gpio_get_level(HX711_DT_PIN) == 1); /* 等待HX711准备好数据 */
for(i = 0; i < 24; i++)
{
gpio_set_level(HX711_SCK_PIN, 1); /* SCK高电平 */
result <<= 1; /* 左移一位 */
if(gpio_get_level(HX711_DT_PIN) == 1)
{
result |= 0x01; /* 如果DT为高电平设置最低位为1 */
}
gpio_set_level(HX711_SCK_PIN, 0); /* SCK低电平 */
}
for(i = 0; i < next_ch; i++)
{
gpio_set_level(HX711_SCK_PIN, 1); /* SCK高电平 */
_nop_();
_nop_();
gpio_set_level(HX711_SCK_PIN, 0); /* SCK低电平 */
}
for(i = 0; i < 9; i++)
{
hx711_last_read_value[i] = hx711_last_read_value[i + 1]; /* 将之前的读取值向前移动 */
}
hx711_last_read_value[9] = result; /* 将当前读取的值存入最后一个位置 */
result = 0;
for(i = 0; i < avg_times; i++)
{
result += hx711_last_read_value[i]/avg_times; /* 累加读取的值 */
}
return result; /* 返回读取到的数据 */
}
uint8 hx711_single_read_non_blocking(HX711_ch_enum next_ch)
{
uint32 result = 0;
uint8 i;
gpio_set_level(HX711_SCK_PIN, 0); /* SCK低电平开始读数据 */
gpio_set_level(HX711_DT_PIN, 1); /* 确保DT高电平等待HX711准备好数据 */
if(gpio_get_level(HX711_DT_PIN) == 1)
{
return 0; /* 如果DT为高电平表示HX711未准备好数据 */
}
for(i = 0; i < 24; i++)
{
gpio_set_level(HX711_SCK_PIN, 1); /* SCK高电平 */
result <<= 1; /* 左移一位 */
if(gpio_get_level(HX711_DT_PIN) == 1)
{
result |= 0x01; /* 如果DT为高电平设置最低位为1 */
}
gpio_set_level(HX711_SCK_PIN, 0); /* SCK低电平 */
}
for(i = 0; i < next_ch; i++)
{
gpio_set_level(HX711_SCK_PIN, 1); /* SCK高电平 */
_nop_();
_nop_();
gpio_set_level(HX711_SCK_PIN, 0); /* SCK低电平 */
}
for(i = 0; i < 9; i++)
{
hx711_last_read_value[i] = hx711_last_read_value[i + 1]; /* 将之前的读取值向前移动 */
}
hx711_last_read_value[9] = result; /* 将当前读取的值存入最后一个位置 */
return 1;
}