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

📄 ds18b20.txt

📁 三线制DS18B20温度测试程序[C语言] 
💻 TXT
字号:
#include 
#include 

#define Seck 20 //1秒中的主程序的系数 
#define NOP_1uS _nop_();_nop_();_nop_();_nop_();_nop_();_nop_() 

//*********************************** 
sbit DQ=P2^0; 
//*********************************** 
static unsigned char Power=0; 
unsigned char Temper=0; 
//---------------------------------- 
//功能:10us 级别延时 
//---------------------------------- 
void Delay10us(unsigned char n) 
{ 
while(n--) 
{ 
NOP_1uS;NOP_1uS;NOP_1uS; 
NOP_1uS;NOP_1uS;NOP_1uS; 
NOP_1uS; 
} 
} 
//----------------------------------- 
//功能:写18B20 
//----------------------------------- 
void Write_18B20(unsigned char n) 
{ 
unsigned char i; 
for(i=0;i<8;i++) 
{ 
DQ=0; 
Delay10us(1);//延时13us 左右 
DQ=n & 0x01; 
n=n>>1; 
Delay10us(5);//延时50us 以上 
DQ=1; 
} 
} 
//------------------------------------ 
//功能:读取18B20 
//------------------------------------ 
unsigned char Read_18B20(void) 
{ 
unsigned char i; 
unsigned char temp; 
for(i=0;i<8;i++) 
{ 
temp=temp>>1; 
DQ=0; 
NOP_1uS;//延时1us 
DQ=1; 
NOP_1uS;NOP_1uS;//延时5us 
NOP_1uS;NOP_1uS;NOP_1uS; 
if(DQ==0) 
{ 
temp=temp&0x7F; 
}else 
{ 
temp=temp|0x80; 
} 
Delay10us(5);//延时40us 
DQ=1; 
} 
return temp; 
} 
//----------------------------------- 
void Init (void) 
{ 
DQ=0; 
Delay10us(50);//延时500us 
DQ=1; 
Delay10us(9);//延时90us 
if(DQ==1) //0001 1111b=1f 
{ 
Power =0; //失败0 
}else 
{ 
Power++; 
DQ=1; 
} 
} 
//---------------------------------- 
void Skip(void) 
{ 
Write_18B20(0xcc); 
Power++; 
} 
//---------------------------------- 
void Convert (void) 
{ 
Write_18B20(0x44); 
Power++; 
} 
//---------------------------------- 
void Delay1S (void) 
{ 
static unsigned int i=0; 

if (i++==Seck) {i=0;Power++;} 
} 
//---------------------------------- 
void ReadDo (void) 
{ 
Write_18B20(0xbe); 
Power++; 
} 
//---------------------------------- 

void ReadTemp (void) 
{ 
union 
{ 
unsigned char Temp[2]; //单字节温度 
int Tt; //2字节温度 
}T; 
T.Temp[1]=Read_18B20(); //读低位 
T.Temp[0]=Read_18B20(); //读高位 
//----------------------------------- 
Power=0; 
T.Tt <<= 4; 
Temper=T.Temp[0]; 
} 
/********************************** 
函数指针定义 
***********************************/ 
code void (code *SubTemp[])()= 
{ 
Init,Skip,Convert,Delay1S,Init,Skip,ReadDo,ReadTemp 
}; 
//***************************** 
void GetTemp(void) 
{ 
(*SubTemp[Power])(); 

} 
//**************************************

⌨️ 快捷键说明

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