实验报告:单总线温度采集

本文详细介绍了如何在51单片机中使用DS18B20传感器采集环境温度,通过编写并实现了读取、写入和温度计算的函数,旨在加深对单片机的理解。

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

一、使用DS18B20采集环境温度

1.代码

#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);
}

2.结果

二、总结

学习DS18B20单总线温度采集加深了我对51单片机理解。本博客仅为学习任务实验报告。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值