#define DHT11_DQ GPIO_Pin_0
#define GPIO_DHT11 GPIOA
#define DHT11_DQ_H() GPIO_SetBits(GPIO_PLL,LC72131_CE)
#define DHT11_DQ_L() GPIO_ResetBits(GPIO_PLL,LC72131_CE)
#define dht11_DataOut() {GPIOA->CRL &=0xfffffff0;GPIOA->CRL |=0x00000003;}
#define dht11_DataIn() {GPIOA->CRL &=0xfffffff0;GPIOA->CRL |=0x00000004;}
#define DHT11_Read_DQ() GPIO_ReadInputDataBit(GPIO_DHT11,DHT11_DQ)
/*
*读取DHT11回响信号
*1器件没有响应,请检查DHT11是否正确
*0器件有响应,可以正常操作
*/
u8 Read_Dht11_Ack(void)
{
u8 counter = 0;
dht11_DataIn();
while((DHT11_Read_DQ()==0)&&counter<=100)
{
counter++;
delay_us(1);
}
//DHT11>100,没有响应
if(counter>=100) return 1;
else counter = 0;
while((DHT11_Read_DQ()==1)&&counter<=100)
{
counter++;
delay_us(1);
}
if(counter>=100) return 1;
else counter = 0;
return 0;
}
出来数据一直是0,
下面是我用原子的:出来数据正确
#define DHT11_DQ_IN PAin(0) //数据端口 PA0
//等待DHT11的回应
//返回1:未检测到DHT11的存在
//返回0:存在
u8 DHT11_Check(void)
{
u8 retry=0;
DHT11_IO_IN();//SET INPUT
while ((DHT11_DQ_IN==0)&&retry<100)//DHT11会拉低40~80us
{
retry++;
delay_us(1);
};
if(retry>=100)return 1;
else retry=0;
while ((DHT11_DQ_IN==1)&&retry<100)//DHT11拉低后会再次拉高40~80us
{
retry++;
delay_us(1);
};
if(retry>=100)return 1;
return 0;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>