51单片机读取DH11温湿度传感器数据
dh11.c
#include<reg52.h>
#include<intrins.h>
#include"dh11.h"
sbit Temp_data=P3^6;
extern unsigned int rec_dat[4];
//DHT11起始信号
void DHT11_start()
{
Temp_data=1;
DHT11_delay_us(2);
Temp_data=0;
DHT11_delay_ms(20);
Temp_data=1;
DHT11_delay_us(13);
}
//接收一个字节
unsigned char DHT11_rec_byte()
{
unsigned char i,dat;
for(i=0;i<8;i++)
{
while(!Temp_data);
DHT11_delay_us(8);
dat<<=1;
if(Temp_data==1)
{
dat+=1;
}
while(Temp_data);
}
return dat;
}
//接收温湿度数据
void DHT11_receive()
{
unsigned int R_H,R_L,T_H,T_L;
unsigned char RH,RL,TH,TL,revise;
DHT11_start();
Temp_data=1;
if(Temp_data==0)
{
while(Temp_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]=RH;
rec_dat[1]=RL;
rec_dat[2]=TH;
rec_dat[3]=TL;
}
}
//延时us --2*n+5us
void DHT11_delay_us(unsigned char n)
{
while(--n);
}
//延时ms
void DHT11_delay_ms(unsigned int z)
{
unsigned int i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
dh11.h
#ifndef __DH11_H_
#define __DH11_H_
#include <reg52.h>
void DHT11_delay_us(unsigned char n);
void DHT11_delay_ms(unsigned int z);
void DHT11_start();
unsigned char DHT11_rec_byte();
void DHT11_receive();
#endif
main.c
/*******************************************************************************
* 实验名 :温度显示实验
* 使用的IO :
* 实验效果 :1602显示温度
* 注意 :
*******************************************************************************/
#include<reg52.h>
#include"lcd.h"
#include<intrins.h>
#include<stdio.h>
#include"dh11.h"
sbit Temp_data=P3^6;
/*******************************************************************************
* 函数名 : main
* 函数功能 : 主函数
* 输入 : 无
* 输出 : 无
*******************************************************************************/
unsigned int rec_dat[4];
unsigned char rec_dat_lcd0[6];
unsigned char rec_dat_lcd1[6];
unsigned char rec_dat_lcd2[6];
unsigned char rec_dat_lcd3[6];
//主函数
void main()
{
//unsigned char i,j;
LcdInit();
while(1)
{
DHT11_delay_ms(150);
DHT11_receive();
sprintf(rec_dat_lcd0,"%d",rec_dat[0]);
sprintf(rec_dat_lcd1,"%d",rec_dat[1]);
sprintf(rec_dat_lcd2,"%d",rec_dat[2]);
sprintf(rec_dat_lcd3,"%d",rec_dat[3]);
DHT11_delay_ms(100);
//湿度
ShowString(0x00,"Humi:");
ShowString(0x05,rec_dat_lcd0);
ShowString(0x07,".");
ShowString(0x08,rec_dat_lcd1);
ShowString(0x09,"%");
//温度
ShowString(0x10,"Temp:");
ShowString(0x15,rec_dat_lcd2);
ShowString(0x17,".");
ShowString(0x18,rec_dat_lcd3);
ShowString(0x19,"C");
}
}
来源:https://blog.csdn.net/weixin_46020788/article/details/121069444
如果文章或资源对您有帮助,欢迎打赏作者。一路走来,感谢有您!
txttool.com 说一段 esp56物联 查询128 IP查询