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

📄 18b20.h

📁 此程序为51,可以接收红外遥控,读温度18b20.非常好懂.欢迎下载
💻 H
字号:
//--------------------------------------------------
//18b20
//		作者:闵运华
//		qq:121758163
//--------------------------------------------------
sbit		Tab00078 =  P2^1;
#define		Tab00079	EA = 0
#define		Tab00080	EA = 1

extern void 	Tab000371Tab00038();
extern void 	Tab0003710Tab00028(void);



void Tab0008118B20();
unsigned char Tab00082(void);
void Tab00083(unsigned char Tab00084);
unsigned int Tab00045(void);
void Tab00085(unsigned char i);
//初始化温度传感器
void Tab0008118B20()
{
	unsigned char Tab00086 = 0;
	Tab00078 = 1;
	Tab00085(100);
	Tab00079;
	Tab00078 = 0;
	Tab00085(40);//延时五百微秒
	Tab00078 = 1;
	
	while(Tab00078 && Tab00086 < 100)
	{
		Tab00086++;
	}
	Tab00078 = 1;
	Tab00080;
	Tab00085(10);
	if(Tab00086 >= 100)
	{
		
		Tab000371Tab00038();
		Tab000371Tab00038();
		Tab000371Tab00038();
		Tab000371Tab00038();
	}
	
	Tab00085(250);//延时五百微秒	
}

//读一个字节

unsigned char Tab00082(void)
{
	unsigned char Tab00088;
	unsigned char Tab00089 ;
	unsigned char Tab00090;
	Tab00089 = 0;
	Tab00079;
	
	for(Tab00088 = 0; Tab00088 < 8 ; Tab00088++)
	{
		
		Tab00078 = 0;
		Tab00089 >>= 1;
		Tab00078 = 1;
		
		Tab00090 = Tab00078;
		//电位 = 温度传感器脚位;
		if(Tab00090)
		{
			Tab00089 |= 0x80;
		}
		Tab00078 = 1;
		Tab00085(6);//等待六十微秒
	}
	Tab00080;
	return Tab00089;
}



//写一个字节
void Tab00083(unsigned char Tab00084)
{
	unsigned char Tab00092;
	Tab00079;
	for(Tab00092 = 0; Tab00092 < 8; Tab00092++)
	{
		Tab00078 = 0;
		Tab00078 = Tab00084 & 0x01;
		Tab00085(6);//等待六十微秒
		Tab00078 = 1;
		Tab00084 >>= 1;
		Tab00085(1);//等待4微秒
	}
	//延时微秒(6);//等待六十微秒
	Tab00080;
}



//读取温度
unsigned int Tab00045(void)
{
	
	unsigned int t;
	//unsigned char  tt;
	Tab0008118B20();
	Tab00083(0xCC);// 跳过读序号列号的操作
	Tab00083(0x44);// 启动温度转换
	//延时1秒();
	Tab0003710Tab00028();
	Tab0008118B20();
	Tab00083(0xCC);// 跳过读序号列号的操作
	Tab00083(0xBE);// 读取温度寄存器等(共可读9个寄存器) 前两个就是温度
	
	t = Tab00082();
	t |=Tab00082()<<8;
	
	#if 0
	// 判断是否是负数
	if(t & 0x8000)
	{
		t = ~t;
		t++;
		t <<= 4;// 将整数部分移入高八位 低八位的高四位为小数部分
		//将温度变成BCD码存放
		tt =( t>>8) & 0xff;
		t = t & 0xff;
		t |= (((tt / 10)<<4) | (tt % 10))<<8;
		t = t &0xff00;
		t |= 0x8000;	//最高位为一表示负数
		
		
	}
	else
	{
		t <<= 4;// 将整数部分移入高八位 低八位的高四位为小数部分
		//将温度变成BCD码存放
		tt =( t>>8) & 0xff; //当前温度的高八位
		t = t & 0xff;
		t |= (((tt / 10)<<4) | (tt % 10))<<8;
		tt = t;
		t = t &0xff00;
		
	}
	//小数部分
	tt >>= 6;
	tt *=25;
	t |= ((tt / 10)<<4) | ((tt % 10)) ;
	//tt=t*0.0625;
	//t= tt*10+0.5; //放大10倍输出并四舍五入---此行没用
	#endif
	return(t);
}







//延时微秒
void Tab00085(unsigned char i)
{
	while(i--);
}



















⌨️ 快捷键说明

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