温控系统课程设计说明书 - 图文 下载本文

参考文献

[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=warn_h1)) { warn(20,0x04); }

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