初始化仓库
This commit is contained in:
91
Source/hx711.c
Normal file
91
Source/hx711.c
Normal 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;
|
||||
}
|
||||
Reference in New Issue
Block a user