| 
高级会员 主题
回帖0
积分938
阅读权限30
注册时间2013-2-9
最后登录1970-1-1
在线时间 小时
 
 | 
 
| #define DHT_H_1 PORTD|=(1<<PD7) #define DHT_L_0 PORTD&=~(1<<PD7)
 #define DHT_Out_1 DDRD|=(1<<PD7)
 #define DHT_in_0 DDRD&=~(1<<PD7)
 uchar DHT_Read()
 {
 uchar i,Data1=0;
 for (i=0;i<8;i++)
 {
 while(PIND7==0);//等待数据开始的低电平结束
 _delay_us(28); //等待28us
 Data1<<=1;
 
 if (PD7==1)//如果等待28us后 pin7为高电平该信号为1
 {
 Data1|=0x01;
 }
 else
 {
 Data1|=0x00;
 }
 while(PIND7==0);//等待结束低电平结束,以便开始下一个数据的接收
 }
 return Data1;
 }
 void DHT_Data()
 {
 uchar i;
 DHT_Out_1;//DDR pin7输出
 DHT_L_0; // 把pin7高电平拉低
 _delay_ms(18);//拉低持续2ms,资料上说是拉低大于1ms
 DHT_H_1;//释放pin7
 DHT_in_0;//设置pin7为输入
 DHT_H_1;
 _delay_us(25);//总线由上拉电阻拉高主机延时 >20us等待25us以便DHT应答
 if(PIND7==0)//检测pin7状态。DHT是否拉低PIN7响应
 {
 while(PIND7==0)//等待DHT拉低PIN7 80us
 while(PIND7==1)//等待DHT释放PIN7 80us
 for (i=0;i<5;i++)//开始数据传输
 {
 TempData[i]=DHT_Read();
 }
 }
 }
 
 | 
 |