资讯详情

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"); 
		
		
	}
}


标签: uk传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台