- #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();
- }
- }
- }
复制代码
此帖出自
小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
呵呵,不好意思,复制的时候粘掉了
应该是
#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)
一周热门 更多>