参考文献
[1]王国玉,电子线路CAD与实训,北京,电子工业出版社,2011年。 [2]李全利,单片机原理及应用,北京,清华大学出版社,2006年。
[3]郭天祥,51单片机C语言教程,北京,电子工业出版社,2012年。
20
附 件
4.1输入部分程序
int Ds18b20ReadTemp() {
float tp; uchar tmh, tml; Ds18b20ChangTemp(); Ds18b20Init();
Ds18b20WriteByte(0xcc); Ds18b20WriteByte(0xbe);
//跳过ROM操作命令 //发送读取温度命令
//读取温度值共16位,先读低字节 //再读高字节
//先写入转换命令
//读取温度
tml = Ds18b20ReadByte(); tmh = Ds18b20ReadByte(); temp = tmh; temp <<= 8; temp |= tml; if(temp< 0)
//当温度值为负数
{
DisplayData[0] = 0x40;
//因为读取的温度是实际温度的补码,所以减1,再取反求出原码 temp=temp-1; temp=~temp; tp=temp;
temp=tp*0.0625*100+0.5;
//留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小
数点
//后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于
0.5的就 }
else
//算由?.5,还是在小数点后面。
{
DisplayData[0] = 0x00;
21
tp=temp;//因为数据处理有小数点所以将温度赋给一个浮点型变量 //如果温度是正的那么,那么正数的原码就是补码它本身 temp=tp*0.0625*100+0.5;
//留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小
数点
//后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于
0.5的就 //算加上0.5,还是在小数点后面。
}
return temp;
}
4.2输出部分程序
void warn(uchar s,uchar led) //蜂鸣器报警,灯闪烁 { uchar i;i=s;
//s控制音调,led控制灯
beep=0;
//蜂鸣器响
P1=led;
//控制相应的灯亮
while(i--) { Display(Ds18b20ReadTemp());
} beep=1; // 蜂鸣器不响
P1=0x00;
//控制相应的灯灭
i=s; while(i--) { Display(Ds18b20ReadTemp());
}
}
void deal(int temp) //温度处理函数
{ uchar i;
if((temp>warn_l2)&&(temp<=warn_l1))
1
{ warn(20,0x01);
}
else if(temp<=warn_l2) { warn(5,0x03); }
else if((temp
else if(temp>=warn_h2) { warn(5,0x0c); } else { i=40; while(i--) { Display(Ds18b20ReadTemp());
}
}
}
void Display(int temp) //数码管温度显示 { DisplayData[1] =table[temp / 10000]; DisplayData[2] =table[temp % 10000 / 1000]; DisplayData[3] =table[temp % 1000 / 100] | 0x80; DisplayData[4] =table[temp % 100 / 10]; DisplayData[5] =table[temp % 10];
DigDisplay();
//动态显示
//小数点2