51单片机的单总线温度采集

本文介绍了如何使用DALLAS半导体公司的S18B20温度传感器与8051单片机进行接口,并详细说明了初始化过程及数据读取和显示温度的方法。通过特定的时序控制,实现传感器数据采集并驱动数码管显示温度。
摘要由CSDN通过智能技术生成

1、S12B20介绍与实验

S18B20 是由 DALLAS 半导体公司推出的一种的“一线总线(单总线)”接口的温度传感器。与传统的热敏电阻等测温元件相比,它是一种新型的体积小、适用电压宽、与微处理器接口简单的数字化温度传感器。

最关键的一步就是51的一条总线在P3.7上,所以我们可以从P3.7处接上温度传感器。

整体protues图如下所示:

代码:

#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(void)			       //主函数
{
	uchar i,temp;
	delay5(1000);
	while(1)
	{
	 	temp=retemp();	
	 	for(i=0;i<10;i++)			//连续扫描数码管10次
	 	{
	 		out=(temp/10)&0x0f;
	 		smg1=0;
	 		smg2=1;
	 		delay5(1000);			//延时5ms
	 		out=(temp%10)&0x0f;
	 		smg1=1;
	 		smg2=0;
	 		delay5(1000);			//延时5ms
	 	}
	}
}

void delay5(uchar n)			//函数功能:延时5µs	
{
	 do
	 {
	 	_nop_();
	 	_nop_();
	 	_nop_();
	 	n--;
	 }
	 while(n);
}

void init_ds18b20(void)		//函数功能:18B20初始化
{
	 uchar x=0; 
	 DQ =0;    
	 delay5(120); 
	 DQ =1;    
	 delay5(16);
	 delay5(80);
}

uchar readbyte(void) 			//函数功能:读取1字节数据
{
	uchar i=0;
	uchar date=0;
	for (i=8;i>0;i--)
	{
		  DQ =0;
		  delay5(1);
		  DQ =1;			//15µs内拉释放总线
		  date>>=1;
		  if(DQ)
		  date|=0x80;
		  delay5(11);
	 }
 	return(date);
}

void writebyte(uchar dat) 			//函数功能:写1字节
{
 uchar i=0;
 for(i=8;i>0;i--)
 {
	  DQ =0;
	  DQ =dat&0x01;				//写"1" 在15µs内拉低
	  delay5(12);	   			//写"0" 拉低60µs
	  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);
}

代码有些许复杂,大概理解就是:

1、初始化温度传感器。

2、根据读取的温度传感器传回总线的值写入LED数码模块。

3、重复【初始化温度传感器与读取不同时间段的温度】并显示。

这里面最难的理解的地方就是初始化温度传感器。

温度传感器的初始化需要特殊的一段时序才能传入单片机内部。

2、博客分享

博主我也暂只了解的比较浅。如果想深入了解的话还请进入下述博客中学习,期待你的成功。

DS18B20 Datasheet时序完全解读_datasheet中没有上电时序-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值