51单片机 温湿度传感器DHT11

来源:本站
导读:目前正在解读《51单片机 温湿度传感器DHT11》的相关信息,《51单片机 温湿度传感器DHT11》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《51单片机 温湿度传感器DHT11》的详细说明。
简介:本文给大家分享了51单片机 温湿度传感器DHT11代码。

//硬件连接: P2.0口为通讯口连接DHT1#include #include typedef unsigned char  U8;      typedef signed   char  S8;      typedef unsigned int   U16;     #define uchar unsigned char#define uint unsigned intsbit  P2_0  = P2^0 ;sbit  P2_1  = P2^1 ;//----------------------------------------------////----------------定义区--------------------////----------------------------------------------//U8  U8FLAG;U8  U8count,U8temp;U8  U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;U8  U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;U8  U8comdata;   U8  indata[5];U8  count, count_r=0;U16 U16temp1,U16temp2;sbit d1=P2^4;sbit d2=P2^5;sbit d3=P2^6;sbit d4=P2^7;uchar code LEDData[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,                                    0x80,0x90,0xff};uchar data  display[5] =   {0x00,0x00,0x00,0x00,0x00};void Delay(U16 j){  U8 i;for(;j>0;j--){   for(i=0;i<27;i++);}}void delay(unsigned int num)//延时函数{  while( --num );}void  Delay_10us(void){U8 i;i--;i--;i--;i--;i--;i--;}//串行总线 void COM(void){U8 i;for(i=0;i<8;i++)   {  U8FLAG=2;  //----------------------  P2_1=0 ;  //T  P2_1=1 ;  //T  //----------------------   while((!P2_0)&&U8FLAG++);  Delay_10us();  Delay_10us();  // Delay_10us();  U8temp=0;  if(P2_0)U8temp=1;  U8FLAG=2;  while((P2_0)&&U8FLAG++);   //----------------------  P2_1=0 ;  //T  P2_1=1 ;  //T  //----------------------  //超时则跳出for循环     if(U8FLAG==1)break;  //判断数据位是0还是1    // 如果高电平高过预定0高电平值则数据位为 1   U8comdata<<=1;  U8comdata|=U8temp;        //0}//rof}//--------------------------------//-----湿度读取子程序 ------------//--------------------------------//----以下变量均为全局变量--------//----温度高8位== U8T_data_H------//----温度低8位== U8T_data_L------//----湿度高8位== U8RH_data_H-----//----湿度低8位== U8RH_data_L-----//----校验 8位 == U8checkdata-----//----调用相关子程序如下----------//---- Delay();, Delay_10us();,COM();//--------------------------------void RH(void){  //主机拉低18ms   P2_0=0;   Delay(180);   P2_0=1;//总线由上拉电阻拉高 主机延时20us   Delay_10us();   Delay_10us();   Delay_10us();   Delay_10us();//主机设为输入 判断从机响应信号   P2_0=1;//判断从机是否有低电平响应信号如不响应则跳出,响应则向下运行     if(!P2_0)   //T !      {    U8FLAG=2;////////////////////////////////////////////////////  //判断从机是否发出 80us 的低电平响应信号是否结束     while((!P2_0)&&U8FLAG++);    U8FLAG=2;  //判断从机是否发出 80us 的高电平,如发出则进入数据接收状态    while((P2_0)&&U8FLAG++);  //数据接收状态      COM();    U8RH_data_H_temp=U8comdata;    COM();    U8RH_data_L_temp=U8comdata;    COM();    U8T_data_H_temp=U8comdata;    COM();    U8T_data_L_temp=U8comdata;    COM();    U8checkdata_temp=U8comdata;    P2_0=1;  //数据校验     U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);    if(U8temp==U8checkdata_temp)    {       U8RH_data_H=U8RH_data_H_temp;       U8RH_data_L=U8RH_data_L_temp;    U8T_data_H=U8T_data_H_temp;       U8T_data_L=U8T_data_L_temp;       U8checkdata=U8checkdata_temp;    }//fi   }//fi}Disp_Temperature()//显示温度{unsigned char  n=0;//  display[4]=temp_data[0]&0x0f;//  display[0]=ditab[display[4]];     //查表得小数位的值 //  display[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4);display[4]=U8RH_data_H;    display[4]=display[4]%100;    display[3]=display[4]/10;    display[2]=display[1]%10;display[4]=U8T_data_H;display[4]=display[4]%100;display[1]=display[4]/10;display[0]=display[4]%10;if(!display[3])        //高位为0,不显示{  display[3]=0x0a;               if(!display[1])      //次次高位为0,不显示    display[1]=0x0a;}d1=1;P0=LEDData[display[0]];delay(5);d1=0;d2=1;P0=LEDData[display[1]];delay(5);d2=0;d3=1;P0=LEDData[display[2]];delay(5);d3=0;d4=1;P0=LEDData[display[3]];delay(5);d4=0;}void main(void){  while(1)  {    RH();          Disp_Temperature();//读取模块数据周期不易小于 2SDelay(20000);  }}

提醒:《51单片机 温湿度传感器DHT11》最后刷新时间 2024-03-14 00:57:42,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《51单片机 温湿度传感器DHT11》该内容的真实性请自行鉴别。