H文件:#ifndef__DHT11_H__#define__DHT11_H__ #include
sbitDATA=P3^3;voidDHT11_DATA(unsignedchar*str);//接收温度湿度数据并且校验#endif C文件:#include"dht11.h"#includestaticunsignedcharflag;voidDelayus(void){ unsignedchari;for(i=0;i<1;i);}voidDelay10ms(void)//12M晶振下延时{unsignedchari,j,k;for(i=5;i>0;i--)for(j=4;j>0;j--){for(k=248;k>0;k--);}}voidStart(void){DATA=1;Delay10ms();DATA=0;Delay10ms();//主机把总线拉低必须大于18ms保证DHT11能检测到起始信号Delay10ms();Delay10ms();DATA=1; Delayus(); //发送开始信号结束后拉高电平延时20-40usDelayus();Delayus();}unsignedcharReceive_byte(void)//接收一个字节{staticunsignedchari,temp;staticunsignedchardata_byte;for(i=0;i<8;i){ flag=2;while((!DATA)&&flag);//等待50us的低电平开始信号结束Delayus();//时间为26us-28us
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
示接收的为数据'0'Delayus();Delayus();temp=0;flag=2;if(DATA==1)temp=1;flag=2;while(DATA&&flag);//等待数据信号高电平'0'为26us-28us'1'为70usif(flag==1)break;data_byte<<=1;//接收的数据为高位在前右移data_byte|=temp;}returndata_byte;}voidDHT11_DATA(unsignedchar*str)//接收温度湿度数据并且校验{ staticunsignedcharT_H,T_L,R_H,R_L,check,num_check;Start();//开始信号DATA=1; if(!DATA){flag=2;while((!DATA)&&flag);//判断从机发出80us的低电平响应信号是否结束//flag=2;while(DATA&&flag); //判断从机发出80us的高电平是否结束如结束则主机进入数据接收状态R_H=Receive_byte();//湿度高位R_L=Receive_byte();//湿度低位T_H=Receive_byte();//温度高位T_L=Receive_byte();//温度低位check=Receive_byte();//校验位DATA=0; //当最后一bit数据接完毕后从机拉低电平50us// Delayus();Delayus();Delayus();Delayus();Delayus();Delayus();DATA=1;num_check=R_HR_LT_HT_L;if(num_check==check)//判断读到的四个数据之和是否与校验位相同{ //温湿度低8位数据为零*str=T_H; str; *str=R_H; str;*str='\0';check=num_check; }}}