DS18B20数字温度计这个模块和以往单片机学习的模块可能不同,这里还要知道其头文件(.h)和.c文件代码的理解。
具体这个温度计是怎么实现检测温度的,呃呃呃呃呃这可能就要去查阅专业资料,涉及的知识体系应该很庞大,以下就温度计怎么使用的流程来讲讲。
【进阶强化-01】单总线温度传感器DS18B20的基本原理与应用开发-小蜜蜂笔记 (xmf393.com)
1 DS18B20数字温度计 .c文件代码的理解
芯片手册的阅读起来可能太多,可以看看小蜜蜂老师对.c文件里代码的理解。
单总线数字温度传感器DS18B20的基本原理及开发要点-小蜜蜂笔记 (xmf393.com)
以下结合小蜜蜂老师的文章写一些东东。
1.1 延时函数
延时函数就和我们平时训练的差不多,这里定义的是整数类型t
//单总线延时函数
void Delay_OneWire(unsigned int t)
{
while(t--);
}
1.2 初始化函数(主要是用于复位操作)
总线用DQ表示,0表示拉低,1表示释放总线;定义一个initflag作为复位的标志。
拉低总线(DQ=0)-> 释放总线(DQ=1) -> 复位标志置一(initflag=1) -> 返回复位标志
//DS18B20芯片初始化
bit Init_DS18B20(void)
{
bit initflag = 0;
DQ = 0;
Delay_OneWire(80);
DQ = 1;
Delay_OneWire(10);
initflag = DQ;
Delay_OneWire(20);
return initflag;
}
1.3 写入函数
注意这里是把dat写入,而且是一位一位写。DQ = dat&0x01; 就保证了每次只写一个数据。
//DS18B20的写操作底层驱动代码参考--51版
void Write_DS18B20(unsigned char dat)
{
unsigned char i;
for(i=0;i<8;i++)
{
DQ = 0; //先拉低总线电平10~15us
DQ = dat&0x01; //向总线写入一个位数据
Delay_OneWire(5); //维持状态20~45us
DQ = 1; //释放总线
dat >>= 1; //准备发送下一个数据位
}
}
1.3 读取函数
读取函数最终返回的是是dat的值,这里也是dat按位来读取,
//DS18B20的读操作底层驱动代码参考--51版
unsigned char Read_DS18B20(void)
{
unsigned char i;
unsigned char dat;
for(i=0;i<8;i++)
{
DQ = 0; //先将总线电平拉低10~15us
dat >>= 1;
DQ = 1; //