51单片机实验13:温度传感器模块应用

开发板温度模块电路图如下:

51单片机实验13:温度传感器模块应用_第1张图片

目的:利用开发板温度传感器测量温度,并在数码管显示。

开发板温度传感器模块相关内容:https://blog.csdn.net/cax1165/article/details/86763991

开发板数码管模块的相关内容:https://blog.csdn.net/cax1165/article/details/86557551

主函数:

#include
#include
#define uc unsigned char
#define ui unsigned int

sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;

uc code x[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uc disp[8];

void delay(uc x)
{
	uc i,j;
	for(i=1;i<=x;i++)
		for(j=1;j<=110;j++);
}

void digdisplay()
{
	uc i;
	for(i=1;i<=6;i++)
	{
		switch(i)
		{
			case(1):
			LSA=0;LSB=0;LSC=0;break;
			case(2):
			LSA=1;LSB=0;LSC=0;break;
			case(3):
			LSA=0;LSB=1;LSC=0;break;
			case(4):
			LSA=1;LSB=1;LSC=0;break;
			case(5):
			LSA=0;LSB=0;LSC=1;break;
			case(6):
			LSA=1;LSB=0;LSC=1;break;
		}
		P0=disp[i];
		delay(1);
		P0=0x00;
	}
}

void datapros(int temp)
{
	float tp;
	if(temp<0)
	{
		disp[6]=0x40;
		temp=temp-1;
		temp=~temp;
		tp=temp;
		temp=tp*0.0625*100+0.5;//*100将两位小数加入整数中方便后期处理,+0.5是四舍五入进位处理
	}
	else
	{
		disp[6]=0x00;
		tp=temp;
		temp=tp*0.0625*100+0.5;
	}
	disp[5]=x[temp/10000];
	disp[4]=x[temp%10000/1000];
	disp[3]=x[temp%1000/100]|0x80;
	disp[2]=x[temp%100/10];
	disp[1]=x[temp%10];
}

void main()
{
	while(1)
	{
		datapros(ds18b20readtemp());
		digdisplay();
	}
}

DS18B20温度传感器配置:

#include

void delay1ms(ui x)
{
	ui i,j;
	for(i=1;i<=x;i++)
		for(j=1;j<=110;j++);
}

uc ds18b20init()
{
	uc a,b;
	dsport=0;
	for(b=71;b>0;b--)//延时500微秒
        for(a=2;a>0;a--);
	dsport=1;
	while(dsport)
	{
		delay1ms(5);//延时5微秒
		return 0;
	}
	return 1;
}

void ds18b20writebyte(uc dat)
{
	uc i,j;
	for(i=1;i<=8;i++)
	{
		dsport=0;
		j++;//??
		dsport=dat&0x01;
		for(j=31;j>0;j--);//延时65微秒
		dsport=1;
		dat>>=1;
	}
}

uc ds18b20readbyte()
{
	uc i,j,dat,byte=0;
	for(i=1;i<=8;i++)
	{
		dsport=0;
		j++;
		dsport=1;
		j++;j++;//延时6微秒
		dat=dsport;
		byte=(byte>>1)|(dat<<7);
		j=4;while(j--);//延时48微秒
	}
	return byte;
}

void ds18b20changtemp()
{
	ds18b20init();
	delay1ms(1);
	ds18b20writebyte(0xcc);
	ds18b20writebyte(0x44);
}

void ds18b20readtempcom()
{
	ds18b20init();
	delay1ms(1);
	ds18b20writebyte(0xcc);
	ds18b20writebyte(0xbe);
}

int ds18b20readtemp()
{
	int temp=0;
	uc tmh,tml;
	ds18b20changtemp();
	ds18b20readtempcom();
	tml=ds18b20readbyte();
	tmh=ds18b20readbyte();
	temp=tmh;
	temp<<=8;
	temp|=tml;
	return temp;
}

温度传感器头文件:

#ifndef _temp_H
#define _temp_H

#include

#ifndef uc
#define uc unsigned char
#endif
#ifndef ui
#define ui unsigned int
#endif

sbit dsport=P3^7;

int ds18b20readtemp();

#endif

 

你可能感兴趣的:(51单片机,进阶之路——单片机的学习)