DHT11用51单片机代码怎么写
时间: 2023-06-09 13:07:47 浏览: 91
好的,关于DHT11用51单片机代码的编写,以下是一份示例代码:
```c
#include <reg51.h>
#include <intrins.h>
#define DHT11 P2_0 // 定义DHT11信号连接的单片机口
void delay(unsigned int t) // 延时函数
{
unsigned int a,b;
for(b=t;b>0;b--)
for(a=110;a>0;a--);
}
void request() // 发送开始信号
{
DHT11 = 0;
delay(18);
DHT11 = 1;
delay(40);
while(!DHT11); // 等待DHT11响应
while(DHT11); // 等待DHT11完成响应
}
unsigned char receive() // 接收数据
{
unsigned char i, result=0;
for(i=0; i<8; i++)
{
while(!DHT11); // 等待数据位响应
delay(30);
if(DHT11) // 高电平为1,低电平为0
result = (result<<1) + 1;
else
result <<= 1;
while(DHT11); // 等待数据位完成响应
}
return result;
}
void main()
{
unsigned char hum_h, hum_l, temp_h, temp_l, check;
while(1)
{
request(); // 发送开始信号
hum_h = receive(); // 接收湿度高8位数据
hum_l = receive(); // 接收湿度低8位数据
temp_h = receive(); // 接收温度高8位数据
temp_l = receive(); // 接收温度低8位数据
check = receive(); // 接收校验位数据
if(hum_h+hum_l+temp_h+temp_l == check) // 数据校验
{
// 这里是校验成功后的处理数据代码
}
}
}
```
以上代码中的request()函数用来发送开始信号,receive()函数用来接收数据,hum_h、hum_l、temp_h、temp_l和check分别为湿度高8位、湿度低8位、温度高8位、温度低8位和校验位的数据变量。注释中有细节说明,需要注意的是,该代码中的DHT11信号连接的单片机口是P2_0,如果实际使用中单片机口不相同,需要修改代码中的宏定义。
阅读全文