📄 18b20.txt
字号:
#include <REG52.H>
#include <intrins.h>
bit flag;//复位标志
unsigned char code displaycode[9]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F};
unsigned char t;
sbit DQ=P3^7; //定义通信端口
//sbit Key=P2^0;//按下键后开始转换
sbit P3_6=P3^6; //复位不成功灯亮
delay(unsigned char i);//延时函数
Init_DS18B20(void)reentrant;//处始化函数
WriteOneChar(unsigned char dat);//写命令
ReadOneChar();//读温度
unsigned char temperature();//温度转换函数
Display0();//显示函数
void main()
{
while(1)
{
t=temperature();
Display0();// 显示函数
}
}
/////*****温度转换函数*****////////////////////////////
unsigned char temperature(void)
{
unsigned char a,b,c=0;
unsigned char k;
Init_DS18B20();
WriteOneChar(0xCC); // 跳过读序号列号的操作
WriteOneChar(0x44); // 启动温度转换
Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0xBE); //读取温度寄存器
a=ReadOneChar(); //先读低八位
b=ReadOneChar(); //后读高八位
c=b&0xf0;//测试温度正负
if(c) //若为负求其补码
b=~b+1;
k=(unsigned char)(b*256+a)*0.0625;
return(k);
}
///////////////****初始化函数**********//////////////////////
Init_DS18B20(void)reentrant
{
DQ = 0; //DQ拉低
delay(120); //精确延时 大于 480us小于960us
DQ = 1; //拉高总线
delay(5);//等待时间大于15小于60毫秒
flag=DQ; //稍做延时后 如果flag=0则初始化成功flag=1则初始化失败
if(!flag)
{delay(35);
DQ=1;}
else
{ P3_6=0; //不成功重新初始化 灯亮
Init_DS18B20();
}
}
////////////////***写命令函数*****////////////////////
WriteOneChar(unsigned char dat)
{
unsigned char i=0;
bit Test ;
for(i=8;i>0;i--)
{
Test=dat&0x01; //测试写入位是零或一
dat>>=1; //接着写下一位
if(Test)
{
DQ=0; //写周期的开始
DQ=1;
delay(10);
}
else
{
DQ=0;
delay(12) ;
DQ=1; //释放总线
}
}
}
/////////////////*****读温度信息****////////////////////////////
ReadOneChar()
{
unsigned char dat,i,k=0;
for(i=8;i>0;i--)
{
DQ=0;
DQ=1; ///释放总线 读数据
dat>>=1;
if(DQ) /////包括拉低总线的前15微秒采样
dat|=0x80;
delay(12); ////至少需要60微秒
}
return(dat);
}
///////////////*****微秒级延时 延时间为3+(n+1)*6+2**********////////////
delay(unsigned char i)
{
while(i--);
}
/////////////******显示函数******///////////////
Display0()
{ unsigned char m,n;
m=t/10;//温度高位
n=t%10;//温度低位
P1=0xff;
P1=displaycode[m];
P2=0xfd;
delay(150);
P2=0xff;///每次显示完后送高电平
P1=0xff;
P1=displaycode[n];
P2=0xfe;
delay(150);
P2=0xff;////每次显示完后送高电平
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -