#include<STC15F2K60S2.H>
unsigned char tab[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X02,0xF8,0x80,0x90};
unsigned char wd;
sbit DQ = P1^4; //单总线接口
//单总线延时函数
void Delay_OneWire(unsigned int t) //STC89C52RC
{
while(t--);
}
//通过单总线向DS18B20写一个字节
void Write_DS18B20(unsigned char dat)
{
unsigned char i;
for(i=0;i<8;i++)
{
DQ = 0;
DQ = dat&0x01;
Delay_OneWire(5);
DQ = 1;
dat >>= 1;
}
Delay_OneWire(5);
}
//从DS18B20读取一个字节
unsigned char Read_DS18B20(void)
{
unsigned char i;
unsigned char dat;
for(i=0;i<8;i++)
{
DQ = 0;
dat >>= 1;
DQ = 1;
if(DQ)
{
dat |= 0x80;
}
Delay_OneWire(5);
}
return dat;
}
//DS18B20设备初始化
bit init_ds18b20(void)
{
bit initflag = 0;
DQ = 1;
Delay_OneWire(12);
DQ = 0;
Delay_OneWire(80);
DQ = 1;
Delay_OneWire(10);
initflag = DQ;
Delay_OneWire(5);
return initflag;
}
unsigned char wdget()
{
unsigned char low,high,temp;
init_ds18b20();
Write_DS18B20(0XCC);
Write_DS18B20(0X44);
Delay_OneWire(500);
init_ds18b20();
Write_DS18B20(0XCC);
Write_DS18B20(0XBE);
Delay_OneWire(500);
low=Read_DS18B20();
high=Read_DS18B20();
temp=high<<4;
temp=temp|(low>>4);
return temp;
}
void ch()
{
P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;
}
void dly(int ms)
{
int i,j;
for(i=0;i<ms;i++)
{
for(j=845;j>0;j--);
}
}
void display()
{
P2=0XC0;
P0=0X01;
P2=0XFF;
P0=tab[wd/10];
dly(2);
P2=0XC0;
P0=0X02;
P2=0XFF;
P0=tab[wd%10];
dly(2);
}
void main()
{
ch();
while(1)
{
wd=wdget();
display();
}
}
运行结果如图