18B20温度检测
1.1 需求描述
本案例讲解如何从18B20传感器获取温度信息并显示在LCD上。
1.2 硬件设计
1.2.1 硬件原理图
1.2.3 18B20工作原理
可以看到18B20有两根引脚负责供电,一根引脚负责数据交换。18B20就是通过数据线和单片机进行数据交换的。
1)18B20工作时序
2)初始化信号
#define DQ P44/*** @brief 初始化方法** @return 1代表存在,0代表不存在*/
static bit Int_DS18B20_Init()
{bit result;// 主机拉低DQ = 0;Delay60us(8);// 主机释放DQDQ = 1;Delay60us(1);// 查看18B20状态result = ~DQ;Delay60us(7);return result;
}
3)写数据时序
写‘1’时序
写‘0’时序
写字节
让18B20测量温度,并将温度保存在RAM中。根据说明书第五节“温度测量”,我们需要向18B20发送功能指令0x44,可以触发温度测量动作,根据上面的事件序列,我们可以得知,这一步的通信流程如下:发送初始化信号。发送跳过ROM命令的指令(因为我们不需要ROM命令),查询ROM命令列表可得知,我们需要向18B20发送0xCC。发送温度测量指令,查询功能命令列表可得知,我们需要向18B20发送0x44。
4)读数据时序
5)从18B20中读取刚刚测量的温度。
查询说明书的命令指令可得知,如果我们想读取18B20寄存器,需要向18B20发送功能指令0xBE,再从18B20中连续接收9字节数据。这9字节数据中,只有前两个字节是我们需要的温度数据。所以我们在接收两个字节后,需要再发送一次复位(初始化)信号,打断接下来的数据传输。整个通信流程如下:发送初始化信号。发送跳过ROM命令的指令0xCC。发送读取寄存器的命令0xBE。接收两个字节。发送初始化信号打断传输。
1.3软件设计
1)Util.h
在Util.h中加入新的延时函数声明。
/**