解决开始数码管显示85的问题
onewire.c
#include "reg52.h"
#include <intrins.h>
sbit DQ = P1^4; //单总线接口
void Delay1us(unsigned int us) //@11.0592MHz
{
unsigned int i=0;
for(i=0;i<us;i++)
{
_nop_(); _nop_(); _nop_();
}
}
//DS18B20设备初始化
bit init_ds18b20(void)
{
bit initflag=1;
DQ=1;
Delay1us(10);
DQ=0;
Delay1us(600);
DQ=1;
Delay1us(70);
initflag=DQ;
Delay1us(200);
return initflag;
}
//通过单总线向DS18B20写一个字节
void Write_DS18B20(unsigned char dat)
{
unsigned char i;
for(i=0;i<8;i++)
{
DQ=0;
Delay1us(2);
DQ=(dat&0X01);
Delay1us(60);
dat>>=1;
DQ=1;
Delay1us(1);
}
Delay1us(50);
}
//从DS18B20读取一个字节
unsigned char Read_DS18B20(void)
{
unsigned char dat;
unsigned char i;
for(i=0;i<8;i++)
{
DQ=0;
Delay1us(2);
dat>>=1;
DQ=1;
Delay1us(5);
if(DQ==1)
{
dat|=0X80;
}
Delay1us(55);
}
DQ=1;
Delay1us(55);
return dat;
}
bit Temper_Flag = 0 ;
unsigned int Temp;
unsigned long Temp_get(void)
{
unsigned char low,high;
if(Temper_Flag == 0 )
{
Temper_Flag = 1 ;
init_ds18b20();
Write_DS18B20(0XCC);
Write_DS18B20(0X44);
}
else if( Temper_Flag == 1 )
{
Temper_Flag = 0 ;
init_ds18b20();
Write_DS18B20(0XCC);
Write_DS18B20(0XBE);
low=Read_DS18B20();
high=Read_DS18B20();
Temp=high&0X0F; // SSSS XXXX
Temp <<= 8; // Temp =Temp << 8;
Temp |= low; // Temp =Temp | low;
}
return Temp;
}