一、DHT11温湿度传感器简介
二、Proteus电路设计
三、使用Keil uVision4 编写51单片机代码
void DHT11_start()
{
Data=1;
DHT11_delay_us(2);
Data=0;
DHT11_delay_ms(30); //延时18ms以上
Data=1;
DHT11_delay_us(30);
}
uchar DHT11_rec_byte() //接收一个字节
{
uchar i,dat=0;
for(i=0;i<8;i++)
{
while(!Data); //等待50us低电平过去
DHT11_delay_us(8); //延时60us,如果还为高则数据为1,否则为0
dat<<=1;
if(Data==1)
dat+=1;
while(Data); //等待数据线拉低
}
return dat;
}
void DHT11_receive() //接收40位的数据
{
uchar R_H,R_L,T_H,T_L,RH,RL,TH,TL,revise;
DHT11_start();
if(Data==0)
{
while(Data==0); //等待拉高
DHT11_delay_us(40); //拉高后延时80us
R_H=DHT11_rec_byte(); //接收湿度高八位
R_L=DHT11_rec_byte(); //接收湿度低八位
T_H=DHT11_rec_byte(); //接收温度高八位
T_L=DHT11_rec_byte(); //接收温度低八位
revise=DHT11_rec_byte(); //接收校正位
DHT11_delay_us(25);
if((R_H+R_L+T_H+T_L)==revise)
{
RH=R_H;
RL=R_L;
TH=T_H;
TL=T_L;
}
// 数据处理
rec_dat[0]='0'+(RH/10);
rec_dat[1]='0'+(RH%10);
rec_dat[2]='R';
rec_dat[3]='H';
rec_dat[4]=' ';
rec_dat[5]=' ';
rec_dat[6]='0'+(TH/10);
rec_dat[7]='0'+(TH%10);
rec_dat[8]='C';
shidu = RH;
}
}
// 主函数
void main()
{
// 初始化LCD1206
LCD_init();
LCD_send(1,0,"Temperature:",25);
// 延时100ms
DHT11_delay_ms(100);
while(1)
{
DHT11_receive();
LCD_send(2,0,rec_dat,9);
// 判断当前环境湿度 环境湿度>80 雾化器停止工作;
if (shidu > 80) {
wuhuaqi = OFF;
} else {
wuhuaqi = ON;
}
}
}
四、运行仿真效果
五、完整资料下载,免费分享,无解压密码
链接:https://pan.baidu.com/s/1QpThKPu8jHWD7KlRoU9_rw?pwd=i3xo
提取码:i3xo