温度采集与控制装置.docx
- 文档编号:12350149
- 上传时间:2023-06-05
- 格式:DOCX
- 页数:13
- 大小:15.97KB
温度采集与控制装置.docx
《温度采集与控制装置.docx》由会员分享,可在线阅读,更多相关《温度采集与控制装置.docx(13页珍藏版)》请在冰点文库上搜索。
温度采集与控制装置
#include
unsignedcharcodeshumaguan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};
wendu[4]={3,0,2,0};
chartemp,flag_shumaguan,L1,Tmax,Tmin,qujian,i,t0,t1,t2;
unsignedcharkeyvalue,flag_key;
sbitDQ=P1^4;
sbitbuzzer=P0^6;
sbitrelay=P0^4;
voiddelay(void)
{
unsignedcharm,n;
for(m=20;m>0;m--)
for(n=20;n>0;n--);
}
/******************************温度传感器程序**************************************/
//延时函数
voiddelayus(unsignedintt)
{
while(t--);
}
//DS18B20初始化函数
bitinit_ds18b20(void)
{
bitinitflag=0;
DQ=1;
delayus(12);
DQ=0;
delayus(80);//延时大于480us
DQ=1;
delayus(10);//14
initflag=DQ;//initflag等于1初始化失败
delayus(5);
returninitflag;
}
//通过单总线向从器件写一个字节
voidwr_ds18b20(unsignedcharbyt)
{
unsignedchari;
for(i=0;i<8;i++)
{
DQ=0;
DQ=byt&0x01;
delayus(5);
DQ=1;
byt>>=1;
}
delayus(5);
}
//通过单总线从从器件读一个字节
unsignedcharrd_ds18b20(void)
{
unsignedchari;
unsignedcharbyt;
for(i=0;i<8;i++)
{
DQ=0;
byt>>=1;
DQ=1;
if(DQ)
{
byt|=0x80;
}
delayus(5);
}
returnbyt;
}
//温度转换、读取及数据处理器函数
unsignedcharrd_temperature(void)
{
unsignedcharlow,high;
init_ds18b20();
wr_ds18b20(0xCC);
wr_ds18b20(0x44);//启动温度转换
delayus(200);
init_ds18b20();
wr_ds18b20(0xCC);
wr_ds18b20(0xBE);//读取寄存器
low=rd_ds18b20();//低字节
high=rd_ds18b20();//高字节
temp=high<<4;
temp|=(low>>4);
returntemp;
}
/******************************显示程序**************************************/
voiddisplay()
{
unsignedintk,x1,x2,x3,x6,x7,x8;
if(!
flag_shumaguan)//显示湿度与区间界面
{
x1=10;
x2=qujian;
x3=10;
x6=10;
x7=temp/10;
x8=temp%10;
}
else//显示上下限界面
{
x1=10;
x2=wendu[0];
x3=wendu[1];
x6=10;
x7=wendu[2];
x8=wendu[3];
}
for(k=0;k<20;k++)
{
P2=0xc0;
P0=0x01;
P2=0xe0;
P0=shumaguan[x1];
delay();
P2=0xc0;
P0=0x02;
P2=0xe0;
P0=shumaguan[x2];
delay();
P2=0xc0;
P0=0x04;
P2=0xe0;
P0=shumaguan[x3];
delay();
P2=0xc0;
P0=0x20;
P2=0xe0;
P0=shumaguan[x6];
delay();
P2=0xc0;
P0=0x40;
P2=0xe0;
P0=shumaguan[x7];
delay();
P2=0xc0;
P0=0x80;
P2=0xe0;
P0=shumaguan[x8];
delay();
P2=0xc0;
P0=0x00;//关闭数码管,消抖动
P2=0xe0;
P0=0xff;
}
}
//3×4键盘矩阵扫描函数
unsignedcharkeyscan(void)
{
unsignedcharvalue;
P3=0x7F;//S4S5S6S7
switch(P3)
{
case0x7E:
delayus(5);if(P3!
=0x7e)break;
while(P3==0x7e);value=0;flag_key=1;break;
case0x7D:
delayus(5);if(P3!
=0x7d)break;
while(P3==0x7d);value=3;flag_key=1;break;
case0x7B:
delayus(5);if(P3!
=0x7b)break;
while(P3==0x7b);value=6;flag_key=1;break;
case0x77:
delayus(5);if(P3!
=0x77)break;
while(P3==0x77);value=9;flag_key=1;break;
default:
break;
}
P3=0xBF;//S8S9S10S11
switch(P3)
{
case0xBE:
delayus(5);if(P3!
=0xbe)break;
while(P3==0xbe);value=1;flag_key=1;break;
case0xBD:
delayus(5);if(P3!
=0xbd)break;
while(P3==0xbd);value=4;flag_key=1;break;
case0xBB:
delayus(5);if(P3!
=0xbb)break;
while(P3==0xbb);value=7;flag_key=1;break;
case0xB7:
delayus(5);if(P3!
=0xb7)break;
while(P3==0xb7);
if(!
flag_shumaguan)flag_shumaguan=~flag_shumaguan;
else
{
if(Tmax>Tmin)
{
flag_shumaguan=~flag_shumaguan;i=0;
}
else
{
buzzer=1;
relay=0;
P2=0xa0;
P2=0x00;
delayus(5000);
buzzer=0;
relay=0;
P2=0xa0;
P2=0x00;
}
}
break;
default:
break;
}
P3=0xDF;//S12S13S14S15
switch(P3)
{
case0xDE:
delayus(5);if(P3!
=0xde)break;
while(P3==0xde);value=2;flag_key=1;break;
case0xDD:
delayus(5);if(P3!
=0xdd)break;
while(P3==0xdd);value=5;flag_key=1;break;
case0xDB:
delayus(5);if(P3!
=0xdb)break;
while(P3==0xdb);value=8;flag_key=1;break;
case0xD7:
delayus(5);if(P3!
=0xd7)break;
while(P3==0xd7);if(!
flag_shumaguan)break;
wendu[0]=0;wendu[1]=0;wendu[2]=0;wendu[3]=0;i=0;break;
default:
break;
}
returnvalue;
}
/*********************************************主程序*********************************/
voidmain(void)
{
ints;
buzzer=0;
relay=0;
P2=0xa0;
P2=0x00;
P2=0x80;
P0=0xff;
P2=0x00;
TMOD=0x01;
TH0=0x3c;
TL0=0xaf;
TF0=0;
ET0=1;
EA=1;
TR0=1;
while
(1)
{
temp=rd_temperature();
Tmax=wendu[0]*10+wendu[1];
Tmin=wendu[2]*10+wendu[3];
if(!
flag_shumaguan)
{
if(temp elseif(temp>Tmax)qujian=2; elsequjian=1; } for(s=0;s<10;s++) { keyvalue=keyscan(); if(flag_key&&flag_shumaguan) { flag_key=0; wendu[i]=keyvalue; i++; if(i==4)i=0; } display(); } } } /*********************************定时器0启动执行机构程序*********************************/ voidtime0()interrupt1 { TR0=0; TH0=0x3c; TL0=0xaf; TF0=0; t0++; t1++; t2++; if(t0==16) { t0=0; if(qujian==0) { L1=~L1; P2=0xa0; buzzer=0; relay=0; P2=0x00; P2=0x80; if(L1)P0=0xfe; elseP0=0xff; P2=0x00; } } if(t1==8) { t1=0; if(qujian==1) { L1=~L1; P2=0xa0; buzzer=0; relay=0; P2=0x00; P2=0x80; if(L1)P0=0xfe; elseP0=0xff; P2=0x00; } } if(t2==4) { t2=0; if(qujian==2) { L1=~L1; P2=0xa0; buzzer=0; relay=1; P2=0x00; P2=0x80; if(L1)P0=0xfe; elseP0=0xff; P2=0x00; } } TR0=1; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 温度 采集 控制 装置