51单片机与18B20
时间: 2024-06-13 17:07:35 浏览: 14
51单片机与DS18B20是一种常见的组合,DS18B20是一种数字温度传感器,可以通过单总线接口与51单片机进行通信。以下是一些关于51单片机与DS18B20的信息:
1. 51单片机通过单总线接口与DS18B20进行通信,可以使用C语言或汇编语言编写代码来实现通信。
2. DS18B20可以直接将温度数据以数字形式传输给51单片机,因此可以方便地在嵌入式系统中使用。
3. 为了保证通信的正确性,需要在代码中实现一些复杂的通信协议,例如复位序列、读写时序等。
4. 在Proteus等仿真软件中,可以使用虚拟示波器等工具来模拟DS18B20的输出信号,以便进行调试和测试。
相关问题
51单片机ds18b20代码
DS18B20是一种数字温度传感器,可以通过单总线接口与51单片机进行通信。以下是51单片机DS18B20的代码示例:
```
#include <reg52.h>
#include <intrins.h>
#define DQ P2_0
typedef unsigned char uchar;
typedef unsigned int uint;
uchar code table[] = "0123456789";
void delay(uint i)
{
while(i--);
}
void write_byte(uchar dat)
{
uchar i;
for(i=0; i<8; i++)
{
DQ = 0;
_nop_();
_nop_();
DQ = dat & 0x01;
dat >>= 1;
delay(6);
DQ = 1;
}
}
uchar read_byte()
{
uchar i, dat = 0;
for(i=0; i<8; i++)
{
DQ = 0;
_nop_();
_nop_();
dat >>= 1;
if(DQ) dat |= 0x80;
delay(6);
DQ = 1;
}
return dat;
}
void init_ds18b20()
{
DQ = 1;
delay(6);
DQ = 0;
delay(60);
DQ = 1;
delay(6);
}
void start_ds18b20()
{
init_ds18b20();
write_byte(0xcc);
write_byte(0x44);
}
uchar read_ds18b20()
{
uchar temp, TL, TH;
start_ds18b20();
init_ds18b20();
write_byte(0xcc);
write_byte(0xbe);
TL = read_byte();
TH = read_byte();
temp = TH;
temp <<= 8;
temp |= TL;
return temp;
}
void main()
{
uchar i, j, temp;
uint t;
while(1)
{
temp = read_ds18b20();
t = temp * 0.625;
for(i=0; i<4; i++)
{
j = t % 10;
t /= 10;
P0 = table[j];
delay(1000);
P0 = 0x00;
delay(1000);
}
}
}
```
这段代码实现了读取DS18B20传感器的温度值,并将其显示在数码管上。其中,`write_byte()`函数用于向DS18B20写入数据,`read_byte()`函数用于从DS18B20读取数据,`init_ds18b20()`函数用于初始化DS18B20,`start_ds18b20()`函数用于启动DS18B20的温度转换,`read_ds18b20()`函数用于读取DS18B20的温度值。
51单片机ds18b20温度
测量实验
DS18B20是一种数字温度传感器,可以通过一条单线串行接口与51单片机通信。本实验演示如何使用DS18B20传感器测量温度。
硬件准备:
- DS18B20温度传感器
- 4.7kΩ上拉电阻
- 杜邦线(公对公、公对母)
接线方式:
将DS18B20传感器的引脚连接到51单片机的P2.0引脚上,同时连接一个4.7kΩ上拉电阻:
- DS18B20 VCC引脚连接到单片机的5V电源
- DS18B20 GND引脚连接到单片机的地
- DS18B20 DQ引脚连接到单片机的P2.0引脚
- 在DS18B20 DQ引脚和单片机P2.0引脚之间连接一个4.7kΩ上拉电阻
软件准备:
- Keil C51集成开发环境
- DS18B20温度传感器驱动程序
编写程序:
1.在Keil C51中新建一个工程,编写以下程序:
#include <REG52.H>
#include <DS18B20.H>
#include <LCD1602.H>
void main()
{
unsigned char temp[2];
float t;
LCD_Init(); // 初始化LCD
DS18B20_Init(); // 初始化DS18B20
while(1)
{
DS18B20_Start(); // 启动DS18B20温度转换
DS18B20_Read(temp); // 读取温度值
t = DS18B20_Convert(temp); // 转换温度值
LCD_ShowString(0,0,"Temperature:"); // 显示温度值
LCD_ShowFloat(0,1,t,1); // 显示温度值
}
}
2.在工程中添加DS18B20.H、DS18B20.C、LCD1602.H和LCD1602.C文件。
3.编译并下载程序到51单片机中。
运行程序:
将温度传感器放入温度较高的环境中,例如暖气片附近,LCD显示屏上将显示温度值。如果没有显示温度值,则可能是接线不正确或者驱动程序有误。
总结:
本实验演示了如何使用DS18B20温度传感器测量温度。DS18B20传感器采用数字信号传输,具有精度高、响应速度快、体积小等优点,适用于各种温度检测场合。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)