51单片机温湿度DHT11检测及风扇控制代码
时间: 2023-09-03 14:05:53 浏览: 87
(含代码,含仿真)基于51单片机+DHT22+LCD1602简易温湿度检测计+温湿度达阈值控制用电器
5星 · 资源好评率100%
以下是51单片机温湿度DHT11检测及风扇控制代码:
```
#include <reg51.h>
#define DHT11_PIN P1_0
sbit FAN = P1_1;
void delay_us(unsigned int us)
{
while(us--)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
void delay_ms(unsigned int ms)
{
while(ms--)
{
delay_us(1000);
}
}
unsigned char DHT11_Read_Byte(void)
{
unsigned char i, dat = 0;
for(i = 0; i < 8; i++)
{
while(!DHT11_PIN);
delay_us(30);
if(DHT11_PIN)
{
dat |= (1 << (7 - i));
}
while(DHT11_PIN);
}
return dat;
}
void DHT11_Read_Data(unsigned char *temp, unsigned char *humi)
{
unsigned char buf[5];
unsigned char i;
buf[0] = buf[1] = buf[2] = buf[3] = buf[4] = 0;
DHT11_PIN = 0;
delay_ms(18);
DHT11_PIN = 1;
delay_us(30);
while(!DHT11_PIN);
delay_us(80);
if(!DHT11_PIN)
{
while(!DHT11_PIN);
while(DHT11_PIN);
for(i = 0; i < 5; i++)
{
buf[i] = DHT11_Read_Byte();
}
if(buf[0] + buf[1] + buf[2] + buf[3] == buf[4])
{
*humi = buf[0];
*temp = buf[2];
}
}
}
void main()
{
unsigned char temp, humi;
while(1)
{
DHT11_Read_Data(&temp, &humi);
if(temp >= 25)
{
FAN = 1;
}
else
{
FAN = 0;
}
}
}
```
上面的代码中,DHT11_Read_Data()函数通过读取DHT11传感器的数据,获取温度和湿度值,并将它们储存在temp和humi变量中。然后,通过比较temp的值,控制风扇FAN的开关状态。如果温度大于等于25度,风扇就会开启,否则就会关闭。请注意,这个代码只是一个示例,实际应用中,可能需要根据具体情况进行修改。
阅读全文