DS18B20

DS18B20温度传感器与模拟信号的采集实验

基于C51单片机设计的简单程序,利用DS18B20温度传感器采集温度,该传感器是数字传感器,所以单片机可以直接读取;另外本实验还添加了模拟电压信号的采集,通过滑动变阻器改变电压信号,完成信号的采集。


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


一、DS18B20温度传感器

DS18B20是一款常用的温度传感器,该传感器只有个引脚,分别是VDD、DATA、GND,其中DATA是传感器的信号发送端,通过该引脚可以采集到温度值。

二、仿真图

在这里插入图片描述

三、部分代码

ds18b20.c:

#include "18b20.h"
#include "delay.h"

bit tflag = 0;
void dsreset(void)//send reset and initialization command
{
 uint i;
 DQ=0;
 i=103;
 while(i>0)i--;
 DQ=1;
 i=4;
 while(i>0)i--;
}

bit tempreadbit(void)//read a bit
{
uint i;
bit dat;
DQ=0;i++; //i++ for delay
DQ=1;i++;i++;
dat=DQ;
i=8;while(i>0)i--;
return (dat);
}

uchar tempread(void)//read a byte date
{
uchar i,j,dat;
 dat=0;
for(i=1;i<=8;i++)
{
j=tempreadbit();
 dat=(j<<7)|(dat>>1);//
}
 return(dat);
}

void tempwritebyte(uchar dat)//write a byte to ds18b20
{
 uint i;
uchar j;
 bit testb;
for(j=1;j<=8;j++)
{
 testb=dat&0x01;
 dat=dat>>1;
 if(testb)//write 1
{
 DQ=0;
 i++;i++;
 DQ=1;
 i=8;while(i>0)i--;
 }
 else
 {
 DQ=0;//write 0
 i=8;while(i>0)i--;
 DQ=1;
 i++;i++;
 }

 }
}

void tempchange(void) //
{
 dsreset();
 delay(10);
tempwritebyte(0xcc);// address all drivers on bus
tempwritebyte(0x44); //initiates a single temperature conversion
}

uint get_temp()//»ñȡζÈת»»Æ÷µÄÖµ
{
 uint temp=0;
 float tt;
 uchar a,b;
 dsreset();
 delay(1);
 tempwritebyte(0xcc);
 tempwritebyte(0xbe);
 a=tempread();
 b=tempread();
 temp=b;
 temp<<=8;//two byte? compose a int variable
 temp=temp|a;
 if(temp<0x0FFF)
 {
	 tflag=0;   //
 }
 else
 {
	 tflag=1;
	 temp = ~temp+1;   //
 }
 temp = temp*0.0625;
// tt=temp*0.0625;
// temp=tt*10+0.5;
// tt=tt+0.05;
 return temp;
}

ds18b20.h:

#ifndef __18B20_H__
#define __18B20_H__
#include <reg51.h>
#include "intrins.h"
sbit DQ=P3^7;

#define  uint   unsigned int
#define  uchar   unsigned char 

void dsreset(void);
bit tempreadbit(void);
uchar tempread(void);
void tempwritebyte(uchar dat);
void tempchange(void);
uint get_temp();
#endif

main(主函数调用)main.c

int main()
{
	while(1)
	{
		tempchange();
		T = get_temp();
		LcdGotoXY(1,0);
		LcdPrintStr("T:");
		LcdGotoXY(1,2);
		WENDULcdPrintNum(T);
		LcdGotoXY(1,5);
	  LcdWriteData(0xdf);
		LcdWriteData(0x43);
	}
}

总结

基于C51单片机的温度采集系统比较简单,重要的是掌握DS18B20的时序,这样就可以对采集的信号进行处理,本次程序设计封装性比较好,直接调用即可,希望能帮到大家。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值