单总线温度采集

本文详细介绍了如何利用DS18B20数字温度传感器与LED数码管在单总线系统中进行温度测量,包括Protues中的仿真过程、相关C语言代码以及实际的普中开发板和Keil逻辑分析仪结果,展示了从理论到实践的学习过程。
摘要由CSDN通过智能技术生成

一、单总线温度采集

实验内容:利用DS18B20和LED数码管实现单总线温度测量系统

关于单总线温度传感器DS18B20

1.DS18B20是美国DALLAS公司生产的数字温度传感器,体积小、低功耗、抗干扰能力强。可直接将温度转化成数字信号传送给单片机处理,因而可省去传统的信号放大、A/D转换等外围电路。结构:采用TO-92、SOIC等封装形式,尺寸小巧,便于集成到各种应用中。它包含一个温度传感器和一个12位的模数转换器(ADC),用于将模拟温度值转换为数字信号输出。

2.DS18B20的工作时序包括初始化时序、写时序和读时序。

下面是其部分命令:
在这里插入图片描述

protues仿真原理图:

在这里插入图片描述

Proteus仿真时,用手动,即用鼠标单击DS18B20图标上的“↑”或“↓”来改变温度,注意手动调节温度同时,LED数码管会显示出与DS18B20窗口相同的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(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
	 }
	}

}

 /*--------------¾«È·ÑÓʱ5us×Ó³ÌÐò---------*/	
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;	//15΢ÃëÄÚÀ­ÊÍ·Å×ÜÏß
		  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;//д"1" ÔÚ15΢ÃëÄÚÀ­µÍ
	  delay5(12);	   //д"0" À­µÍ60΢Ãë
	  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);
}

protues仿真结果:

在这里插入图片描述

普中开发板结果:

在这里插入图片描述

keil逻辑分析仪分析波形:

在这里插入图片描述

总结:这次实践让我学习到了关于DS18B20 的更多相关知识。

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值