⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds18b20.c

📁 51单片机实现利用ds18b20温度传感器检测温度并用ZLG7920显示(c语言)
💻 C
字号:
#include"reg51.h"
#define uchar unsigned char
#define uint  unsigned int
uchar tplsb,tpmsb;

sbit DQ=P1^2;
//延时tms
void delay(uint t)
{
	uint i;
	while(t--)
	{
		for(i=0;i<125;i++)
		{}
		}
	}
//温度转换为十进制
uint TempTrans(uchar ht,uchar lt)
{
	uint i=0,k=0;
	CY=0;
	i=ht;
	i=i<<8;
	k=lt&0xf0;
	i=i|k;
	return(i);
	}
//产生复位脉冲
void TxReset(void)
{
	uint i;
	DQ=0;
	i=100;
	while(i>0)i--;
	DQ=1;
	i=4;
	while(i>0)i--;
	}	
//等待应答脉冲	
void RxWait(void)
{
	uint i;
	while(DQ);
	while(~DQ);
	i=4;
	while(i>0)i--;
	}
//读取数据的一位
bit RdBit(void)
{
	uint i;
	bit b;
	DQ=0;
	i++;
	DQ=1;
	i++;
	i++;
	b=DQ;
	i=8;
	while(i>0)i--;
	return(b);
	}	
//读数据一个字节	
uchar RdByte(void)
{
	uchar i,j,b;
	b=0;
	for(i=1;i<=8;i++)
	{
		j=RdBit();
		b=(j<<7)|(b>>1);
		}
		
	return(b);
	}
//写数据一个字节	
void WrByte(uchar b)
{
	uint i;
	uchar j;
	bit btmp;
	for(j=1;j<=8;j++)
	{
		btmp=b&0x01;
		b=b>>1;
		if(btmp)
		{
			DQ=0;
			i++;i++;
			DQ=1;
			i=8;
			while(i>0)i--;
			}
			else
			{
				DQ=0;
				i=8;
				while(i>0)i--;
				DQ=1;
				i++;
				i++;
				}
		}
	}
//启动温度转换	
void convert(void)
{
	TxReset();
	RxWait();
	delay(1);
	WrByte(0xcc);
	WrByte(0x44);	
	}
//读取温度值	
void RdTemp(void)
{
	TxReset();
	RxWait();
	delay(1);
	WrByte(0xcc);
	WrByte(0xbe);
	tplsb=RdByte();
	tpmsb=RdByte();
//	TH=RdByte();
//	TL=RdByte();
	}	
/**void WrTemp(uchar ht,uchar lt)
{
	TxReset();
	RxWait();
	delay(1);
	WrByte(0xcc);
	WrByte(0x4e);
	WrByte(ht);
	WrByte(lt);
	WrByte(0x7f);
	}
/*void alarm(void)
{
	TxReset();
	RxWait();
	delay(1);
	WrByte(0xcc);
	WrByte(0xbe);
	}*/	
uchar ds18b20_read(void)
{
   	uchar temp=0;
   	//WrTemp(20,10);   	
    delay(1);
	convert();
	delay(1000);
	RdTemp();
	temp=TempTrans(tplsb,tpmsb);
	return(temp);
	}	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -