毫无反映的DHT11代码,是不是我理解的太简单了,请大神看看

2019-03-24 20:35发布

  1. #define DHT_H_1 PORTD|=(1<<PD7)
  2. #define DHT_L_0 PORTD&=~(1<<PD7)
  3. #define DHT_Out_1 DDRD|=(1<<PD7)
  4. #define DHT_in_0 DDRD&=~(1<<PD7)
  5. uchar DHT_Read()
  6. {
  7. uchar i,Data1=0;
  8. for (i=0;i<8;i++)
  9. {
  10.   while(PIND7==0);//等待数据开始的低电平结束
  11.   _delay_us(28); //等待28us
  12.   Data1<<=1;
  13.   
  14.   if (PD7==1)//如果等待28us后 pin7为高电平该信号为1
  15.   {
  16.    Data1|=0x01;
  17.   }
  18.   else
  19.   {
  20.    Data1|=0x00;
  21.   }
  22.   while(PIND7==0);//等待结束低电平结束,以便开始下一个数据的接收
  23. }
  24. return Data1;
  25. }
  26. void DHT_Data()
  27. {
  28.   uchar i;
  29.   DHT_Out_1;//DDR pin7输出
  30.   DHT_L_0; // 把pin7高电平拉低
  31.   _delay_ms(18);//拉低持续2ms,资料上说是拉低大于1ms
  32.   DHT_H_1;//释放pin7
  33.   DHT_in_0;//设置pin7为输入
  34.   DHT_H_1;
  35.   _delay_us(25);//总线由上拉电阻拉高主机延时 >20us等待25us以便DHT应答
  36.   if(PIND7==0)//检测pin7状态。DHT是否拉低PIN7响应
  37.   {  
  38.    while(PIND7==0)//等待DHT拉低PIN7 80us
  39.    while(PIND7==1)//等待DHT释放PIN7 80us
  40.    for (i=0;i<5;i++)//开始数据传输
  41.    {
  42.     TempData[i]=DHT_Read();
  43.    }   
  44.   }
  45. }  
复制代码 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
季夏木槿
1楼-- · 2019-03-25 16:36
AVR我也没用过,简单的高低电平检测,你得先设置端口的方向吧

一周热门 更多>