数字式温湿度测量仪设计Word下载.docx
- 文档编号:20586962
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:22
- 大小:197.56KB
数字式温湿度测量仪设计Word下载.docx
《数字式温湿度测量仪设计Word下载.docx》由会员分享,可在线阅读,更多相关《数字式温湿度测量仪设计Word下载.docx(22页珍藏版)》请在冰豆网上搜索。
程序设计
第六天~第八天
程序调试、仿真
第九天~第十天
系统测试并编写设计说明书
教研室
意见
年月日
系(部)主管领导意见
目录
一、概述5
二、设计内容及要求5
1、课题内容5
2、要求5
三、设计原理6
1、
温度传感器的选择6
2、
湿度传感器的选择6
四、设计方案6
程序:
7
五、测试结果18
六、设计心得体会19
七、参考文献19
一、概述
温湿度测量有着广泛的应用,标准温湿度测量仪主要应用于计量、气象、军事等领域,实现准确高精度的测量温湿度,同时还可以作为其他温湿度仪表校正的参考标准。
数字式通风干湿表是一种重要的湿度标准器,干湿球温度的测量精度是制约其湿度精度的重要因素,本文设计的数字式标准温湿度测量仪,着重提高温度的测量精度,达到高精度湿度测量的目的。
温湿度是人们日常生活中接触最多的两个物理量,人们的日常生活、动植物的生存繁衍和周围环境的温湿度息息相关,石油、化工、冶金、纺织、机械制造、航空航天、制药、烟草、档案保管、粮食存储等领域对温、湿度也有着较高的要求。
例如:
烟叶和纸张是吸湿性极高的材料,卷烟生产的每一个阶段对温、湿度都有非常特别的要求,以确保所使用材料的水分,保证生产的效率和产品质量;
印刷车间的温、湿度控制水平对印刷质量有很大的影响[2];
为防止库存武器弹药、金属材料等物品霉烂、生锈,必须保持环境温度不能过高和干燥;
而水果、种子、肉类等的保存又需要保证一定的湿度;
在矿山、棉麻、塑料、粉末金属、食品生产加工等企业的生产车间(环境)中往往会产生大量的可燃或易燃粉尘,如果空气湿度过低,在一定的能量下,极易发生粉尘爆炸。
二、设计内容及要求
1、课题内容
以单片机为核心,使用SHT11温、湿度传感器设计一个数字式温湿度计。
测温范围-55-125摄氏度,精度0.5摄氏度;
液晶屏的第一行显示“温湿度测量仪”,第二行显示设计者姓名和学号,第三行显示测量温度、温度设定的上、下限报警值。
2、要求
完成该系统的硬件和软件的设计,在Proteus软件上仿真通过,并提交一篇课程设计说明书。
三、设计原理
温度传感器的选择
采用热电阻温度传感器。
热电阻是利用导体的电阻随温度变化的特性制成的测温元件。
现应用较多的有铂、铜、镍等热电阻。
其主要的特点为精度高、测量范围大、便于远距离测量。
铂的物理、化学性能极稳定,耐氧化能力强,易提纯,复制性好,工业性好,电阻率较高,因此,铂电阻用于工业检测中高精密测温和温度标准。
缺点是价格贵,温度系数小,受到磁场影响大,在还原介质中易被玷污变脆。
按IEC标准测温范围-200~650℃,XX电阻比W(100)=1.3850时,R0为100Ω和10Ω,其允许的测量误差A级为±
(0.15℃+0.002
|t|),B级为±
(0.3℃+0.005
|t|)。
铜电阻的温度系数比铂电阻大,价格低,也易于提纯和加工;
但其电阻率小,在腐蚀性介质中使用稳定性差。
在工业中用于-50~180℃测温。
湿度传感器的选择
测量空气湿度的方式很多,其原理是根据某种物质从其周围的空气吸收水分后引起的物理或化学性质的变化,间接地获得该物质的吸水量及周围空气的湿度。
电容式、电阻式和湿涨式湿敏原件分别是根据其高分子材料吸湿后的介电常数、电阻率和体积随之发生变化而进行湿度测量的。
采用CHR-01湿敏电阻。
CHR-01湿敏电阻适用于阻抗型高分子湿度传感器,它的工作电压为交流1V,频率为50Hz~2kHz,测量湿度范围为20%~90%RH,测量精度±
5%,工作温度范围为0~+85℃,最高使用温度120℃,阻抗在60%RH(25℃)时为30(21~40.5)KΩ。
采用555时基或RC振荡电路,将湿度传感器等效为阻抗值,测量振荡频率输出,振荡频率在1k
Hz左右。
四、设计方案
把各个功能模块编写成单独的源文件进行调试,调试成功以后,再将各部分联合在一起。
用户温度输入数据时上限、下限分别在七段数码管的0、1、2、3位置显示,湿度输入数据时上限、下限分别在七段数码管的4、5、6、7位置显示。
读键存储的过程是循环程序。
可循环等待直到用户输入正确并确认为止。
采样转换模块是一个比较重要的模块,在调试的阶段遇到的问题较多,由于它是程序运行的瓶颈,如果这一部分通不过的话,那么程序就无法执行下去,本系统采用的是延时的方法。
温湿度判断控制模块也一个非常重要的模块,由于温湿度对于植被的生长起着决定性的作用,因此,如果这两个因素控制不好,这个系统就失败了,这就需要我认真的考虑这一模块的控制方式,调试阶段比较顺利。
除了以上所提到的模块之外,还有一些模块也很重要,也都需要认真的调试,如报警模块等。
调试了各模块之后,接下来的工作就是将各源程序段连接起来,进行综合调试了,综合调试需要我们特别注意细节部分,这样才能尽可能的减少错误的产生。
#include<
reg52.h>
#defineucharunsignedchar
#defineuintunsignedint
ucharg,s,b;
uinttemp,temp_dat;
floatf_temp;
voidlcd_display_temp_max(ucharname,ucharmax,ucharmin,bitf);
uchards18b20_int_date(void);
uchards18b20_float_date(void);
sbitrs=P2^0;
sbitrw=P2^1;
sbiten=P2^2;
sbitPSB=P2^3;
sbitDS=P3^3;
sbitfm=P3^4;
sbitk1=P3^5;
sbitk2=P3^6;
sbitk3=P3^7;
uintt,k;
uchartimeh,timel;
ucharshi,fen,miao;
ucharcodedis5[]={'
.'
};
ucharcodedis0[]={"
0123456789"
ucharcodedis1[]={"
00时00分00秒"
ucharcodedis2[]={"
.℃-55~90℃"
ucharcodedis3[]={"
"
ucharcodedis4[]={0xa1,0xa0,0xca,0xfd,0xd7,0xd6,0xca,0xbd,
0xce,0xc2,0xb6,0xc8,0xbc,0xc6,"
℃"
;
ucharcodezbjbxf[]={
0x64,0xA3,0xC1,0xA2,0x62,0x84,0x61,0x81,0x61,0xA4,0xA1,
0x91,0xA1,0x81,0x64/*,0xA3,0xC1,0xD2,0xD2,0xD2,0xA2,0xC4,
0xA1,0xC1,0xA1,0xC1,0xD2,0xD2,0xD2,0xA2,0xC4,0xC2,0x62,
0xC2,0x62,0xA2,0xA2,0x84,0x94,0x94,0x92,0x81,0x91,
0xA2,0xC2,0xD4,0xE4,0xA4,0xE4,0xA2,0xE2,0xA2,0xE2,0xA2,
0xA2,0x84,0x94,0x94,0x92,0x81,0x91,0xA2,0xC2,0xD8*/};
ucharcodechuzhi[]=
{
0xff,0xff,
0xFC,0x8E,
0xFC,0xED,
0xFD,0x43,
0xFD,0x6A,
0xFD,0xB3,
0xFD,0xF3,
0xFE,0x2D,
0xFE,0x47,
0xFE,0x76,
0xFE,0xA1,
0xFE,0xC7,
0xFE,0xD9,
0xFE,0xF9,
0xFF,0x16
voidwarning();
voiddelayms(uintxms)
uchari,j;
for(i=xms;
i>
0;
i--)
for(j=110;
j>
j--);
}
voiddelay(uintz)//延时165MS,即十六分音符
{
uinty;
for(z;
z>
z--)
for(y=19000;
y>
y--);
//大致时间
voidds18b20_init(void)
{uinti;
DS=0;
i=103;
while(i>
0)i--;
DS=1;
i=4;
bitds18b20_tmpreadbit(void)//readabit读一位
uinti;
bitdat;
i++;
//i++fordelay小延时一下
dat=DS;
i=8;
return(dat);
uchards18b20_tmpread(void)
uchari,j,dat;
dat=0;
for(i=1;
i<
=8;
i++)
{
j=ds18b20_tmpreadbit();
dat=(j<
<
7)|(dat>
>
1);
//读出的数据最低位在最前面,这样刚好
}//一个字节在DAT里
return(dat);
//将一个字节数据返回
voidds18b20_tmpwritebyte(uchardat)
{//写一个字节到DS18B20里
ucharj;
bittestb;
for(j=1;
j<
j++)
{
testb=dat&
0x01;
dat=dat>
1;
if(testb)
i++;
while(i>
}
else
voidds18b20_tmpchange(void)//DS18B20beginchange发送温度转换命令
ds18b20_init();
//初始化DS18B20
delayms(10);
ds18b20_tmpwritebyte(0xcc);
//跳过序列号命令
ds18b20_tmpwritebyte(0x44);
//发送温度转换命令
uintds18b20_gettemp()
uchara,b;
ds18b20_tmpwritebyte(0xbe);
a=ds18b20_tmpread();
b=ds18b20_tmpread();
temp=b;
temp<
temp=temp|a;
f_temp=temp*0.0625;
temp=f_temp*10+0.5;
f_temp=f_temp+0.05;
returntemp;
voidwrite_com(ucharcom)
rs=0;
rw=0;
en=0;
P0=com;
delayms(5);
en=1;
voidwrite_data(uchardate)
rs=1;
P0=date;
voidlcd_pos(ucharX,ucharY)
ucharpos;
if(X==0)
{
X=0x80;
if(X==1)
X=0x90;
if(X==2)
X=0x88;
if(X==3)
X=0x98;
pos=X+Y;
write_com(pos);
voidwrite_sfm(intadd,uintdate)
ucharshi,ge;
shi=date/10;
ge=date%10;
lcd_pos(0,0+add);
write_data(0x30+shi);
write_data(0x30+ge);
voidkeyscan()
if(k1==0)
delayms(5);
if(k1==0)
{
k++;
while(!
k1);
if(k==1)
{
TR0=0;
write_com(0x0f);
lcd_pos(0,5);
}
}
if(k==2)
{
lcd_pos(0,3);
if(k==3)
lcd_pos(0,1);
if(k==4)
k=0;
write_com(0x0c);
TR0=1;
}
if(k!
=0)
if(k2==0)
delayms(5);
if(k2==0)
while(!
k2);
if(k==1)
{
miao++;
if(miao==60)
miao=0;
write_sfm(5,miao);
lcd_pos(0,5);
}
if(k==2)
fen++;
if(fen==60)
fen=0;
write_sfm(3,fen);
lcd_pos(0,3);
if(k==3)
shi++;
if(shi==24)
shi=0;
write_sfm(1,shi);
lcd_pos(0,1);
if(k3==0)
if(k3==0)
k3);
miao--;
if(miao==-1)
miao=59;
fen--;
if(fen==-1)
fen=59;
shi--;
if(shi==-1)
shi=23;
voidinit()
PSB=1;
write_com(0x30);
write_com(0x0c);
write_com(0x01);
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
TMOD=0x11;
ET0=1;
ET1=1;
PT0=1;
PT1=0;
EA=1;
TR0=1;
voidwrite_sfm3(intadd3,uintdate3)
shi=date3/10;
ge=date3%10;
lcd_pos(1,0+add3);
voidwrite_sfm4(intadd4,uintdate4)
shi=date4/10;
ge=date4%10;
lcd_pos(1,0+add4);
voiddis_temp(uintt)
b=t/10;
write_sfm3(0,b);
//lcd_pos(1,0);
//write_data(dis0[b]);
s=t%10;
write_sfm4(2,s);
/*s=t%100/10;
lcd_pos(1,1);
write_data(dis0[s]);
lcd_pos(1,2);
write_data('
);
g=t%10;
lcd_pos(1,3);
write_data(dis0[g]);
*/
voidwarning()
uinttemp_music;
//存放简谱数组中的每一个音符的临时变量
uchari=0;
ucharjp;
//jp用于取出temp中的高8位和低8位
while
(1)
temp_music=zbjbxf[i];
if(temp_music==0xff)
break;
jp=temp_music/16;
//取数的高4位,音频数值
if(jp!
timeh=chuzhi[jp*2];
//构造定时器初值高8位
timel=chuzhi[jp*2+1];
//构造定时器初值低8位
TR1=1;
//开定时器
else
TR1=0;
//关定时器
fm=1;
//关蜂鸣器
delay(temp_music%16);
//取数的低4位,节拍(音符总时延)
//唱完一个音停5MS
i++;
TR1=0;
fm=1;
voidmain()
uchari;
init();
lcd_pos(0,1);
i=0;
while(dis1[i]!
='
\0'
)
write_data(dis1[i]);
lcd_pos(1,0);
while(dis2[i]!
write_data(dis2[i]);
lcd_pos(2,0);
while(dis3[i]!
write_data(dis3[i]);
lcd_pos(3,0);
while(dis4[i]!
write_data(dis4[i]);
}
keyscan();
ds18b20_tmpchange();
temp_dat=ds18b20_gettemp();
if(b>
25||b<
15)
warning();
}
voidtimer()interrupt1
TH0=15535/256;
TL0=15535%256;
t++;
if(t==20)
t=0;
miao++;
if(miao==60)
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
shi=0;
write_sfm(1,shi);
write_sfm(3,fen);
write_sfm(5,miao);
dis_temp(temp_dat);
voidtimer0()interrupt3
TH1=timeh;
TL1=timel;
fm=~fm;
五、测试结果
通过实物仿真,得到下图所示结果:
六、设计心得体会
在为期两周的单片机课程设计中,第一周是要将以前做过的实验再次仿真一遍,在做完以前的题目后,刘辉老师让我们抽签选取自己的课程设计题目,我选到了第八个题目,就是数字式温湿度测量仪设计这个课题,在做这
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字式 温湿度 测量仪 设计