关闭

关闭

关闭

封号提示

内容

首页 基于单片机的温度湿度检测显示系统.doc

基于单片机的温度湿度检测显示系统.doc

基于单片机的温度湿度检测显示系统.doc

上传者: 我是刷子 2012-07-26 评分 0 0 0 0 0 0 暂无简介 简介 举报

简介:本文档为《基于单片机的温度湿度检测显示系统doc》,可适用于人文社科领域,主题内容包含《智能仪器仪表设计基础》课程设计报告单位:自动化学院学生姓名:郭晓甜专业:测控技术与仪器班级:学号:指导老师:李锐成绩:设计时间:年月重庆邮电大学自符等。

《智能仪器仪表设计基础》课程设计报告单位:自动化学院学生姓名:郭晓甜专业:测控技术与仪器班级:学号:指导老师:李锐成绩:设计时间:年月重庆邮电大学自动化学院制题目要求一、题目:温湿度智能仪表设计二、给定任务及条件针对某特定场合(如家禽饲养场、产品存储仓)在常压下对温度和湿度的要求选用合适的测试方法设计温湿度一体化智能仪表要求具有显示和报警功能且温度检测精度为湿度检测精度为rh。三、具体要求.确定总体方案()理解在某特定场合(如家禽饲养场、产品存储仓)下在常压对温度和度的同时测量的基本原理和方法分析建立该智能仪表设计需要的参数范围。()根据温度和湿度锅炉温度检测要求设计一种开环智能测量仪表并给出设计总体方案。.温湿度仪表详细设计基于前面的总体方案选择合适的传感器、信号处理电路、执行器进行详细设计。基于MATLAB的温湿度智能仪表设计实现(可选)用MATLAB的SIMULINK工具或M语言编程实现温湿度智能仪表。四、具体设计过程设计结果验证与分析()对该测控系统的基本输入输出系统、测试系统、显示系统等环节能进行简单的设计和系统集成。()说明所设计的温湿度一体化智能仪表工作原理和工作过程。()利用MATLAB仿真平台实现温湿度智能仪表设计(可选)。()对设计结果进行必要的分析。()按时完成设计报告。摘要本系统式基于STCC单片机为核心集传感器、数据采集、处理、电机驱动、报警于一体的温度湿度控制系统非常适合与仓库的温度湿度监控。DSB数字温度传感器灵敏度高精度高硬件电路非常简单可以直接与单片机相连。HS湿度传感器测量范围大灵敏度高。HSHS电容传感器在电路构成中等效为一个电容器件其电容量随着所测空气的湿度的增大而增大。加上一个定时器可以产生频率随湿度变化的方波通过单片机的计数器可以实现频率的测量进而可以计算出湿度值。单片机将采集的温度与湿度值用数码管显示并控制电机与蜂鸣器实现报警于模拟排风。当温度过高或是湿度过高就启动电机排风蜂鸣器报警。本系统成本低廉性能可靠精度较高工作稳定比较好的完成了题目的各项要求。关键词:单片机DSB,HS,定时器数码管电机参考文献郭天祥《单片机C语言教程》北京:电子工业出版社谭浩强等,《C程序设计》(第二版)北京:清华大学出版社胡向东《传感技术》重庆大学出版社张国雄《测控电路第三版》北京机械工业出版社钟富昭《单片机典型模块设计与应用》北京:人民邮电出版社引言防潮、防霉、防腐、防爆是仓库日常工作的重要内容。是衡量仓库管理质量的重要指标。它直接影响到存储物资的使用寿命和工作可靠性。为保证日常工作的顺利进行首要问题是加强仓库内温度与湿度的监测工作。但传统的方法是用湿度表、毛发湿度表、双金属式测量计和温度试纸等工具通过人工进行监测对不符合温度与湿度的要求的库房进行通风、去湿、降温。这种方法费力效率低且误差大、随机性大。因此我们需要一种造价低廉、使用方便且测量准确的为温湿度测量仪。本系统尝试使用一种基于单片机的价格低廉但功能齐全性能可靠的温湿度控制器。实现温湿度实时监测显示超过阈值可以自动报警处理控制仓库的温湿度达到自动控制的目的。工作原理、对象分析本系统主要是测量一般存储货物如药品等的仓库的温湿度。这要求系统具有稳定性、可靠性以及实时性。湿度过高可能会影响出口货物的质量造成货物质量变坏从而造成经济损失。仓库一般要尽量干燥。而温度过高可能会引发火灾等灾害。根据对象我们设计出一个实现小型化低成本高性能的检测报警处理一体化装置。本系统需要解决的问题是如何检测出温度与湿度并把检测的温度与湿度变化为单片机能够识别的信号进行处理转换显示以及报警等。、解决方案图是系统的总体框图。温度传感器选用DALASS公司的数字温度传感器DSB。可以与单片机直接相连。湿度传感器选用HS电容式湿度传感器湿度的变化可以转化为频率的变化湿度越高频率越小外加一个定时器便可以将电容的变化转变为频率的变化产生一定频率的方波直接与单片机的定时器相连便可以测出方波的频率进而便可以得到湿度值。用HC锁存器控制数码管显示出相应的温度湿度值。控制策略采用设定报警阀值当温湿度超过一定的范围的时候发光二极管亮蜂鸣器响电机转动模拟排风。由于单片机IO口驱动能力有限无法驱动电机转动故采用了一个达林顿管来提高单片机的驱动能力。在进行多点测量地时候可以加一个多路选择开关选择哪一个传感器的值进入单片机。由于DSB采用单总线方式在进行多点测量的时候将非常易于扩展不需要添加任何器件将所有传感器直接与单片机IO口连接即可。图系统总体框图、硬件设计、传感器电路图为DSB与单片机的连接电路。图DSB电路图为HS的外围电路以及与单片机的连接图。通过这个电路可以直接输出与湿度相关的频率并直接与单片机的定时器相连。实现频率的测量。图HS外围电路单片机最小系统如图所示STCC单片机最小系统由复位电路、晶振电路、电源构成。这些电路是单片机正常工作的必要条件。本设计中使用的是MHz的晶振频率。图单片机最小系统显示电路本系统采用HC锁存器控制个数码管显示温度与湿度值。图显示电路电机驱动电路图电机驱动电路报警电路单片机IO口驱动不了蜂鸣器故加一个三极管提高驱动能力。图蜂鸣器电路、软件设计软件总体模块本设计单片机需要处理的信息有:温度采集、湿度采集、数码管显示、控制策略。所以程序就包括:温度采集子程序、湿度采集子程序、显示子程序、控制策略等。图程序模块组成图主程序流程图当温度超过摄氏度或者是湿度大于的时候电机转动蜂鸣器响报警。当温度低于摄氏度并且湿度小于的时候加热灯亮。图主程序流图、测试实验根据原理图焊接电路板焊接电路板的时候要非常小心一旦有一个地方出现短路或是断路后面排错的时候将非常麻烦而且出现的结果往往是非常离奇。所以在开始的时候就要严格按照电路图来焊接。下图是系统原理图。图系统原理图根据图系统原理图仔细焊接电路板。焊接时注意不要让电源线短路。焊接好后先用万用表检查电路是否有虚焊短路等不良问题。确认没有问题后给系统再上电测试。下载程序进行软硬件联调根据图焊好电路板后再确认无误后下载程序进行软硬件联调。显示正常的情况下可以哈气或是用手触摸温度传感器看数码管的值是否变化电机是否转动蜂鸣器是否响。如果有问题则认真排查看是硬件还是软件出了问题。下图是系统实物图。图系统实物图下图是系统运行时的两个状态图。图显示的是温度为摄氏度湿度为时的状态。图显示的是当用手握住温度传感器的时候温度上升到摄氏度当对着湿度传感器哈气的时候湿度值发生变化上升到了。这些现象都可以说明本系统已经能够很好的开始工作了。图显示状态一图显示状态二、设计总结(心得体会)这是第二次进行课程设计有了上次的经验明白在课程设计中分工合作非常重要这样才不会浪费时间也能在合作中展示个人能力。由于我个人比较对软件感兴趣因此在初次讨论分组的时候选择了负责软件部分程序的编写。我们都知道在编写程序之前最重要的画程序流程图。流程图反应了程序的思想结构步骤。而画流程图必须要了解硬件设计者的想法以及设计方案。因此在开始的时后我主要是与负责硬件部分的同学沟通了解和分析他们的设计思路以及实现的功能。这时初步的流程图即可绘制出来。接下来就是构思详细的流程图。由于我们使用的系列单片机是学习中经常使用的芯片比较熟悉。因此结合设计好的Protel图将使用到的引脚摘出来结果了解分析清楚了本次编写程序时主要用到的单片机的IO口定时器计数器等功能。此时主程序的流程图就很容易绘制出来了。本次课程设计使用了种传感器DSB、HS。由于这两种传感器都可以通过电路直接输给单片机数字信号不用使用AD这就使得程序简单一些了。DSB内置ROM区在工作之前要求单片机写数据而且时序要求严格才能读出数据。第一次接触这个传感器认真学习搜集来的资料结合本次设计的需要在已有的程序基础进行修改。HS主要是应用外部计数方式进行湿度的转换。子程序的流程图写好后就可以着手编写程序了。根据以前的编程经验写的时候最好是模块化。其次还要注意加注释这样其他同学在看的时候就以明白每部分实现的功能是什么。程序写好后与负责硬件的同学一起调试。我们分别先测试每个传感器的显示在调试的过程中却出现很多问题比如尽管编译是程序没有错误但下载到单片机后却没有达到预期效果开始排错确定硬件正常后就仔细检查程序。原来是在写程序的时候粗心多写了分号使得程序移植在循环处执行。通过这次课程设计我学到了很多。虽然没有参与硬件方面没有动手焊接和画电路图但是却提高了在编程方面的能力增强经验。也让我明白即使程序写的没错误但是在实际应用中还是会出现各种问题这次的课程设计让我加强了我在调试时的排错能力。总之只有把理论与实际操作结合才能做好事情。参考文献郭天祥《单片机C语言教程》北京:电子工业出版社谭浩强等,《C程序设计》(第二版)北京:清华大学出版社胡向东《传感技术》重庆大学出版社张国雄《测控电路第三版》北京机械工业出版社钟富昭《单片机典型模块设计与应用》北京:人民邮电出版社附录附录A主程序mianc#include"dsbh"#include"hsh"sbitled=P^sbitdianji=P^voidmain(){uintTEMP,RH,ibeep=led=while(){beep=tempchange()TEMP=gettemp()真实值*distemp(TEMP)数码管显示温度值RH=ShiDu()disshidu(RH)if((TEMP>)||(RH>)){led=dianji=delay()dianji=delay()beep=delay()beep=delay()}if((TEMP<)||(RH<)){led=beep=delay()beep=}}}附录B***************DSB温度显示控制*******************#include<regh>#include<stdioh>#defineucharunsignedchar#defineuintunsignedintsbitds=P^dsb接口sbitdula=P^数码管段选线sbitwela=P^数码管位选线sbitbeep=P^蜂鸣器接口uinttemp定义整型温度数据floatftemp定义浮点型的温度数据uchartable={xf,x,xb,xf,x,xd,xd,x,xf,xf,*不带小数点*xbf,x,xdb,xcf,xe,xed,xfd,x,xff,xef}voiddelay(uintz){uintx,yfor(x=zx>x)for(y=y>y)延时z毫秒}voiddsreset(void)DSB复位初始化{uintids=i=while(i>)ids=i=while(i>)i}bittempreadbit(void)读一位数据{uintibitdatds=ids=iidat=dsi=while(i>)ireturn(dat)}uchartempread(void)读一个字节{uchari,j,datdat=for(i=i<=i){j=tempreadbit()dat=(j<<)|(dat>>)读出的数据最低为在前面刚好在一个字节dat里面}return(dat)}voidtempwritebyte(uchardat)向DSB写一个数据{uintiucharjbittestbfor(j=j<=j){testb=datxdat=dat>>if(testb)写{ds=iids=i=while(i>)i}else{写ds=i=while(i>)ids=ii}}}voidtempchange(void)DSB开始获取温度并转换{dsreset()delay()tempwritebyte(xcc)tempwritebyte(x)}uintgettemp()读取寄存器中存储的温度数据{uchara,bdsreset()delay()tempwritebyte(xcc)tempwritebyte(xbe)a=tempread()读低位b=tempread()读高位temp=btemp<<=两个字节组合为一个字temp=temp|aftemp=temp*temp=ftemp*ftemp=ftempreturntemp}voiddisplaytemp(ucharnum,uchardat){ucharidula=P=tabledatdula=dula=wela=i=xffi=i(~((x)<<(num)))P=iwela=wela=delay()}voiddistemp(uintt){ucharii=tdisplaytemp(,i)i=tdisplaytemp(,i)i=tdisplaytemp(,i)}附录C***************************湿度程序******************************#include"regh"#defineucharunsignedchar#defineuintunsignedintsbitSD=P^uchartemuchartemuchartempuchartempuintflag,f标志位*****************************************************************************名称:timer()*功能:定时器每us中断一次。*入口参数:****************************************************************************voidtimer()interrupt{EA=TR=TR=TL=x重装值定时usOXBFFHTH=xctem=TL读数tem=THTL=x定时器清零TH=xflag=作标注位}*****************************************************************************名称:timer()*功能:计数器用于计数将输出的频率以计数相对湿度。*入口参数:****************************************************************************voidtimer()interruptT中断表示计数的频率溢出超出了可测量的频率范围显然在这里不可能。所以重新启动。{EA=TR=TR=TL=x重装值定时usTH=xDCTL=x定时器清零TH=xTR=TR=EA=}voidInittimer()初始化定时器{TMOD=x定时器在模式下工作位定时器,定时方式定时器在模式下工作位计数器T负跳变加TL=x定时器初值定时usTH=xDCTL=x定时器清零TH=xET=使能定时器中断ET=使能定时器中断EA=使能总中断TR=开始计时TR=}voidtran()讲频率值转换为对应的RH{f=temf=(f<<)|temf=f*if((<=f)(f<=))相对湿度在有效范围内(%--){if((<f)(f<=)){temp=temp=(f)*}if((<f)(f<=)){temp=temp=(f)*}if((<f)(f<=)){temp=temp=(f)*}if((<f)(f<=)){temp=temp=(f)*}if((<f)(f<=)){temp=temp=(f)*}if((<f)(f<=)){temp=temp=(f)*}if((<f)(f<=)){temp=temp=(f)*}if((<f)(f<=)){temp=temp=(f)*}if((<f)(f<=)){temp=temp=(f)*}if((<f)(f<=)){temp=temp=(f)*}}else{temp=temp=}}ucharShiDu(void)返回一个湿度值{ucharcountf=Inittimer()count=while(flag==){}tran()count=temp*tempreturncount}voiddisplayshidu(ucharnum,uchardat){ucharidula=P=tabledatdula=dula=wela=i=xffi=i(~((x)<<(num)))P=iwela=wela=delay()}voiddisshidu(uintt){ucharii=tdisplayshidu(,i)delay()i=tdisplayshidu(,i)delay()i=tdisplayshidu(,i)}主程序(控制策略)温度采集子程序湿度采集子程序显示子程序退出LED亮(升温)蜂鸣器报警温度、湿度值是否超过下限值?开始电机转动(降温)蜂鸣器报警温度、湿度值是否超过上限值?调用hs程序获取湿度值用数码管显示。调用dsb程序获取温度值用数码管显示。Dsb初始化DSB开发板定时器电机湿度传感器湿度值温度值

用户评论(0)

0/200

精彩专题

上传我的资料

每篇奖励 +2积分

资料评价:

/18
0下载券 下载 加入VIP, 送下载券

意见
反馈

立即扫码关注

爱问共享资料微信公众号

返回
顶部