EA=1; while(1) { while(cnt) { cnt=0; reset(); if(live==0) //18B20存在 { writebyte(0xcc); writebyte(0x44); //转化温度 reset(); writebyte(0xcc); writebyte(0xbe); //读取温度 readdata[0]=readbyte(); //读取低位温度 readdata[1]=readbyte(); //读取高位温度 sflag=1; //温度标记位,1 if((readdata[1]&0xf8)!=0x00) //如果是负温,将补码转为原码 { sflag=0; readdata[1]=~readdata[1]; //负数的补码等于真值按位取反后末位加1 readdata[0]=~readdata[0]+1; if(readdata[0]>255) //如果低八11111111(255),向高八位进1 readdata[1]++; } test=((readdata[1]*256)+readdata[0])/16;//把高位与低位的值转成 LED[1]= test/100; //百位 LED[2]= test0/10; //十位 LED[3]= test; //个位 LED[4]= (readdata[0]&0x0f)*6/10; //十分位的值,精确度为度 LED[5]= (readdata[0]&0x0f)*6; //百分位的值,精确度为度 } else //18B20不存在 for(i=0;i<8;i++) LED[i]=10; LED[6]=11; LED[7]=11; if(sflag==0) {LED[0]=10;}
0为负 转为原码后大于10进制) 0.06250.0625为正,位的值 else LED[0]=11; display(&LED[0]); //动态显示数码 } } }
//****************************************************************************// void timer0() interrupt 1 { TH0=(65536-10000)/256; TL0=(65536-10000)%6; cnt++; }