单片机实现温度传感器

该博客介绍了使用DS18B20传感器和LED数码管构建的单总线温度测量系统。通过Proteus仿真展示了系统运作过程,包括DS18B20的初始化、数据读取以及温度值在数码管上的显示。程序设计中需要注意DS18B20的数据传输节拍和单片机时钟频率设置。实验结论强调了DS18B20的温度转换特性和精度,并指出了实验中可能遇到的问题,如LCD初始化和数据传输的时序控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

串行扩展应用

利用 DS18B20 和 LED 数码管实现单总线温度测量系统。DS18B20的测量范围是-5℃~128℃。由于只接有两个 LED数码管,所以显示的数值只能在 00~~99 之间。

(1)硬件图

Proteus仿真图:
在这里插入图片描述

(2)软件设计

#include<reg51.h>
#include"intrins.h"
#define uchar unsigned char
#define uint unsigned int
#define out P0
sbit smg1=out^4;
sbit smg2=out^5;
sbit DQ=P3^7;
void delay5(uchar);
void init_ds18b20(void);
uchar readbyte(void);
void writebyte(uchar);
uchar retemp(void);

void main(){
uchar i,temp;
delay5(1000);
while(1){
temp=retemp();
for(i=0;i<10;i++){
out=(temp/10)&0x0f;
smg1=0;
smg2=1;
delay5(1000);
out=(temp%10)&0x0f;
smg1=1;
smg2=0;
delay5(1000);
}
}
}

void delay5(uchar n){
do{
nop();
nop();
nop();
n–;
}while(n);
}

void init_ds18b20(void){
uchar x=0;
DQ=0;
delay5(120);
DQ=1;
delay5(16);
delay5(80);
}

uchar readbyte(void){
uchar i=0;
uchar date=0;
for(i=8;i>0;i–){
DQ=0;
delay5(1);
DQ=1;
date>>=1;
if(DQ)date|=0x80;
delay5(11);
}
return(date);
}

void writebyte(uchar dat){
uchar i=0;
for(i=8;i>0;i–){
DQ=0;
DQ=dat&0x01;
delay5(12);
DQ=1;
dat>>=1;
delay5(5);
}
}

uchar retemp(void){
uchar a,b,tt;
uint t;
init_ds18b20();
writebyte(0xcc);
writebyte(0x44);
init_ds18b20();
writebyte(0xcc);
writebyte(0xbe);
a=readbyte();
b=readbyte();
t=b;
t<<=8;
t=t|a;
tt=t*0.0625;
return(tt);
}

(3)效果图

在这里插入图片描述

仿真运行状态①(未操作温度)

在这里插入图片描述

仿真运行状态②(未操作温度)

在这里插入图片描述

仿真运行状态③(ds18b20按钮按下,温度增加)

在这里插入图片描述

仿真运行状态④(ds18b20按钮按下,温度增加)

实验结论及分析

1.程序的核心思想

①DS18B20与传统的热敏电阻不同,DS18B20 可直接将被测温度转换为串行数字信号,供单片机处理。通过对 DS18B20 编程可以实现 9~12 位的温度读数,并可分别在 93.75ms 和 750ms 内完成 9 位和 12 位的数字量。其测温范围-55℃~+125℃,最大分辨率为 0.0625℃,在一10℃~+85℃范围内其测温准确度为±0.5℃。
②DS18B20也可以看作一个小的单片机系统,它将温度信息采集到自己的内存中,然后通过一定的节拍将温度信息一位一位地传入at89c51单片机中进行二位数码管的显数。

2.实验中遇到的问题

①lcd1602输入信息时要记得初始化,否则不会显数。
②注意DS18B20的温度信息一位一位地传入at89c51单片机中时严格把控节拍,节拍不正确将影响数据传输。
③at89c51单片机的时钟频率要设置成11.0592mhz。

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值