【蓝桥杯】DS18B20基本应用

学习内容

  1. 能够独立写驱动代码。
  2. 获取温度整。

一、底层函数驱动


1、DS18B20基本应用

(1)ds18b20芯片手册

在这里插入图片描述

由芯片手册Figure2.中看出

先读出高(MS BYTE) 8位、低(LS BYTE)8位,再从Table1中,发现+125中对应是 0000 0111 1101 0000 (十进制2000)

整数部分的数据都是后四位为零,故如果我们需要整理整数温度

方法举例(+125°):
(1)只需要将 0000 0111 1101 0000右移4位 得出 0000 0111 1101(刚好是十进制125)
(2) 或者直接将16位的数0000 0111 1101 0000(DIGITAL OUTPUT) 乘以0.0625也可处理成整数;
如果是需要读出一位小数,那么需要将16位的数乘以0.625(放大10倍处理)
如果是需要读出二位小数,那么需要将16位的数乘以.6.25(放大100倍处理)
注意 上面的处理方法是,需要谨慎,乘以一个数后不能溢出

(2)onewire.c

// 需要在onewire.c里面写的

// onewire.c
//DS18B20温度采集程序:整数
unsigned int read_wendu()//int 型
{
	unsigned char low,high;//char 型
	unsigned int temp;//int 型
	init_ds18b20();//DS18B20初始化
	Write_DS18B20(0xcc);//跳过row字节
	Write_DS18B20(0x44);//装换温度
	Delay_OneWire(80);//延时
	
	init_ds18b20();//DS18B20初始化
	Write_DS18B20(0xcc);//跳过row字节
	Write_DS18B20(0xbe);//存储温度
	low=Read_DS18B20();//读取低8位
	high=Read_DS18B20();//读取高8位
	temp=high&0x0f;//参考DS18B20手册  去掉MS BYTE前的SSSS
	temp=temp<<8|low;//根据DS18B20手册 高低八位整合成十六位 DIGITAL OUTPUT
	return (temp);//返回
}

温度底层记忆方法:(转换温度、读取温度、整理温度数据)
(1)定义char型用于将读出数据分别放入高低,int型用于整合16位数的温度
(2)进行温度转换,先初始化,在跳过内存字节,直接转化温度,后面加一定延时以便温度转化完成
(3)进行温度读取,再初始化,同理跳过内存字节,找到存储温度地址,直接读出温度底高8位
(4)整理温度数据,返回16位数据。

在main函数使用,别忘记将函数unsigned int read_wendu()添加到onewire.h

// 需要在onewire.h里面写的

// onewire.h
#ifndef _ONEWIRE_H
#define _ONEWIRE_H
//函数声明
unsigned char Read_DS18B20(void);
unsigned int read_wendu(); 
#endif

(3)主函数使用main.c

  读取原数据:
          wendu=read_wendu();//取原16位值(DIGITAL OUTPUT)   
 处理成整数:方法1: wen1=wendu>>4&0x007f;
             方法2: wen1=wendu*0.0625;
 
 处理成保留一位小数:wen1=wendu*0.625;
 处理成保留二位小数:wen2=wendu*6.25;

// 需要在main调用里面写的

void WenduSMG()
 {
	   wendu=read_wendu();//读取16位原数据
	   wen1=wendu*0.0625;//整数处理
	   //wen2=wendu*6.25;
	   //-----------------数码管显示-------------
	 lnti_SMG(6,Tab[wen1/10%10]);Delay1ms();
	 lnti_SMG(7,Tab[wen1%10]);Delay1ms();
	
 }
  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值