一、学习内容:
1.DS18B20温度传感器介绍


模拟温度传感器:复杂,需要AD转换,模拟—>数字,再系数配比
数字模拟传感器:内部集成了模拟温度传感器,只需温度转换再从RAM读取出来
可寄生供电:可以只用两根线(数据线和GND)




———————————————————————————————————————————
2.单总线介绍


———————————————————————————————————————————
3.单总线时序结构

发送一位:
拉低总线不宜过长,否则被判断为初始化

接收一位:
主机拉低就代表开始,从机立刻开始发0/1,两者几乎同时开始。
因为从机一定会保持15us的信号,后面随时会释放,所以主机一定要在15us内释放总线(让从机能够拉动杆子),并读取从机信号(在末尾时),才能保证不会错过从机信号


———————————————————————————————————————————
4.DS18B20操作流程+数据帧
ROM操作:进大门
功能操作:操作暂存器

温度变换:初始化—发送一个字节(跳过大门)—发送一个字节(温度变换操作)
温度读取:初始化—发送一个字节(跳过大门)—发送一个字节(读操作)–接收一个字节(LSB)—接收一个字节(MSB)

———————————————————————————————————————————
5.温度存储格式

———————————————————————————————————————————
6.第一个实验思路
• 先实现单总线的五个时序结构
初始化OneWire_Init函数
发送一位OneWire_SendBit函数 + 接收一位OneWire_ReceiveBit函数
发送一个字节OneWire_SendByte函数 + 接收一个字节OneWire_ReceiveByte函数
• 再用单总线模块编写DS18B20的数据帧
温度变换DS18B20_ConvertT函数(利用上面OneWire的函数)
温度读取DS18B20_ReadT函数(利用上面OneWire的函数)
• 最后在主函数中调用DS18B20模块
———————————————————————————————————————————
二、实操注意点
1.单总线发送/接收一个字节,低位在前

2.初始化最后为什么加500us延时 等待15~60us后,存在的 从机 会拉低总线60~240us以响应主机,所以直接在70us后读取,肯定就是在从机响应的阶段了。要是这里给的时间太短,从机还没响应太长,就已经释放掉总线,所以再延时500us

3.把 本有小数 的Temp塞进 int 类型,最低位为1,约等于LSB整体向左挪了4位,所以要%16.0赋给T,使其再向右移4位


4.测温范围有限



5.有带有小数的数字怎么在LCD1602上显示
先显示整数部分+把小数取出换成整数再类型转换

———————————————————————————————————————————
三、代码展示











13-1 DS18B20温度读取
——————————————————-这是分界线——————————————————————





13-2 DS18B20温度报警器
———————————————————————————————————————————
第二个实验的OneWire和DS18B20跟第一个实验一样,Delay,LCD1602,AT24C02,I2C,Key(12定时器扫描按键),Timer0函数之前日志里有
2026.9.30完课
2026.10.8整理完毕




