这是北航第959次推送
石桥书院的朋友们,开学第一周快乐!经过多日的嘀嘀咕咕,我们蓝桥杯推团终于续约了!(散花~)今天我们来讲解温度传感器DS18B20在CT107D平台上的使用。
基础模块部分结束后,我们会以每周一篇文章的频率为大家推送初试题,请大家继续关注~
DS18B20的工作原理
我们参加的蓝桥杯“单片机设计与开发”比赛,将为我们提供DS18B20的驱动文件(onewire.c和onewire.h),其中已经包含了DS18B20的初始化、读写功能。所以不需要完全了解单总线的时序,熟悉DS18B20的基本操作流程就够了。但是,这部分就不详细描述了。想了解的同学可以参考文末的参考资料。
不过为了更好的了解操作过程,我们就简单介绍一下DS18B20的工作原理。详见“蓝桥杯单片机组CT107d-数据包/09”。芯片手册/中文版/DS18B20中文数据。pdf”。
这样就完成了准备工作,现在要读取DS18B20中的温度数据。
温度采集程序
由于蓝桥杯所要求的DS18B20的精度只是一个整数,所以我们写了这样一个函数,把测得的温度显示在数码管的后两位,并以一定的频率刷新。
先来看一下DS18B20一次读取温度的基本操作:
& lt1 >主机重置并初始化DS18B20(存在于驱动器中)。
& lt2 >主机将0xCC命令写入DS18B20,跳过ROM。
& lt3 >主机向DS18B20写入0x44命令,开始温度转换。
& lt4 >主机复位初始化DS18B20。
& lt5 >主机将0xCC命令写入DS18B20,跳过ROM。
& lt6 >主机将0xBE命令写入DS18B20,依次读取DS18B20发送的第0至第8条数据。因为我们只需要温度数据,所以我们可以读取前两个字节的数据。
下面是读取温度的功能,然后取temp的位和十位显示在数码管上。这个函数中没有考虑负温度。如果是负数,应该先减1,再加上“-”符号。
无符号int temp = 0;
……
ReadTemperature ()//仅限整数
{
无符号字符低,高;
init _ ds18b 20();//重置初始化
write _ ds18b 20(0xCC);//写入0xCC命令,跳过ROM
write _ ds18b 20(0x 44);//写入0x44命令开始温度转换
init _ ds18b 20();//重置初始化
write _ ds18b 20(0xCC);//写入0xCC命令,跳过ROM
write _ ds18b 20(0xBE);//写入0xBE命令
low = Read _ ds18b 20();//首先读取低八位(0字节)
high = Read _ ds18b 20();//再次读取高八位(1字节)
temp =高<。& lt4;
temp | =(low & gt;>。4);//将两个字节组合成一个整数变量
返回温度;
}
因为这部分知识比较多,感兴趣的同学也可以参考以下内容,本文也参考了材料:
详细时序分析)关于蓝桥杯STC15单片机的18B20程序:
https://blog.csdn.net/yy105419/article/details/50801762
附上数码管显示的完整代码)单总线温度传感器DS18B20的基本操作:
https://www.cnblogs.com/ALittleBee/p/9427165.html
自己写DS18B20驱动)DS18B20原理讲解和程序编写:
http://www.bkoak.com/2018/02/21/lanqiao11/
最后以宿舍的温度结束今天的教程。真的很温暖~
图形排版|咕咕咕
由|十外学院X大班出品
1.《ds18b20中文资料 启士 | 蓝桥杯单片机教程13 温度传感器DS18B20》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《ds18b20中文资料 启士 | 蓝桥杯单片机教程13 温度传感器DS18B20》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/keji/1534074.html