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

📄 18b20.h

📁 此程序为51,可以接收红外遥控,读温度18b20.非常好懂.欢迎下载
💻 H
字号:
//--------------------------------------------------
//18b20
//		作者:闵运华
//		qq:121758163
//--------------------------------------------------
sbit		温度传感器脚位 =  P2^1;
#define		禁止全局中断	EA = 0
#define		使能全局中断	EA = 1

extern void 	延时1秒();
extern void 	延时10毫秒(void);



void 初始化18B20();
unsigned char 从温度传器读一个字节(void);
void 向温度传感器里写一个字节(unsigned char 数值);
unsigned int 读取温度(void);
void 延时微秒(unsigned char i);
//初始化温度传感器
void 初始化18B20()
{
	unsigned char 等待次数 = 0;
	温度传感器脚位 = 高;
	延时微秒(100);
	禁止全局中断;
	温度传感器脚位 = 低;
	延时微秒(40);//延时五百微秒
	温度传感器脚位 = 高;
	
	while(温度传感器脚位 && 等待次数 < 100)
	{
		等待次数++;
	}
	温度传感器脚位 = 高;
	使能全局中断;
	延时微秒(10);
	if(等待次数 >= 100)
	{
		
		延时1秒();
		延时1秒();
		延时1秒();
		延时1秒();
	}
	
	延时微秒(250);//延时五百微秒	
}

//读一个字节

unsigned char 从温度传器读一个字节(void)
{
	unsigned char 字节位数;
	unsigned char 返回值 ;
	unsigned char 电位;
	返回值 = 0;
	禁止全局中断;
	
	for(字节位数 = 0; 字节位数 小于 8 ; 字节位数++)
	{
		
		温度传感器脚位 = 低;
		返回值 >>= 1;
		温度传感器脚位 = 高;
		
		电位 = 温度传感器脚位;
		//电位 = 温度传感器脚位;
		if(电位)
		{
			返回值 |= 0x80;
		}
		温度传感器脚位 = 高;
		延时微秒(6);//等待六十微秒
	}
	使能全局中断;
	return 返回值;
}



//写一个字节
void 向温度传感器里写一个字节(unsigned char 数值)
{
	unsigned char 重复次数;
	禁止全局中断;
	for(重复次数 = 0; 重复次数 < 8; 重复次数++)
	{
		温度传感器脚位 = 低;
		温度传感器脚位 = 数值 & 0x01;
		延时微秒(6);//等待六十微秒
		温度传感器脚位 = 高;
		数值 >>= 1;
		延时微秒(1);//等待4微秒
	}
	//延时微秒(6);//等待六十微秒
	使能全局中断;
}



//读取温度
unsigned int 读取温度(void)
{
	
	unsigned int t;
	//unsigned char  tt;
	初始化18B20();
	向温度传感器里写一个字节(0xCC);// 跳过读序号列号的操作
	向温度传感器里写一个字节(0x44);// 启动温度转换
	//延时1秒();
	延时10毫秒();
	初始化18B20();
	向温度传感器里写一个字节(0xCC);// 跳过读序号列号的操作
	向温度传感器里写一个字节(0xBE);// 读取温度寄存器等(共可读9个寄存器) 前两个就是温度
	
	t = 从温度传器读一个字节();
	t |=从温度传器读一个字节()<<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 延时微秒(unsigned char i)
{
	while(i--);
}



















⌨️ 快捷键说明

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