//硬件连接: 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》的相关信息,《51单片机 温湿度传感器DHT11》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《51单片机 温湿度传感器DHT11》的详细说明。
简介:本文给大家分享了51单片机 温湿度传感器DHT11代码。
提醒:《51单片机 温湿度传感器DHT11》最后刷新时间 2024-03-14 00:57:42,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《51单片机 温湿度传感器DHT11》该内容的真实性请自行鉴别。