写程序51单片机dht11湿度
时间: 2023-09-22 14:10:58 浏览: 82
以下是基于51单片机的DHT11湿度传感器的示例代码:
```c
#include <reg51.h>
#define DHT11_PIN P1_0
void DelayUs(unsigned int t)
{
while (t--)
{
_nop_();
}
}
void DelayMs(unsigned int t)
{
while (t--)
{
DelayUs(1000);
}
}
void DHT11_Start()
{
DHT11_PIN = 0;
DelayMs(18);
DHT11_PIN = 1;
DelayUs(30);
}
unsigned char DHT11_Check_Response()
{
unsigned char response = 0;
DelayUs(40);
if (!DHT11_PIN)
{
DelayUs(80);
if (DHT11_PIN)
{
response = 1;
}
else
{
response = -1;
}
}
while (DHT11_PIN)
{
;
}
return response;
}
unsigned char DHT11_Read_Byte()
{
unsigned char i, data = 0;
for (i = 0; i < 8; i++)
{
while (!DHT11_PIN)
{
;
}
DelayUs(30);
if (DHT11_PIN)
{
data |= (1 << (7 - i));
}
while (DHT11_PIN)
{
;
}
}
return data;
}
void main()
{
unsigned char hum_int, hum_dec, temp_int, temp_dec, check_sum;
while (1)
{
DHT11_Start();
if (DHT11_Check_Response() == 1)
{
hum_int = DHT11_Read_Byte();
hum_dec = DHT11_Read_Byte();
temp_int = DHT11_Read_Byte();
temp_dec = DHT11_Read_Byte();
check_sum = DHT11_Read_Byte();
if (check_sum == hum_int + hum_dec + temp_int + temp_dec)
{
// 湿度整数部分 hum_int
// 湿度小数部分 hum_dec
// 温度整数部分 temp_int
// 温度小数部分 temp_dec
}
}
DelayMs(5000); // 5秒钟读取一次
}
}
```
这里使用P1.0引脚连接DHT11传感器。湿度整数部分、湿度小数部分、温度整数部分和温度小数部分都可以从返回的数据中解析出来,并且可以通过串口或其他方式输出给用户。
阅读全文