51单片机驱动DS18B20数字温度传感器读写与控制示例

4星 · 超过85%的资源 需积分: 10 24 下载量 48 浏览量 更新于2024-11-16 收藏 4KB TXT 举报
本资源是一份基于51单片机(一种常用的嵌入式微控制器)的数字温度传感器DS18B20控制程序。DS18B20是一款一次性编程的数字温度传感器,常用于精确测量环境温度。该程序包括多个关键函数,如`delay`、`Reset`、`read_bit`、`write_bit`、`write_byte`、`read_byte`、`Get_temp`以及LED显示函数`Display_LED`。 1. **Delay函数** (`delay(unsigned int N)`): 提供了一个简单的延时函数,通过循环结构实现计时,用于确保后续操作的时间间隔满足DS18B20通信协议的时序要求。 2. **Reset函数** (`Reset()`): 用于复位DS18B20设备,包括拉低DQ线(数据线)到地,保持至少480us到960us的时间,然后置高DQ线并等待响应。这个函数返回`deceive_ready`信号,表示传感器是否准备好接收新的命令。 3. **读写位操作**: - `read_bit(void)` 和 `write_bit(unsigned char bitval)`:分别用于读取和写入DS18B20的单个比特。`read_bit`会控制时序以读取传感器状态,而`write_bit`则在写入高电平时进行适当的延迟。 4. **字节操作**: - `write_byte(unsigned char val)` 和 `read_byte(void)`:负责将一个字节值发送到或从DS18B20接收,它们通过位操作来逐位发送和接收数据,确保通信的正确性。 5. **获取温度值** (`Get_temp(void)`): 这是核心部分,首先复位传感器,然后发送跳过ROM命令,启动温度转换,接着读取温度寄存器,将低8位和高8位温度值存储到`TMPL`和`TMPH`变量中。 6. **LED显示** (`Display_LED(unsigned int num)`): 用于将数字温度值转换为LED数码管显示的两位十进制数值。 7. **主函数** (`main()`): 永久循环,不断调用`Get_temp()`获取温度值,然后更新LED显示。 整个程序通过精确控制时序和数据传输,实现了对DS18B20温度传感器的读取和数据处理,从而实现单片机对环境温度的监控和实时反馈。这个程序对于学习和实践嵌入式系统中的硬件接口以及数据采集非常有帮助。