数字温度传感器DS18b20只能测量温度,本身并无报警功能。当需要用它来监控温度时,需要在程序中,设定报警温度的上限与下限。然后实时读取温度值并与这个温度限值进行比较,高于 上限或低于下限量,通过点亮不同颜色的LED灯或驱动蜂鸣器来完成报警功能。
比如,设定温度上限为32℃,下限设定为25℃,
void deal(uint t) //报警温度范围设定
{
uchar i; //定义变量
if((t>warn_l2)&&(t<=warn_l1)) //大于25度小于27度
warn(40,0x01); //长音报警,显示温度
else if(t<=warn_l2) //小于25度
warn(10,0x03); //短音报警,显示温度
else if((t<warn_h2)&&(t>=warn_h1)) //小于32度大于30度
warn(40,0x04); //长音报警,显示温度
else if(t>=warn_h2) //高于32度
warn(10,0x0c); //短音报警,显示温度
else //正常范围
{
for(i=40;i>0;i--) //循环
dis_temp(get_temp()); //显示正常温度
}
}
追问哦 谢谢 有一点不明白 数据手册里有报警标志位flag不知道能不能用来判断是否报警
追答可以用。所谓18b20的报警标志位,只是由18b20提供一个存储温度上、下限设定值的寄存空间,这个设定值是需要编程写入的,然后由18b20内部去比较设定值与测量值的高低,当高于或低于设定范围时,它会通过总线向CPU发出一串脉冲,这串脉冲也是需要编程指挥CPU去读取,然后再编程来区分是高于设定温度还是低于设定温度,最后再编程通过CPU端口输出相应控制信号去驱动蜂鸣器发声或者是驱动LED发光来完成报警功能。
两相比较,这岂止是绕了360度,简直是绕了720度的弯,所以但凡编程人员都不会去做这种得不偿失的工作。不信你去网上搜一搜,看看有谁采用这样的操作方法?
追问原来这么麻烦 谢谢了