温度测控系统设计报告Word文档格式.docx
《温度测控系统设计报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《温度测控系统设计报告Word文档格式.docx(15页珍藏版)》请在冰点文库上搜索。
(1)程序流程图如图3所示:
流程图如下所示开始时各个部件都是初始化,准备读取温度,如果设置温度,我们将设置上限温度和下限温度,并且在LED上面显示上限温度和下限温度。
如果LED上显示的温度是大于上限温度则开启风扇停止加热也报警;
如果LED上显示的温度是小于下限温度则关风扇加热也有报警。
如果读取温度是介于当中则关闭报警,流程图如下所示:
否是
否
是
否是
否是
(3)程序:
#include<
reg51.h>
absacc.h>
math.h>
unsignedcharled_code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
#defineucharunsignedchar
#defineuintunsignedint
charda;
intmx=5;
//上限报警温度
intmin=-3;
//下限报警温度
sbitDQ=P1^0;
sbital=P1^1;
sbitmotor=P1^2;
sbitheat=P1^3;
sbitsz=P1^4;
sbitadd=P1^5;
sbitdel=P1^6;
sbithl=P1^7;
intcc;
ucharflag;
voiddelay(uintn)
{
uchari;
for(i=0;
i<
n;
i++);
}
union
ucharc[2];
}temp;
//读取的温度值存放在temp中
ucharoldc[2];
voidow_reset()//复位
DQ=0;
delay(50);
//低电平480us
DQ=1;
delay(15);
//DQ高电平等待
}
ucharread_byte()//从单总线上读取一个字节
uchari,value=0;
8;
i++)
{
value>
>
=1;
DQ=0;
DQ=1;
delay
(1);
if(DQ)value|=0x80;
delay(6);
}
returnvalue;
voidwrite_byte(ucharval)//向单总线写入一个字节
i++)//一次写一字节
DQ=val&
0x01;
delay(5);
val>
delay(5);
voidread_temprature()//读取温度
{
ow_reset();
write_byte(0xcc);
//跳过ROM
write_byte(0xbe);
//读
temp.c[1]=read_byte();
temp.c[0]=read_byte();
write_byte(0x44);
//开始
voiddesplay()//显示温度
ucharg,s,b;
flag=0;
b=0;
cc=temp.c[0]*256.0+temp.c[1];
if(temp.c[0]>
0xf8){flag=1;
cc=~cc+1;
da=-cc*0.0625;
elseda=cc*0.0625;
if(da>
mx){al=1;
motor=1;
heat=0;
}//开警报,开马达
elseif(da<
min){al=1;
motor=0;
heat=1;
}//开警报
elseal=0;
//关警报
cc*=0.0625;
b=cc/100;
s=(cc%100)/10;
g=cc%10;
if(!
flag)//正温度
if(b)//百位
{
P2=0x02;
P0=~led_code[b];
delay(100);
}
if(s||b)//十位显示
P2=0x04;
P0=~led_code[s];
}
P2=0x08;
P0=~led_code[g];
//个位显示
//delay(50);
else//负温度
if(s!
=0&
&
b==0)
P0=0xbf;
//显示-号
P2=0x01;
delay(50);
else
//个位显示
}
voiddesplay1()//显示设置温度
ucharg,s,b,flg;
flg=1;
if(hl==0)
cc=min;
else
cc=mx;
if(cc<
0)
{cc=-cc;
flg=0;
if(flg)//正温度
voidmain()
uchari=0,j,k=0;
al=0;
delay(10);
for(j=1;
j<
5;
j++)
read_temprature();
oldc[0]=temp.c[0];
oldc[1]=temp.c[1];
while
(1)
if(sz==0)
desplay1();
if(hl==0)
{
if(add==0)
{
min++;
while(add==0)desplay1();
}
if(del==0)
min--;
while(del==0)desplay1();
}
else
mx++;
mx--;
while(del==0)desplay1();
i++;
if(i==20)
{
i=0;
read_temprature();
while((abs(oldc[0]-temp.c[0])>
3||abs(oldc[1]-temp.c[1])>
3)&
k<
3)
{read_temprature();
k++;
}//读取一个稳定的温度
{oldc[0]=temp.c[0];
oldc[1]=temp.c[1];
k=0;
desplay();
六、仿真图
仿真图一如上图所示,读取温度为-2度(低于下限温度0度),则开加热和警报,而风扇停动。
仿真图二如上所示,读取温度为5度(高于上限温度3度),则停止加热但开启风扇和警报。
而如果读取的温度介于上限和下限之间,则停止警报。
七、心得体会:
温度测控系统的设计和我们以前做过的温度实验类似,但是我们在设计过程遇到了一些小麻烦,比如温度不稳定等等。
但最终还是客服了其中的困难,结合有关程序设计知识及proteus知识最终完成了本次实验。
感谢老师在实验设计过程中对我们的指导,希望彭老师在新的一年里工作顺利,步步高升。