蓝桥杯ds18b20专项篇

除了我第一次给大家介绍的知识这里再额外补充一些

如果比赛时是如下的代码:

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();
}

本期就结束啦,下期再见

  • 17
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值