51单片机驱动DS18B20温度传感器程序及心得
=========== } start_sensor() //启动传感器; //==========以下是把温度传感器内部数据编译成16进制编码; delay_ms() //延时1秒; main() uint8 dat=0 ,j=3,len=0 ,num[]="start.....";
{
uint8 j=0, dat =0;
for(j=0;j<8;j++)
{
dat>>=1;
wd=0; // A点mcu拉低电平3.26微秒;
delay2(); // 延时3.26微秒;
wd=1;
if(wd)
{
dat|=0x80;
} //读完数据后A点到此处是11.93微秒,保持在15微秒之内;
delay(9); // A点到此处80.29微秒; 理想时间范围是60--120微秒;
wd=1; //释放总线;
delay2(); //延时3.26微秒;
}
return dat;
{
reset_1820();
write_byte(0xcc); //跳跃命令;
write_byte(0x44); //转换temperature(温度)命令;
}
uint8 read_temp() //从温度传感器度温度数据过程;
{
uint8 ak[2];
uint16 dat=0 , j=0;
reset_1820(); //复位温度传感器
write_byte(0xcc); //跳跃rom命令;
write_byte(0xbe) ; // 发出读数据命令;
ak[0]=read_byte(); //读取第一个字节数据;
ak[1]=read_byte(); //读取第二个字节数据;
dat=ak[1]; //要把两个八位数据载入1个16位变量里;
dat<=8;
dat|=ak[0];
j= dat;
if((j>>11)==0x1f) //此语句是负温度进入.0x1f是二进制5个全1;
{
dat=(~dat)+1; //负温度要取反加一操作;
dat/=16; //传感器给的温度系数要除以16后,得到的数才是常规温度系数;
w=0; //此语句是在主函数中用来判断是正温度还是负温度;
return dat; //向主函数返回数据,并终止函数;
}
j=dat;
if((j>>11)==0) //如果是零则是正温度;
{
dat/=16; //数据直接除以16,就得到了常规温度系数;
w=1; //1代表正;
return dat; //向主函数返回数据,并终止函数;
}
return 130; //向主函数返回数据,并终止函数;
}
{
uint8 i=250;
uint16 j=608;
while(j--)
{ while(i--);
i=250;
}
}
error() //测温出错;
{
uint8 i=5, j=0 ,ak[]="Error!";
while(i--)
{
play_cmd(0x82);
while(ak[j]!=)
{
play_data(ak[j++]);
} j=0;
delay3();
play_cmd(0x01);
delay3();
}
}
{
reset_1602();
while(j--) //这是启动电源时,液晶显示:start....(并闪烁3次)
{ play_cmd(0x82);
while(num[len]!=)
{
play_data(num[len++]);
}
len=0;
delay3();
play_cmd(0x01);
delay3();
}
while(1)
{
start_sensor(); //启动温度传感器;
delay_ms(); //等待1秒;
dat = read_temp(); //读取温度数据并赋给dat变量;
if(dat==130) //如果返回来的数据是130,表明采集温度出错;
{
error();
}
else if(w==1) //如果w是1,就代表正温度.输出;
{
play_cmd(0x83);
play_data(dat/10+0);
play_data(dat%10+0);
}
else //否则,就是负温度,输出时前面加一个负号;
{
play_cmd(0x82);
play_data(-);
play_data(dat/10+0);
play_data(dat%10+0);
}
} //我的亲娘四舅奶奶啊!!!!!!终于完成了!!!!2013年5月9日19:32:10
}
51单片机DS18B20温度传感 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)