这个东东最难弄的就是时间了,我也弄了几个小时才搞定....把时间弄对了,再有问题就是程序本身的问题了,先别用lcd来显示,先用数码管或led等来检测读出来的数据,等ds18b20这块解决了在去弄lcd显示DQ = 1 ; //拉高总线,产生复位脉冲,释放总线(要求16~60us) for(i=0;i<=4;i++){}//40us其实应该是60us以上,不是40uspresence = DQ ; //读存在脉冲。如果=0 器件存在,初始化成功;=1 器件不存在,初始化失败 for(i=0;i<=9;i++){}//100us DQ = 1 ;上面延时应该是240us以上void write_ds18b20(unsigned int n).....DQ =n&0x01; //取传递过来的函数的最低位,并发送出去 for(i=0;i<=6;i++){};保证这个延时在30us以上unsigned int read_ds18b20(void)......if(DQ) u|=0x80;//控制器采样,若采样位为1,则将dat相应的位置1,否则将由第一句的移位置0 for(i=0;i<=9;i++){}; 保证延时在60us以上unsigned int get_temp(void){......最后最好再延时200us左右}