温度测控系统设计报告.docx
- 文档编号:11754640
- 上传时间:2023-03-31
- 格式:DOCX
- 页数:15
- 大小:101.64KB
温度测控系统设计报告.docx
《温度测控系统设计报告.docx》由会员分享,可在线阅读,更多相关《温度测控系统设计报告.docx(15页珍藏版)》请在冰豆网上搜索。
温度测控系统设计报告
温度测控系统
专业班级:
电信09103班
设计者:
漆金标200911020347
胡绍辉200911020302
指导老师:
彭建英
设计时间:
2011.12.06
一、实验目的:
设计一个温度测控系统
二、功能要求:
利用DS18B20设计一个温度测控系统,在LED数码显示器上显示温度值,并对温度进行测试和设定,当检测温度到达温度上限时开风扇(即开启电动机),低于下限时关闭风扇并加热,LED上的显示内容为:
XX℃(采用十进制显示)。
三、方案论证:
系统框图设计如图1所示:
四、系统硬件设计:
系统硬件设计图
5、软件设计:
(1)程序流程图如图3所示:
流程图如下所示开始时各个部件都是初始化,准备读取温度,如果设置温度,我们将设置上限温度和下限温度,并且在LED上面显示上限温度和下限温度。
如果LED上显示的温度是大于上限温度则开启风扇停止加热也报警;如果LED上显示的温度是小于下限温度则关风扇加热也有报警。
如果读取温度是介于当中则关闭报警,流程图如下所示:
否是
否
是
否是
否是
(3)程序:
#include
#include
#include
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 } union { ucharc[2]; }temp;//读取的温度值存放在temp中 ucharoldc[2]; voidow_reset()//复位 { DQ=0;delay(50);//低电平480us DQ=1;delay(15);//DQ高电平等待 } ucharread_byte()//从单总线上读取一个字节 { uchari,value=0; for(i=0;i<8;i++) { value>>=1; DQ=0; DQ=1; delay (1); if(DQ)value|=0x80; delay(6); } returnvalue; } voidwrite_byte(ucharval)//向单总线写入一个字节 { uchari; for(i=0;i<8;i++)//一次写一字节 { DQ=0; DQ=val&0x01; delay(5); DQ=1; val>>=1; } delay(5); } voidread_temprature()//读取温度 { ow_reset(); write_byte(0xcc);//跳过ROM write_byte(0xbe);//读 temp.c[1]=read_byte(); temp.c[0]=read_byte(); ow_reset(); write_byte(0xcc); 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 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]; delay(100); } P2=0x08; P0=~led_code[g];//个位显示 //delay(50); } else//负温度 { if(s! =0&&b==0) { P2=0x02; P0=0xbf;//显示-号 delay(100); } if(b)//百位 { P2=0x01; P0=0xbf;//显示-号 delay(50); P2=0x02; P0=~led_code[b]; delay(100); } if(s||b)//十位显示 { P2=0x04; P0=~led_code[s]; delay(100); } else { P2=0x04; P0=0xbf;//显示-号 delay(100); } P2=0x08; P0=~led_code[g];//个位显示 } } voiddesplay1()//显示设置温度 { ucharg,s,b,flg; flg=1; if(hl==0) cc=min; else cc=mx; if(cc<0) {cc=-cc;flg=0;} b=cc/100; s=(cc%100)/10; g=cc%10; if(flg)//正温度 { if(b)//百位 { P2=0x02; P0=~led_code[b]; delay(100); } if(s||b)//十位显示 { P2=0x04; P0=~led_code[s]; delay(100); } P2=0x08; P0=~led_code[g];//个位显示 //delay(50); } else//负温度 { if(s! =0&&b==0) { P2=0x02; P0=0xbf; delay(100); } if(b)//百位 { P2=0x01; P0=0xbf; delay(50); P2=0x02; P0=~led_code[b]; delay(100); } if(s||b)//十位显示 { P2=0x04; P0=~led_code[s]; delay(100); } else { P2=0x04; P0=0xbf; delay(100); } P2=0x08; P0=~led_code[g];//个位显示 } } voidmain() { uchari=0,j,k=0; al=0;heat=0;motor=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 { if(add==0) { mx++; while(add==0)desplay1(); } if(del==0) { mx--; while(del==0)desplay1(); } } } else { 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知识最终完成了本次实验。 感谢老师在实验设计过程中对我们的指导,希望彭老师在新的一年里工作顺利,步步高升。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 温度 测控 系统 设计 报告