除了我第一次给大家介绍的知识这里再额外补充一些
如果比赛时是如下的代码:
void Delay_OneWire(unsigned int t) //STC89C52RC
{
while(t--);
}
大家要在这一句的基础上乘上10倍,这是蓝桥杯单片机和51单片机在时钟的差异所带来的延时的不同,非常重要!要是不对无法正常读取。
Delay_OneWire(100);
还有总线DQ的位定义:
sbit DQ = P1^4;
相比于之前的代码,这个可以测量出温度的小数
void Read_ds18b20_temp()
{
unsigned char LSB,MSB;
init_ds18b20();
Write_DS18B20(0xcc);
Write_DS18B20(0x44);
Delay_ds18b20(500);
init_ds18b20();
Write_DS18B20(0xcc);
Write_DS18B20(0xbe);
LSB = Read_DS18B20();
MSB = Read_DS18B20();
temp = MSB;
temp = (temp<<8)|LSB;
if((temp & 0xf800) == 0x0000)
{
temp_ds18b20 = temp * 0.0625;
}
}
这之中需要数据类型的转换,因为我们需要浮点数。
unsigned int temp=0;
float temp_ds18b20 = 0;
unsigned int smg_ds18b20;
温度读取的时候可以先乘上10,便于我们数码管显示
void jm1()//ζÈÏÔʾ½çÃæ
{
smg_ds18b20 = 10*temp_ds18b20;
display_BitSMG(0,0xc1);
Delay(500);
display_BitSMG(1,Seg_Table[1]);
Delay(500);
display_BitSMG(5,Seg_Table[smg_ds18b20/100]);
Delay(500);
display_BitSMG(6,SMG_Dot[smg_ds18b20/10%10]);
Delay(500);
display_BitSMG(7,Seg_Table[smg_ds18b20%10]);
Delay(500);
}
最后也是最重要的,要在显示之前进行循环的读取!!
while(1)
{
Read_ds18b20_temp();
jm1();
}
本期就结束啦,下期再见