/*----------------------------------DHT11数据发送到串口 觉得网上流行的那个程序太乱,故编写了一个大家看的懂的,实用的!亲测可用!! 管脚接P2^0 有疑问加QQ:422457601注:单片机------------------------------------*/#include<>#defineucharunsignedcharucharFlag_D; //防死机标志ucharXBuff[5];//DHT11原始数据暂存器ucharDBuff[5];//DHT11原始有效数据寄存器sbitHQ=P2^0;//信号脚定义/*---------------------------------- 微妙延时T=2*t+5us 注意--t不能写成t--!!-------------------------------*/voiddelay2x(uchart){while(--t);} /*----------------------------- 毫秒延时大约1ms ---------------------------*/voiddelayms(unsignedintt){ while(t--) { delay2x(245); delay2x(245); }} /******************************* 10us延时误差0us**********************************/voiddelay10us(){uchari;i--;i--;i--;i--;i--;i--;}/*------------------------------ 读数区-------------------------------*/uchargetData() //读取一个数据{ uchari,Data=0; for(i=0;i<8;i++) { Flag_D=2; while(!HQ&&Flag_D++); //等待高电位 delay10us(); delay10us(); delay10us(); if(HQ) //如果HQ为1,读1 { Data<<=1; //接收数据从高位到低位,所以要左移 Data|=0x01; Flag_D=2; while(HQ&&Flag_D++); //等待电位拉低再进入下一个读数 if(Flag_D==1)break; } elseData<<=1; //读0 } returnData; //返回数据}voidDHT_Read() //读取数据{ ucharj,temp; HQ=0; delayms(20);//拉低大于18ms HQ=1; delay10us(); delay10us(); delay10us(); delay10us(); HQ=1; if(!HQ) //从机响应 { Flag_D=2; while(!HQ&&Flag_D++); Flag_D=2; while(HQ&&Flag_D++); for(j=0;j<5;j++) //读取5个数据暂存入数组XBuff[5]中{
DTH11串口程序 来自淘豆网www.taodocs.com转载请标明出处.