对于ds18b20,比赛会给我们驱动代码,不过,在我拿到的资料里——也就是以往比赛给的驱动,他的驱动代码有一些问题。首先是延时程序,它的延时程序是
void Delay_OneWire(unsigned int t)
{
while(t--);
}
但是这个延时程序是STC12单片机的ds18b20驱动延时,15单片机的延时应该是
void Delay_OneWire(unsigned int t)
{
unsigned char i;
while(t--)
{
for(i=12;i>=0;i--)
{}
}
}
同时,我们还要自己加一个读取的程序:
unsigned char rd_temperature()
{
char temp;
unsigned char high,low;
Init_DS18B20();
Write_DS18B20(0xcc);
Write_DS18B20(0x44); //启动温度转化
Delay_OneWire(200);
Init_DS18B20();
Write_DS18B20(0xcc);
Write_DS18B20(0xbe); //读取寄存器值
low=Read_DS18B20(); //低字节
high=Read_DS18B20;//高字节
temp=high<<4;
temp|=(low>>4);
return temp;
}
在补完驱动以后,我们只要在主函数里去读取ds18b20的值然后在数码管上显示出来就可以了。但是,如果直接读取显示会出现数码管闪烁这个问题,这是因为每次读取的太快了,数码管刷新不过来。因此,我们最好加一个定时器中断,让程序每隔100ms或1s去读取一次。