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

📄 ds18b20.c

📁 这是单片机实验板比较齐全的程序
💻 C
字号:
//DS1820 C51 子程序 
//这里以11.0592M晶体为例,不同的晶体速度可能需要调整延时的时间 
sfr P3=0xB0;
sbit DQ =P3^5;
//根据实际情况定义端口
typedef unsigned char byte; 
typedef unsigned int word;
//延时 
void delay(word useconds)
{ 
	for(;useconds>0;useconds--); 
}
//复位 
byte ow_reset(void) 
{ 
	byte presence; 
	DQ = 0;//pull DQ line low 
	delay(29); // leave it low for 480us 
	DQ = 1; // allow line to return high 
	delay(3); // wait for presence 
	presence = DQ; // get presence signal 
	delay(25); // wait for end of timeslot 
	return(presence); // presence signal returned 
} // 0=presence, 1 = no part
//从 1-wire 总线上读取一个字节 
byte read_byte(void) 
{ 
	byte i;
	
	byte value = 0;
	for (i=8;i>0;i--)
	{
		value>>=1;
		DQ = 0; // pull DQ low to start timeslot 
		DQ = 1; // then return high
		delay(1); //for (i=0; i<3; i++);
		if(DQ)value|=0x80; 
		delay(6);   // wait for rest of timeslot 
	} 
	return(value);
}
//向 1-WIRE 总线上写一个字节 
void write_byte(char val) 
{ 
	byte i; 
	for (i=8; i>0; i--) // writes byte, one bit at a time
	{ DQ = 0; // pull DQ low to start timeslot 
	DQ = val&0x01; 
	delay(5); // hold value for remainder of timeslot 
	DQ = 1; 
	val=val/2;
	} 
	delay(5); 
}
//读取温度 
char Read_Temperature(void)
{
	union{ 
		byte c[2]; 
		int x; 
	}temp;
	ow_reset(); 
	write_byte(0xCC); // Skip ROM 
	write_byte(0xBE); // Read Scratch Pad 
	temp.c[1]=read_byte(); 
	temp.c[0]=read_byte(); 
	ow_reset(); 
	write_byte(0xCC); //Skip ROM 
	write_byte(0x44); // Start Conversion 
	return temp.x>>4; 
}

⌨️ 快捷键说明

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