C51的DHT11(温湿度传感器)编程
时间: 2023-09-16 15:14:28 浏览: 211
好的,以下是基于C51单片机的DHT11温湿度传感器编程步骤:
1. 定义端口:将DHT11的数据线连接到C51单片机的I/O端口上,定义该端口为输入端口。
2. 发送起始信号:将数据线拉低至少18ms,然后将数据线拉高20~40us,等待DHT11响应。
3. 接收响应信号:DHT11会通过数据线发送一个80us低电平的响应信号,然后再发送一个80us的高电平信号。
4. 接收数据:DHT11会发送40位的数据,每一位数据都是50us的低电平,或者26~28us的高电平,高电平的时间长短表示0或1。
5. 解析数据:将接收到的40位数据解析,分别得到温度和湿度的数值,并计算出校验和。
6. 显示数据:将温度和湿度的数值显示在液晶屏幕上或者通过串口发送给计算机。
以下是示例代码:
```
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit DHT11=P1^4; //将DHT11数据线连接到P1.4口上
uchar R_data_H,R_data_L,T_data_H,T_data_L,checkdata; //定义温湿度和校验和变量
void DHT11_delay(uint i) //延时函数
{
while(i--);
}
void DHT11_start() //发送起始信号
{
DHT11=0;
DHT11_delay(18000);
DHT11=1;
DHT11_delay(40);
while(DHT11==1);
while(DHT11==0);
while(DHT11==1);
}
uchar DHT11_read_byte() //读取一个字节的数据
{
uchar i,j;
uchar dat=0;
for(j=0;j<8;j++)
{
while(DHT11==0);
DHT11_delay(30);
if(DHT11==1)
{
i=1;
while(DHT11==1);
}
else
{
i=0;
}
dat=(dat<<1)|i;
}
return dat;
}
void DHT11_read_data() //读取温湿度数据
{
DHT11_start();
R_data_H=DHT11_read_byte();
R_data_L=DHT11_read_byte();
T_data_H=DHT11_read_byte();
T_data_L=DHT11_read_byte();
checkdata=DHT11_read_byte();
}
void main()
{
uchar temp1,temp2,humi1,humi2;
uchar buf[6]; //定义一个数组,用于存放温湿度数据
while(1)
{
DHT11_read_data(); //读取温湿度数据
if(R_data_H+R_data_L+T_data_H+T_data_L==checkdata) //校验数据是否正确
{
temp1=T_data_H/10;
temp2=T_data_H%10;
humi1=R_data_H/10;
humi2=R_data_H%10;
buf[0]=temp1+'0';
buf[1]=temp2+'0';
buf[2]='.';
buf[3]=T_data_L/10+'0';
buf[4]=T_data_L%10+'0';
buf[5]='\0';
//将温度数据存储到数组中
//依次为:整数部分、小数点、小数部分、结束符
//湿度数据同理
//将温湿度数据显示在LCD上或者通过串口发送给计算机
}
}
}
```
以上是一个简单的DHT11温湿度传感器编程示例,供您参考。
阅读全文