收藏 分销(赏)

基于-单片机温湿度检测仪设.doc

上传人:二*** 文档编号:4518403 上传时间:2024-09-26 格式:DOC 页数:28 大小:583KB
下载 相关 举报
基于-单片机温湿度检测仪设.doc_第1页
第1页 / 共28页
本文档共28页,全文阅读请下载到手机保存,查看更方便
资源描述
- - 基于单片机的温湿度检测仪的设计 环境的温湿度对保管好图书,延长图书寿命有很大关系。因为图书纸由于存放年深日久而缓慢变质,这种变化过程称为自然老化。高温、潮湿、低温和枯燥对档案的破坏作用是很缓慢的,我们肉眼感觉不到,但日积月累,不适宜的温湿度对纸质档案的危害就表现出来。温湿度对档案制成材料的影响很大,高温高湿会使纸水解、老化速度加快,会使危害档案制成材料的霉菌、细菌繁殖,会使光化作用增强,会使有害气体、灰尘吸附能力增大。因此, 这就要求我们采取科学的保护措施,控制与调节库房温湿度,减缓档案制成材料的损坏速度,最大限度地延长档案寿命。档案作为一种不可生资源,对于国家各个领域的开展都有着重要的保存和参考价值。根据科学的数据证实,大多数蛀虫和霉菌的生存温度在10摄氏度以上,低于这个温度,害虫即丧失活动能力和停顿繁殖,而相对湿度在65%以下,多数霉菌就无常发育。因此,有条件的收藏室,书画库房温度宜控制在10到18摄氏度,相对湿度应控制在50%--65%之间,这样可以抑制害虫、霉菌的生长繁殖,有利于书画纸的保养。倘假设将相对湿度降至45%以下,并持续较长的时间,纸又会因枯燥而脆裂,造成物理性朽坏。所以,保持相对湿度50%--65%以及10-18摄氏度的温湿度环境,是对书画保藏的一个严格要求。 温度是表示物体冷热程度的物理量,微观上来讲是物体分子热运动的剧烈程度。在整个宇宙当中,温度无处不存在。无论在地球上还是在月球上,也无论是在炽热的太阳上还是在阴冷的冥王星上,这一切无不由于空间位置的不同而存在着温度的差异。 湿度是表示大气枯燥程度的物理量。在一定的温度下在一定体积的空气里含有的水汽越少,那么空气越枯燥;水汽越多,那么空气越潮湿。空气的干湿程度叫做“湿度〞。在此意义下,常用绝对湿度、相对湿度、比拟湿度、混合比、饱和差以及露点等物理量来表示。湿度表示气体中的水蒸汽含量,有绝对湿度和相对湿度两种表示方法。绝对湿度是一定体积的空气中含有的水蒸气的质量,一般其单位是克/立方米,绝对湿度的最大限度是饱和状态下的最高湿度;相对湿度是绝对湿度与最高湿度之间的比,它的值显示水蒸气的饱和度有多高。 温度、湿度和人类的生产、生活有着密切的关系,同时也是工业生产中最常见最根本的工艺参数,例如机械、电子、石油、化工等各类工业中广泛需要对温度、湿度的检测与控制。并且随着人们生活水平的提高,人们对自己的生存环境越来越关注,而空气中温湿度的变化与人体的舒适度和情绪都有直接的影响,所以对温度、湿度的检测就非常有必要了。 目 录 摘要 一、温、湿度测量的目的及要求 二、设计所需元件清单 三、单片机实现温、湿度测量 3.1 原理图及说明 3.2 设计理念及实现方法 四、温、湿度传感器及液晶显示12864简介及应用 4.1温、湿度传感器 4.2液晶显示12864简介及应用 五、各个模块设计流程图 5.1温度测量程序流程图 5.2湿度测量程序流程图 5.3显示程序流程图 六、VC、VB界面显示 结论 参考文献 附录一、源程序代码 附录二、硬件实现与仿真图················································· 摘要 随着科学技术的日新月异,人类社会取得了长足的进步!在居家生活、工农业生产、气象、环保、国防、科研、航天等部门,经常需要对环境中的湿度和温度进展测量及控制。本设计设计了一个智能化的温湿度测量应用系统。本系统采用技术成熟的DHT11作为测量湿度和温度的传感器。控制系统芯片采用技术成熟,功能强大、价位低廉群众化的AT89C51单片机。DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。每个DHT11传感器都在准确的湿度校验箱中进展校准。校准系数以程序的形式储存在OTP存中,传感器部在检测信号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。LCD显示电路,声光报警电路都由AT89C51单片机控制。同时设计了能给系统提供稳定工作电压的电源电路。为了提高系统的抗干扰性能,对湿度、温度的检测采用了硬件抗干扰和软件抗干扰的综合方法。最后设计了系统各个功能局部的软件程序。由本设计课题做成的温湿度检测系统构造简单、价格廉价、量程宽,具有较高的可靠性、平安性及实用性。 Abstract With the rapid development of science and technology, human society has achieved great progress! In the life that occupy the home, industry, agriculture, national defense, weather, environmental protection and scientific research departments, such as aerospace, often need to the environment humidity and temperature measurement and control. The design of an intelligent humidity measuring the application systems. The system adopts the technology DHT11 as measuring the humidity and temperature sensor. Control system chip adopt mature technology, powerful, price cheap popular AT89C51. Each DHT11 sensors are accurate calibration of humidity in calibration. In the form of calibration coefficient of the program memory, OTP stored in sensor signal detection in the internal process to call these calibration factor. Wired system, system integration serial interface bees easy. LCD display circuit, sound-light alarm circuit controlled by AT89C51. The system can be designed to provide a stable working voltage of power supply circuit. In order to improve the system of anti-jamming performance of temperature, humidity, using the hardware and software anti-interference synthesis method. Finally the design of the system software program each function. By this design task to make the temperature and humidity of the detection system structure is simple, cheap price, wide range, high reliability, safety and practicality. 一、温湿度测量的目的及要求 1、作品设计目的 在图书馆中,书籍的保护对温、湿度要求非常严格。对于面积不同的房间由于气流及图书分布的影响,图书的种类的影响,温湿度值可能会有较大的区别。所以应根据图书馆各个房间的实际面积在房间加装温湿度传感器,以实时客观检测房间的温、湿度。在监控本系统,温湿度一体化传感器将把检测到的温湿度值实时传送到监控主机中,并在监控界面上以图形形式直观地表现出来。管理员可实时了解房间各点的实际温湿度值,一旦房间实际温、湿度值越限,系统将自动弹出报警框并触发报警,提示管理员通过调节送风口的位置、数量,设定空调的运行温湿度值,尽可能让房间各点的温湿度趋向合理,确保房间设备的平安正常运行。 2、作品设计容及要求 1.设计一个温湿度侧量电路,要求: (1)用51单片机通过编程来控制温湿度的显示 (2)液晶要准确显示外界的温、湿度的大小 (3)具有超温、湿度测量报警装置 2.用中、小规模集成电路组成测量系统,并在实验仪器(可在面包板)上进展组装、调试。 3.画出各单元电路图、整机功能框图和逻辑电路图,写出设计和实验总结报告 二、设计所需元件清单 Ø 电源 Ø 液晶显示显示器 Ø 51单片机芯片1块。 Ø DHT11湿度传感器1个 Ø 排阻2排 电阻假设干 Ø 20pf电容假设干 Ø 蜂鸣器1个。 Ø 32768HZ时钟晶体1个 Ø 回弹开关1个 Ø 按钮开关2个 三、单片机实现温湿度测量 1、原理图容下所示:由控制器单片机51、复位电路、DHT11温湿度检测系统、报警电路及12864显示系统组成。 片机 2、湿度模块控制流程图: 3、显示模块流程图: 4、DHT11的温度报警子程序图: 5、万年历程序流程图: 五、设计总结 VC界面显示图 参考文献 [1] 侯建军. 电子技术根底实验、综合设计与课程设计.:高教 2007,10〔第一版〕 [2] 童诗白,华成英.模拟电子技术根底.:清华大学教研组编. [3] 阎石.数字电子技术根底。:清华大学教研组编. [4] 朝青.单片机原理及接口技术 :航空航天大学.2005,10.〔第三版〕 [5] 蔡方凯.单片机原理及基于单片机的嵌入式系统设计 中国水利水电2007. [6] 永枫.单片机应用实训教程.电子科技大学出版,2005. [7] 自美.电子线路设计、实验、测试.华中理工大学,2000. [8] 郭天祥.十天学会单片机。电子工业,2021. [9] .aosong./Html/DownView.asp?ID=15&SortID=4 附录一 /********************************/ //远程监测的工厂温湿度检测仪 /********************************/ #include<reg52.h> #define uchar unsigned char #define uint unsigned int /***端口定义***/ sbit LCD_RS=P3^5; //存放器选择输入 sbit LCD_RW=P3^6; //液晶读/写控制 sbit LCD_EN=P3^4; //液晶使能控制 sbit LCD_PSB=P3^7; //串/并方式控制 sbit s1=P2^0; //调时开/关 sbit s2=P2^1; //调时+ sbit s3=P2^2; //调时- sbit buzzer=P2^7; //蜂鸣器 sbit P2_6=P2^6; //P2.6口为通讯口连接DHT11 typedef unsigned char U8; typedef unsigned int U16; char sec,min,hour,week,day=1,month=1,year; uchar a,flag,flag2; uchar s1num; uchar code dis1[]={"2000年01月01日"}; uchar code dis2[]={"00时00分00秒"}; uchar code dis3[]={"温度::00 星期日"}; uchar code dis4[]={"湿度::00 上传.."}; uchar code dis5[]={0x20,0x20,0xce,0xc2,0xb1,0xa8,0xbe,0xaf}; //空温报警 uchar code dis6[]={0x20,0x20,0xca,0xaa,0xb1,0xa8,0xbe,0xaf}; //空湿报警 uchar code dis7[]={0xce,0xc2,0xca,0xaa,0xb1,0xa8,0xbe,0xaf}; //温湿报警 uchar code dis8[]={0x20,0x20,0xc9,0xcf,0xb4,0xab,0x2e,0x2e}; //空上传.. uchar code disx[]={0xc8,0xd5,0xd2,0xbb,0xb6,0xfe,0xc8,0xfd,0xcb,0xc4,0xce,0xe5,0xc1,0xf9};//"日","一","二","三","四","五","六"(两个字节为一个汉字) //----------------定义区--------------------// U8 U8FLAG,k; U8 U8count,U8temp; U8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata,U8T_data_H1,U8T_data_L1,U8RH_data_H1,U8RH_data_L1; U8 U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp; U8 U8data; U8 outdata[5]; //定义发送的字节数 U8 indata[5]; U8 count, count_r=0; U8 str[5]={"ZPF "}; U16 U16temp1,U16temp2; /***延时1ms子函数***/ void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } /***延时子函数***/ void Delay2(U16 j) { U8 i; for(;j>0;j--) for(i=0;i<27;i++); } /***延时10us子函数***/ void Delay_10us(void) { U8 i; i--; i--; i--; i--; i--; i--; } /***发送字符串子函数***/ SendData(U8 *a) { outdata[0] = a[0]; outdata[1] = a[1]; outdata[2] = a[2]; outdata[3] = a[3]; count = 1; SBUF=outdata[0]; } /***写指令子函数***/ /*RS=0,RW=0,E=0,D0-D7=指令码*/ void write_(uchar ) { LCD_RS=0; LCD_RW=0; LCD_EN=0; P0=; delay(5); LCD_EN=1; delay(5); LCD_EN=0; } /***写数据子函数***/ /*RS=1,RW=0,E=0,D0-D7=数据*/ void write_dat(uchar dat) { LCD_RS=1; LCD_RW=0; LCD_EN=0; P0=dat; delay(5); LCD_EN=1; delay(5); LCD_EN=0; } /***设定显示位置***/ void lcd_pos(uchar X,uchar Y) { uchar pos; if(X==0) X=0x80; else if(X==1) X=0x90; else if(X==2) X=0x88; else if(X==3) X=0x98; pos=X+Y; write_(pos); } /***LCD初始化设定***/ void init() { LCD_PSB=1; //并口方式 write_(0x30); //根本指令操作 delay(5); write_(0x0c); //显示开,关光标 delay(5); write_(0x01); //去除LCD的显示容 delay(5); TMOD=0x21; TH0=0x4c; TL0=0x00; ET0=1; EA=1; TR0=1; TH1 = 253; // 设置初值 TL1 = 253; TR1 = 1; // 开场计时 SCON = 0x50; //工作方式1,波特率9600bps,允许接收 ES = 1; EA = 1; // 翻开所以中断 TI = 0; RI = 0; SendData(str); //发送到串口 Delay2(1); } /***写年月日子函数***/ void write_ymd(uchar add,uchar dat) { uchar shi,ge; shi=dat/10; ge=dat%10; write_(0x80+add); write_dat(0x30+shi); write_dat(0x30+ge); } /***写时分秒子函数***/ void write_hms(uchar add,uchar dat) { uchar shi,ge; shi=dat/10; ge=dat%10; write_(0x90+add); write_dat(0x30+shi); write_dat(0x30+ge); } /*温度显示子函数*/ void write_tem(uchar add) { write_(0x88+add); write_dat(str[2]); write_dat(str[3]); } /*湿度显示子函数*/ void write_hum(uchar add) { write_(0x98+add); write_dat(str[0]); write_dat(str[1]); } void (void) { U8 i; for(i=0;i<8;i++) { U8FLAG=2; while((!P2_6)&&U8FLAG++); Delay_10us(); Delay_10us(); Delay_10us(); U8temp=0; if(P2_6)U8temp=1; U8FLAG=2; while((P2_6)&&U8FLAG++); //超时那么跳出for循环 if(U8FLAG==1)break; //判断数据位是0还是1 // 如果高电平高过预定0高电平值那么数据位为 1 U8data<<=1; U8data|=U8temp; } } /***温湿度读取子函数***/ void RH(void) { //主机拉低18ms P2_6=0; Delay2(180); P2_6=1; //总线由上拉电阻拉高 主机延时20us Delay_10us(); Delay_10us(); Delay_10us(); Delay_10us(); //主机设为输入 判断从机响应信号 P2_6=1; //判断从机是否有低电平响应信号 如不响应那么跳出,响应那么向下运行 if(!P2_6) //T ! { U8FLAG=2; //判断从机是否发出 80us 的低电平响应信号是否完毕 while((!P2_6)&&U8FLAG++); U8FLAG=2; //判断从机是否发出 80us 的高电平,如发出那么进入数据接收状态 while((P2_6)&&U8FLAG++); //数据接收状态 (); U8RH_data_H_temp=U8data; (); U8RH_data_L_temp=U8data; (); U8T_data_H_temp=U8data; (); U8T_data_L_temp=U8data; (); U8checkdata_temp=U8data; P2_6=1; //数据校验 U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp); if(U8temp==U8checkdata_temp) { U8RH_data_H1=U8RH_data_H_temp; U8RH_data_L1=U8RH_data_L_temp; U8T_data_H1=U8T_data_H_temp; U8T_data_L1=U8T_data_L_temp; U8checkdata=U8checkdata_temp; } U8RH_data_H=U8RH_data_H1/10; U8RH_data_L=U8RH_data_H1%10; U8T_data_H=U8T_data_H1/10; U8T_data_L=U8T_data_H1%10; } } /***键盘扫描子函数***/ void keyscan() { if(s1==0) { delay(5);//延时5ms去抖动! if(s1==0) { while(!s1); s1num++; if(s1num==1) { TR0=0; write_(0x80+1); write_(0x0f); } if(s1num==2) { write_(0x80+3); } if(s1num==3) { //TR0=0; 上一次已经停了。 write_(0x80+5); //write_(0x0f); } if(s1num==4) { //TR0=0; 上一次已经停了。 write_(0x90+0); //write_(0x0f); } if(s1num==5) { //TR0=0; 上一次已经停了。 write_(0x90+2); //write_(0x0f);上一次光标已闪烁 } if(s1num==6) { //TR0=0; 上一次已经停了。 write_(0x90+4); //write_(0x0f);上一次光标已闪烁 } if(s1num==7) { write_(0x88+7); } if(s1num==8) { s1num=0; TR0=1; write_(0x0c); } } } if(s1num!=0) { /***按键计数加***/ if(s2==0) { delay(5); if(s2==0) { while(!s2);//消抖,否那么就会一下加很多 /***调节修改显示的位置***/ if(s1num==1) { year++; if(year==99) year=0; //刷新年! write_ymd(1,year); write_(0x80+1); } if(s1num==2) { month++; if(month==13) month=1; //刷新月! write_ymd(3,month); write_(0x80+3); } if(s1num==3) { day++; if(day==32) day=1; //刷新日! write_ymd(5,day); write_(0x80+5); } if(s1num==4) { hour++; if(hour==24) hour=0; //刷新时! write_hms(0,hour); write_(0x90+0); } if(s1num==5) { min++; if(min==60) min=0; //刷新分! write_hms(2,min); write_(0x90+2); } if(s1num==6) { sec++; if(sec==60) sec=0; //刷新秒! write_hms(4,sec); write_(0x90+4); } if(s1num==7) { uchar i; week++; if(week==7) week=0; //刷新星期! i=2*week; while(i<2*week+2) { write_dat(disx[i]); i++; } write_(0x88+7); } } } /***按键计数减***/ if(s3==0) { delay(5); if(s3==0) { while(!s3);//消抖,否那么就会一下加很多 /***调节修改显示的位置***/ if(s1num==1) { year--; if(year==-1) year=99; write_ymd(1,year); write_(0x80+1); } if(s1num==2) { month--; if(month==0) month=12; write_ymd(3,month); write_(0x80+3); } if(s1num==3) { day--; if(day==0) day=31; write_ymd(5,day); write_(0x80+5); } if(s1num==4) { hour--; if(hour==-1) hour=23; write_hms(0,hour); write_(0x90+0); } if(s1num==5) { min--; if(min==-1) min=59; write_hms(2,min); write_(0x90+2); } if(s1num==6) { sec--; if(sec==-1) sec=59; write_hms(4,sec); write_(0x90+4); } if(s1num==7) { uchar i; week--; if(week==-1) week=6; i=2*week; while(i<2*week+2) { write_dat(disx[i]); i++; } write_(0x88+7); } } } } } /***蜂鸣器报时和流水灯全闪时间长短***/ void delay1(uint temp1) { uint i,j; for(i=0;i<temp1;i++) { for(j=28000;j>0;j--) { //display();延时应包含这两个子函数,否那么只显示一个数,即不扫描 keyscan(); } buzzer=~buzzer;//不是buzzer=0;而且两个循环才是一叫一停 P1=~P1;//八个流水灯全闪烁 } } void main() { uchar i; init(); /***从第一行第一个字符的位置开场显示***/ lcd_pos(0,0); i=0; while(dis1[i]!='\0') { write_dat(dis1[i]); i++; } /***从第二行第一个字符的位置开场显示***/ lcd_pos(1,0); i=0; while(dis2[i]!='\0') { write_dat(dis2[i]); i++; } /***从第三行第一个字符的位置开场显示***/ lcd_pos(2,0); i=0; while(dis3[i]!='\0') { write_dat(dis3[i]); i++; } /***从第四行第一个字符的位置开场显示***/ lcd_pos(3,0); i=0; while(dis4[i]!='\0') { write_dat(dis4[i]); i++; } while(1) { keyscan(); /***让蜂鸣器间隔报小时数***/ if(min==0&&sec==0) { delay1(2*hour); } if(hour==23&&min==59&&sec==59) { // if(hour==0) delay1(2*24);开机就会叫24下,故采用23 59 59 delay1(2*(hour+1)); } RH(); if(s1num==0&&flag2==1) { //串口显示程序 //-------------------------- str[0]=U8RH_data_H+0x30; str[1]=U8RH_data_L+0x30; str[2]=U8T_data_H+0x30; str[3]=U8T_data_L+0x30; str[4]=U8checkdata+0x30; SendData(str) ; //发送到串口 //读取模块数据周期不易小于 2S write_tem(3); write_hum(3); if(U8T_data_H>2) //温度>=30度,蜂鸣器间隔叫,一边的四灯亮 { P1=0x0f;buzzer=0;delay(200);P1=0xff;buzzer=1; } if(U8RH_data_H>8) //湿度>=90度,蜂鸣器间隔叫,一边的四灯亮 { P1=0xf0;buzzer=0;delay(200);P1=0xff;buzzer=1; } if(U8T_data_H>2||U8RH_data_H>8) { if(U8T_data_H>2&&U8RH_data_H<=8) //显示“空温报警〞 { write_(0x98+4); i=0; while(i<8) { write_dat(dis5[i]); i++; } write_(0x98+4); } if(U8RH_data_H>8&&U8T_data_H<=2) //显示“空湿报警〞 { write_(0x98+4); i=0; while(i<8) { write_dat(dis6[i]); i++; } write_(0x98+4); } if(U8RH_data_H>
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服