HX711芯片,用来制作台秤,编程之后发现DATA引脚一直保持,请大神解惑!谢谢

2019-08-19 20:01发布

#include "HX711.h" //读711 AD数据子程序
#include "LED.h"
//sbit ADDO=PA^0;
//sbit ADSK=PA^1;
#define ADSK_H   GPIO_SetBits(GPIOA,GPIO_Pin_1)
#define ADSK_L   GPIO_ResetBits(GPIOA,GPIO_Pin_1)
#define ADDO_H   GPIO_SetBits(GPIOA,GPIO_Pin_2)
#define ADDO_L   GPIO_ResetBits(GPIOA,GPIO_Pin_2) void static Delay(u32 del)
{
   while(del--);
} void GPIO_Configuration_HX711(void)
{
 
 GPIO_InitTypeDef  GPIO_InitStructure;
  
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);  //使能PA端口时钟
 
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;     //ADSK-->A.1 端口配置
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;    //推挽输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   //IO口速度为50MHz
 GPIO_Init(GPIOA, &GPIO_InitStructure);      //根据设定参数初始化GPIOA.0  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;        //ADDO-->A.2 端口配置, 推挽输出
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;    //上拉输入,IO口速度为50MHz
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   //IO口速度为50MHz
 GPIO_Init(GPIOA, &GPIO_InitStructure);        //根据设定参数初始化GPIOA.1
}
 
u32 ReadCount(void)
{
   u32 Count;
   u16 ADval;
   u8 i;
   ADDO_H;
   Delay(5);
   ADSK_L;
   Count=0; 
   while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==1);  
   for(i=0;i<24;i++)//读取24个bit
   {
      ADSK_H;
   Delay(5);
   Count=Count<<1;
   ADSK_L;
   Delay(5);
   if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==1)Count++;
   }
   ADSK_H; //发送第25个脉冲,表示下载转换使用A通道128bd
   Delay(5);
   ADSK_L;
   Delay(5);
   ADval = (int)(Count>>8); //取高十六位有效值
  
   return(ADval);
} u32 Weighing(void)
{
   u32 X1;
   u8 t,t1,count=0;
   u16 databuffer[30];  //采样缓存区
   u16 temp=0;
   u32 X;
   do{      //循环读取30次
       X=ReadCount();
    if(X>100)   //如果是在测量有效区范围的值,标记此读数有效
    {
       databuffer[count]=X;
    count++;
    }
   }while(count<30);
   if(count==30)  //每次读数一定要读到30次数据,否则丢弃
   {
    do
    {
    t1=0;
    for(t=0;t<count-1;t++)
    {
        if(databuffer[t]>databuffer[t+1])//升序排列
      {
          temp=databuffer[t+1];
       databuffer[t+1]=databuffer[t];
       databuffer[t]=temp;
       t1=1;
      }
    }     
    }while(t1);    
   }
   X1=0;
   //从排序过的数组里抽取连续的10组数据,进行取平均值,获得较高的精度
   for(count=10;count<20;count++)
   {
      X1=X1+databuffer[count];
   }
   X1=X1/10;
   
   return X1;
}
 
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。