完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#include
#include "MACROANDCONST.h" #include "main.h" #define io_DHT11_DQ LATBbits.LATB5 //宏定义dht11的一些端口 #define DHT11_DQ_HIGH io_DHT11_DQ = 1; #define DHT11_DQ_LOW io_DHT11_DQ = 0; #define DHT11_DQ_READ PORTBbits.RB5 #define DHT11_DQ_INPUT TRISBbits.TRISB5 = 1; #define DHT11_DQ_OUT TRISBbits.TRISB5 = 0; static uint8 FLAG = 2; //超时判断 static uint8 Dht11_Rst_Flag = 0; //复位响应成功标志位 uint8 Rh_Data_T, Rh_Data_L, T_Data_T, T_Data_L, check; uint8 Rh_Data_T_Temp, Rh_Data_L_Temp, T_Data_T_Temp, T_Data_L_Temp, check_Temp; void Delay_10us(void) { uint8 i; i--; i--; i--; i--; i--; i--; i--; i--; i--; i--; i--; i--; } void v_Dht11_init_f(void) //dht11复位响应 { DHT11_DQ_HIGH DHT11_DQ_OUT DHT11_DQ_LOW if (time0_20ms == 1) { time0_20ms=0; //主机拉低电平20ms DHT11_DQ_HIGH //主机拉高电平,等待3us Delay_10us(); Delay_10us(); Delay_10us(); DHT11_DQ_INPUT //设置为输入 /************************************************* 怎么在这里上电复位时,有响应一下,然后就读不到高电平了 ***************************************************/ if (!DHT11_DQ_READ) //判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行 { FLAG = 2; while((!DHT11_DQ_READ)&&FLAG++); FLAG=2; while((DHT11_DQ_READ)&&FLAG++); Dht11_Rst_Flag=1; } } } uint8 v_Dht11ReadData_f(void) { static uint8 dht11_temp=0; static uint8 i; DHT11_DQ_INPUT //设置为输入 for(i=0;i<8;i++) { FLAG=2; while ((!DHT11_DQ_READ) && FLAG++); Delay_10us(); Delay_10us(); Delay_10us(); Delay_10us(); dht11_temp <<= 1; if (DHT11_DQ_READ) { dht11_temp |= 0x01; } else { dht11_temp &= 0xfe; } FLAG = 2; while ((DHT11_DQ_READ)&&FLAG++); if (FLAG==1) break; } return dht11_temp; } void v_TRHUpdata_f(void) { static uint8 num; v_Dht11_init_f(); if(Dht11_Rst_Flag==1) { Dht11_Rst_Flag = 0; Rh_Data_T_Temp = v_Dht11ReadData_f(); Rh_Data_L_Temp = v_Dht11ReadData_f(); T_Data_T_Temp = v_Dht11ReadData_f(); T_Data_L_Temp = v_Dht11ReadData_f(); check_Temp = v_Dht11ReadData_f(); num = Rh_Data_T_Temp + Rh_Data_L_Temp + T_Data_T_Temp + T_Data_L_Temp; if (num == check_Temp) { Rh_Data_T = Rh_Data_T_Temp; Rh_Data_L = Rh_Data_L_Temp; T_Data_T = T_Data_T_Temp; T_Data_L = T_Data_L_Temp; check = check_Temp; } DHT11_DQ_HIGH DHT11_DQ_OUT } } |
|
相关推荐
3 个讨论
|
|
那里写错了,第一次响应后,就来是读不到低电平(dht11无响应)
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-21 16:39 , Processed in 0.730822 second(s), Total 55, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号