写个关于51温度传感器的实验内容
时间: 2023-08-23 21:06:07 浏览: 62
好的,下面是一个基于51单片机的温度传感器实验内容:
实验材料:
- 51单片机开发板
- DS18B20温度传感器
- 4.7kΩ电阻
- 杜邦线若干
- 串口调试助手软件
实验步骤:
1. 连接电路。将DS18B20温度传感器的信号引脚连接到51单片机的P2.7口,VCC引脚连接到5V电源,GND引脚连接到GND,同时在信号引脚和VCC引脚之间串联一个4.7kΩ电阻。
2. 编写程序。使用Keil等开发工具编写程序代码,实现对温度传感器的读取和显示。代码中需要包括DS18B20的驱动程序、温度数据的处理程序以及显示程序等。
3. 上传程序。将编写好的程序代码通过编程器上传到51单片机开发板中。
4. 测试程序。通过串口调试助手软件,进行温度数据的读取和显示测试。可将温度传感器放在不同的环境中,观察温度数据的变化情况。
具体的程序代码如下:
```C
#include <reg52.h>
#include <stdio.h>
#define DQ P2_7 // DS18B20信号引脚
unsigned char code table[] = "Temperature:"; // 显示字符串
unsigned char code table1[] = "oC"; // 温度单位
// DS18B20初始化函数
void Init_DS18B20(void)
{
unsigned char i;
DQ = 1;
i = 70;
while(i--); // 延时480us
DQ = 0;
i = 2;
while(i--); // 延时12us
DQ = 1;
i = 20;
while(i--); // 延时60us
}
// DS18B20写一个字节
void Write_DS18B20(unsigned char dat)
{
unsigned char i;
for(i = 0; i < 8; i++)
{
DQ = 0;
DQ = dat & 0x01;
dat >>= 1;
DQ = 1;
}
}
// DS18B20读一个字节
unsigned char Read_DS18B20(void)
{
unsigned char i, dat = 0;
for(i = 0; i < 8; i++)
{
DQ = 0;
dat >>= 1;
DQ = 1;
if(DQ)
dat |= 0x80;
}
return dat;
}
// DS18B20读温度
int Read_Temperature(void)
{
unsigned char TL, TH;
int temp;
Init_DS18B20();
Write_DS18B20(0xCC); // 跳过ROM操作
Write_DS18B20(0x44); // 启动温度转换
while(!Read_DS18B20()); // 等待转换完成
Init_DS18B20();
Write_DS18B20(0xCC); // 跳过ROM操作
Write_DS18B20(0xBE); // 读取温度数据
TL = Read_DS18B20(); // 读取温度低八位
TH = Read_DS18B20(); // 读取温度高八位
temp = TH;
temp <<= 8;
temp |= TL;
return temp;
}
// 主函数
void main(void)
{
int temp;
unsigned char i;
TMOD = 0x20; // 设置计时器1为模式2
TH1 = 0xfd; // 设置波特率为9600
TL1 = 0xfd;
TR1 = 1; // 启动计时器1
SCON = 0x50; // 设置串口工作方式
while(1)
{
temp = Read_Temperature(); // 读取温度数据
printf("%s%d%s\n", table, temp / 16, table1); // 在串口调试助手上输出温度
for(i = 0; i < 100; i++); // 延时一段时间
}
}
```
以上是一个简单的51单片机温度传感器实验内容,可以根据实际情况进行调整和扩展。