秃头温大人 发表于 2021-7-29 19:50 1, 我也用了上拉电阻,不过是10k的。 2,测温后,延迟50ms到100ms再进行别的操作试试。 |
robinsonlin 发表于 2021-7-29 18:46 是的把上拉电阻改大就显示了 |
lkc8210 发表于 2021-7-29 14:04 4.7K 和 1K的区别是很大的 |
黄youhui 发表于 2021-7-29 13:33 数据手册写的 ![]() |
DS18B20你为啥要加上拉电阻 |
建议:遵循硬件的手册,自己搞清楚时序 |
/*****初始化DS18B20*****/ void Init_DS18B20(void) { unsigned char x=0; DQ = 1; //DQ复位 Delay_DS18B20(8); //稍做延时 DQ = 0; //单片机将DQ拉低 Delay_DS18B20(80); //精确延时,大于480us DQ = 1; //拉高总线 Delay_DS18B20(24);//14太短,換24 x = DQ; //稍做延时后,如果x=0则初始化成功,x=1则初始化失败 Delay_DS18B20(30);//20太短,換30 } /*****读一个字节*****/ unsigned char ReadOneChar(void) { unsigned char i=0; unsigned char dat = 0; for (i=8;i>0;i--) { DQ = 1; // 先拉高 DQ = 0; // 给脉冲信号 dat>>=1; DQ = 1; // 给脉冲信号 if(DQ) dat|=0x80; Delay_DS18B20(4); } return(dat); } /****显示温度****/ void display() { if(menu_1==0) { write_com(0x80+0x40+3); write_data(c/100+0x30);//上限1200 write_data((c%100)/10+0x30);//上限1200 write_com(0x80+0x40+5); write_data(0xdf); } } |