这是我写的其头文件。
/*/////
这是HX711的头文件。
*/
// 可能需要改动的端口************************
#define DT PC4 //数据接收端口 //**
#define SCK PC5 //脉冲发出端口 //**
//**
#define Ctrl_PORT DDRC //控制端口 //**
#define STATU_PORT PORTC //端口状态 //**
#define STATU_PIN ((PINC & 0X10)==0X10)//**
//引脚状态 //**
//*******************************************
#include <avr/io.h>
#include <util/delay.h>
#define INT8U unsigned char
#define INT16U unsigned int
float MZ_Float = 0.0;
long DataZero = 0;
unsigned long ReadCount(void)
{
unsigned long Count=0;
Ctrl_PORT |= _BV(SCK) ; //pc4 为数据输入口 pc5为脉冲输出口
Ctrl_PORT &=~_BV(DT);
STATU_PORT &=~_BV(SCK); //等待数据 sck应为低
STATU_PORT |= _BV(DT);
_delay_ms(2);
while(STATU_PIN); //等待SD变为0
for (INT8U i=0;i<24;i++)
{
Ctrl_PORT|= _BV(SCK); //将SCK设为1
Count =Count<<1;
Ctrl_PORT&=~_BV(SCK); //将SCK设为0
if (STATU_PIN)
{
Count ++;
}
}
Ctrl_PORT|= _BV(SCK); //将SCK设为1
Count = Count^0X800000;
Ctrl_PORT&=~_BV(SCK); //将SCK设为0
Count = (Count>>10)<<10;
return (Count/1000);
}
//**将HX711的数值转换为 g 单位**//
float DataDeal_Gram(long Data_count)
{
float yinzi =1;
long chengshu = (Data_count - DataZero)/0.318;
// if (chengshu<=20 && chengshu>10)
// {
// yinzi = 1.1;
// }
if (chengshu>100 && chengshu <200)
{
yinzi = 1.015;
}
float uWeight_Shiwu =(Data_count-DataZero)/0.318;
_delay_ms(1);
return (uWeight_Shiwu*yinzi);
}
//** 将归零 **//
void ReadZero()
{
_delay_ms(100);
DataZero = ReadCount();
}
现在可以读取数值,但是有时候归零后,0会跳到3.14
是哪里出问题了吗?你们有更好的程序参考吗?
谢谢各位了
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>