温湿度检测控制系统_第1页
温湿度检测控制系统_第2页
温湿度检测控制系统_第3页
温湿度检测控制系统_第4页
温湿度检测控制系统_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1前言温度和湿度的检测和控制是许多行业的重要工作之一,不管是货品仓库、生产车间,都需要有规定的温度和湿度,然而温度和湿度却是最不易保障的指标,针对这一情况,研制可靠且实用的温度和湿度检测与控制系统就显得非常重要。温湿度的检测与控制是工业生产过程中比较典型的应用之一,随着传感器在生产和生活中的更加广泛的应用。在生产中,温湿度的高低对产品的质量影响很大。由于温湿度的检测控制不妥,也许使我们导致无法估计的经济损失。为保证平常工作的顺利进行,首要问题是加强生产车间内温度与湿度的监测工作,但传统的方法过于粗糙,通过人工进行检测,对不符合温度和湿度规定的库房进行通风、去湿和降温等工作。这种人工测试方法费时费力、效率低,且测试的温度及湿度误差大,随机性大。目前,在低温条件下(通常指100℃以下),温湿度的测量已经相对成熟。运用新型单总线式数字温度传感器实现对温度的测试与控制得到更快的开发。但人们对它的规定越来越高,要为现代人工作、科研、学习、生活提供更好的更方便的设施就需要从数字单片机技术入手,一切向着数字化,智能化控制方向发展对于国内外对温湿度检测的研究,从复杂模拟量检测到现在的数字智能化检测越发的成熟,随着科技的进步,现在的对于温湿度研究,检测系统向着智能化、小型化、低功耗的方向发展。在发展过程中,以单片机为核心的温湿度控制系统发展为体积小、操作简朴、量程宽、性能稳定、测量精度高,等诸多优点在生产生活的各个方面实现着至关重要的作用。温湿度传感器除电阻式、电容式湿敏元件之外,尚有电解质离子型湿敏元件、重量型湿敏元件(运用感湿膜重量的变化来改变振荡频率)、光强型湿敏元件、声表面波湿敏元件等。湿敏元件的线性度及抗污染性差,在检测环境湿度时,湿敏元件要长期暴露在待测环境中,很容易被污染而影响其测量精度及长期稳定性。2023年Sensiron公司在世界上率先研制成功SHT10型智能化温度/温度传感器,体积与火柴头相近。它们不仅能准确测量相对温度,还能测量温度和露点。测量相对温度的范围是0~100%,分辨力达0.03%RH,最高精度为±2%RH。测量温度的范围是-40℃~+123.8℃,分辨力为0.01℃。测量露点的精度<±1现在虽然单片机的品种繁多,各具特色,但仍以MCS-51为核心的单片机占主流,兼容其结构和指令系统的有PHILIPS公司的产品,ATMEL公司的产品和中国台湾的WinBond系列单片机。STC89C52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有机灵的8位CPU和在系统可编程Flash,使STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。本设计以此为出发点,以温湿度控制为核心思想,根据自己所学的专业知识,用新型的智能集成温温度传感器SHT10重要实现对温度、湿度的检测,将温度湿度信号通过传感器进行信号的采集并转换成数字信号,再运用单片机STC89C52进行数据的分析和解决,为显示和报警电路提供信号,实现对温湿度的控制报警。根据工作环境规定设定系统的温湿度阈值,运用LCD实时地测量显示环境的温湿度值,实现温湿度自动控制,使其在较宽的温度范围内具有较高的测试精度,同时还可以根据预设定报警阈值报警,一旦发现环境温湿度超限,立即报警。为此我设计了操作简朴、测量精度高、工作稳定的基于单片机的温湿度检测与控制系统。

2设计内容及方案2.1设计内容用新型的智能集成温温度传感器DHT11重要实现检测温度、湿度的检测,将温度湿度信号通过传感器进行信号的采集并转换成数字信号,再运用单片机STC89C52进行数据的分析和解决,为显示和报警电路提供信号。设定模块重要为设定温湿度报警的阈值。如图2-1所示。温湿度采集模块温湿度采集模块报警模块LCD显示模块电源模块单片机控制模块图2-1设计模块图规定如下:1、用单片机通过编程来实现温湿度的显示与控制;2、通过LCD来显示温湿度的数值;3、可以实现超阈值的报警;4、检测范围与精度:温度检测范围:-30℃~+100℃测量精度:1湿度检测范围:0~100%RH检测精度:4.5%RH2.2温湿度传感器方案选择方案一:湿度检测采用湿敏元件,其重要分为电阻式和电容式。湿敏电阻的种类多,灵敏度高,但是起线性度和产品的互换性差。湿敏电容灵敏度高,产品互换性搞,响应速度快,偏于实现产品小型化和集成化,是精度一般比湿敏电阻要低一些。综合湿敏元件,其线性度可抗污染性差,在湿度的检测环境中湿敏元件需要时刻在检测环境中,很容易受到环境污染从而影响其测量精度和连续的稳定性。温度检测采用最基本的热电偶和热敏电阻。热电偶应用广泛,价格便宜并且耐用。种类多,可以覆盖非常宽的温度范围,最高温度可以到达2023℃。但是其非线性、响应速度慢、精度中档、灵敏度低、稳定性低、高温下容易老化和有线性漂移,并且测量需要参考量。热敏电阻,该传感器重要随温度的变化阻值发生变化,重要用于-200到500方案二:温湿度检测采用集成模拟传感器,其灵敏度高、线性度好、响应速度快,并且它可以和信号解决电路及逻辑控制电路集成在一起,使用方便。湿度传感器选用HS1101,温度传感器选择AD590。这两个传感器,在接入电路中,都需要A/D转换器,把模拟信号转换成数字信号从而是单片机存储采集到的数据。方案三:采用数字式传感器,起初选择DS18B20和SHT10作为温度和湿度测量元件,但是SHT10包含相对湿度传感器、温度传感器,所以把SHT10作为温湿度检测的一个整体。SHT10作为典型的温湿度传感器,在测量过程中可对相对温湿度进行自动校准,准确的测量温湿度。产品互换性好,相应速度快,抗干扰性强,不需要外部参考源和外部器件。综上所述,SHT10与温湿敏元件的温湿度测量以及模拟测量的元器件相比,起数字温湿度传感器低成本,内部集成复杂,测量准确,并且可以提供数字输出,简化外部测量电路,精度高,合用广泛的测量范围,并且本设计的温湿度检测系统相适合。因此,选择温度湿度传感器SHT10作为本次设计中的测量元件。2.2显示器方案选择方案一:数码管显示,数码管按段数分为七段数码管和八段数码管,起驱动方式分别为静态驱动和动态驱动,静态驱动编程简朴,显示亮度高但是占用I/O端口多,在十几应用时必须增长译码器驱动进行驱动,增长了硬件电路的复杂性。动态电路是最广泛的显示方式之一,其可以节省大量的I/O端口,并且功耗低。针对数码管,其显示单调不具有数据的直观性。方案二:LCD1602液晶显示,具有字符发生器ROM可显示192种字符(160个5´7点阵字符和32个5´10点阵字符)具有64个字节的自定义字符RAM,可自定义8个5´8点阵字符或四个5´11点阵字符。具有80个字节的RAM,标准的接口特性,适配M6800系列MPU的操作时序。模块结构紧凑、轻巧、装配容易,像素尺寸小,分辨率高。综上,选择LCD1602可以把温湿度很直观的显示出来,可以在设定阈值时更能简洁明了,所以选择LCD1602为显示元件。

3系统的硬件选择及设计原理3.1温湿度传感器SHT10温湿度传感器SHT10由Sensirion公司生产,其产品具有无可比你的优越性能。SHT10单芯片传感器内具有已校准数字信号输出的复合传感器,它应用专利的COMS过程微加工技术保证了产品具有极高的可靠性与卓越的长期稳定性。体积与火柴头相近。它们不仅能准确测量相对温度,还能测量露点参数。广泛应用在数据采集器、变送器、自动化过程控制、汽车行业、楼宇控制、暖通空调、电力机房、计量测试、医药业。实体图如图3-1所示。图3-1SHT10传感器实体与接口图接口定义如表3-1所示:引脚名称描述1GND接地2DATA串行数据,双向3SCK串行时钟,输入口4VDD电源NCNC必须为空表3-1接口定义SHT10的供电电压范围为2.4~5.5V,建议供电电压为3.3V。在电源引脚(VDD,GND)之间须加一个100nF的电容,用以去耦滤波。SHT10的串行接口,在传感器信号的读取及电源损耗方面,都做了优化解决。传感器不能按照I2C协议编址,但是,假如I2C总线上没有挂接别的元件,传感器可以连接到I2C总线上,但单片机必须按照传感器的协议工作。SCK用于微解决器与SHT10之间的通讯同步。由于接口包含了完全静态逻辑,因而不存在最小SCK频率。DATA引脚为三态结构,用于读取传感器数据。当向传感器发送命令时,DATA在SCK上升沿有效且在SCK高电平时必须保持稳定。DATA在SCK下降沿之后改变。为保证通讯安全,DATA的有效时间在SCK上升沿之前和下降沿之后应当分别延长至TSUandTHO当从传感器读取数据时,DATATV在SCK变低以后有效,且维持到下一个SCK的下降沿。为避免信号冲突,微解决器应驱动DATA在低电平。需要一个外部的上拉电阻(例如:10kΩ)将信号提拉至高电平。上拉电阻通常已包含在微解决器的3.2电路热性电气特性,如能耗,高、低电平,输入、输出电压等,都取决于电源。表3-2具体解释了SHT10的电气特性,若没有标明,则表达供电电压为5V。若想与传感器获得最佳通讯效果。参数条件最小典型最大单位供电电源DC102.43.35.5V供电电流测量状态0.551mA平均值11228μA休眠状态0.31.5μA低电平输出电压IOL<4mA0250mV高电平输出电压RP<25kΩ90%100%VDD低电平输入电压下降0%20%VDD高电平输入电压上升80%100%VDD焊盘上的输入电流1μA输出电流开4mA三态(关)1020μA表3-2SHT10直流特性,RP表达上拉电阻,IOL指低电平输出电流VDD对GND的绝对最大值为+7V和-0.3V。假如传感器工作在绝对最大值条件下时间过长,会影响传感器的稳定性(如:热载流效应,氧化)。加重的DATA线由传感器控制,普通的DATA线由单片机控制。有效时间依据SCK的时序。数据读取的有效时间为前一个切换的下降沿。如图3-2所示。图3-2SHT10时序图传感器特点:相对湿度和温度一体测量精确露点测量全量程标定,无需重新标定即可互换使用两线制数字接口(最简朴的系统集成,较低的价格)高可靠性(工业CMOS工艺)优化的长期稳定性基于请求式检测,因此低能耗具有湿度传感器元件的自检测能力传感器元件加热应用,亦可获得极高的精度和稳定性全量程标定技术参数:湿度测量范围:0~100%RH湿度测量精度:±4.5%RH(20到80%RH)湿度测量复现性:±0.1%RH湿度测量分辨率:0.03%RH温度测量范围:-40~+123.8℃温度测量精度:±0.5℃在25℃时;±0.9℃温度响应时间:≤20秒温度测量反复性:±0.1温度测量分辨率:0.01其温湿度特性曲线如图3-3所示。图3-3温湿度特性曲线3.3单片机选择本系统控制电路的核心器件采用的是美国ATMEL生产的STC89C52单片机属于MCS-51系列。STC89C52实物如图3-4所示。图3-4单片机STC89C52实物图重要性能:与MCS-51单片机产品兼容8K字节在系统可编程Flash存储器1000次擦写周期全静态操作:0Hz~33Hz三级加密程序存储器32个可编程I/O口线三个16位定期器/计数器八个中断源全双工UART串行通道低功耗空闲和掉电模式掉电后中断可唤醒看门狗定期器双数据指针掉电标记符3.4单片机介绍STC89C52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有机灵的8位CPU和在系统可编程Flash,使STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。STC89C52具有以下标准功能:8k字节Flash,256字节RAM,32位I/O口线,看门狗定期器,2个数据指针,三个16位定期器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。此外,STC89C52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定期器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。本设计电路中STC89C52单片机的电路图如图3-5所示。图3-5STC89C52框图脚口介绍:8位微控制器8K字节在系统可编程FlashSTC89C52。P0口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。对P0端口写“1”时,引脚用作高阻抗输入。当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下,P0不具有内部上拉电阻。在flash编程时,P0口也用来接受指令字节;在程序校验时,输出指令字节。程序校验时,需要外部上拉电阻。P1口:P1口是一个具有内部上拉电阻8位双向I/O口,p1输出缓冲器能驱动4个TTL逻辑电平。P1端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的因素,将输出电流(IIL)。此外,P1.0和P1.1分别作定期器/计数器2的外部计数输入(P1.0/T2)和定期器/计数器2的触发输入(P1.1/T2EX)。在flash编程和校验时,P1口接受低8位地址字节。引脚号第二功能:P1.0T2(定期器/计数器T2的外部计数输入),时钟输出。P1.1T2EX(定期器/计数器T2的捕获/重载触发信号和方向控制)。P1.5MOSI(在系统编程用)。P1.6MISO(在系统编程用)。P1.7SCK(在系统编程用)。P2口:P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。对P2端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的因素,将输出电流(IIL)。在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX@DPTR)时,P2口送出高八位地址。在这种应用中,P2口使用很强的内部上拉发送1。在使用8位地址(如MOVX@RI)访问外部数据存储器时,P2口输出P2锁存器的内容。在flash编程和校验时,P2口也接受高8位地址字节和一些控制信号。P3口:P3口是一个具有内部上拉电阻的8位双向I/O口,p3输出缓冲器能驱动4个TTL逻辑电平。对P3端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的因素,即P3口输出电流(IIL)。P3口亦作为STC89C52特殊功能(第二功能)使用,如下表3-3所示。在flash编程和校验时,P3口也接受一些控制信号。

端口引脚第二功能P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2INTO(外中断0)P3.3INT1(外中断1)P3.4TO(定期/计数器0)P3.5T1(定期/计数器1)P3.6WR(外部数据存储器写选通)P3.7RD(外部数据存储器读选通)表3-3P3口引脚与第二功能此外,P3口还接受一些用于FLASH闪存编程和程序校验的控制信号。RST——复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将是单片机复位。ALE/PROG——当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定期目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。对FLASH存储器编程期间,该引脚还用于输入编程脉冲(PROG)。如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可严禁ALE操作。该位置位后,只有一条MOVX和MOVC指令才干将ALE激活。此外,该引脚会被薄弱拉高,单片机执行外部程序时,应设立ALE严禁位无效。PSEN——程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89S52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次PSEN信号。EA/VPP——外部访问允许,欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。需注意的是:假如加密位LB1被编程,复位时内部会锁存EA端状态。如EA端为高电平(接Vcc端),CPU则执行内部程序存储器的指令。FLASH存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是器件是使用12V编程电压Vpp。3.5复位电路RST引脚是单片机复位端,高电频有效。在引脚端输入至少连续两个单片机周期的高电频,单片机复位。使用时,在引脚与VSS引脚之间接一个10KΩ的下拉电阻,与VCC引脚之间接一个约10μF的电解电容,即可保证上电自动复位。本设计中复位电路如图3-6所示。图3-6复位电路3.6晶振电路在单片机电路中晶振的作用非常大,结合单片机内部的电路,产生单片机所必需的时钟频率,单片机的一切指令的执行都是建立在晶振的基础上。晶振运用一种特殊的晶体,在电能和机械能之间互相转化产生共振,提供稳定精确的单频震荡,为系统提供基本的时钟信号。晶振元器件实物图如图3-7所示。

图3-7晶振实物图C1、C2为负载电容,X1为晶振,12MHz。设计中晶振电路如图3-8所示。图3-8晶振电路3.7显示电路本设计显示部分采用字符型TC1602液晶显示所测温湿度值并且显示控制界面。TC1602实物图如图3-9所示。LCD1602显示器重要特点:液晶显示屏是以若干个5´8或5´11点阵块组成的显示字符群。每个点阵块为一个字符位,字符间距和行距都为一个点的宽度。主控制驱动电路为HD44780(HITACHI)及其他公司全兼容电路,如SED1278(SEIKOEPSON)、KS0066(SAMSUNG)、NJU6408(NERJAPANRADIO)。具有字符发生器ROM可显示192种字符(160个5´7点阵字符和32个5´10点阵字符)具有64个字节的自定义字符RAM,可自定义8个5´8点阵字符或四个5´11点阵字符。具有80个字节的RAM,标准的接口特性,适配M6800系列MPU的操作时序。模块结构紧凑、轻巧、装配容易,像素尺寸小,分辨率高。颜色分单色(黑白)、彩色两种。为便于夜间观测,可采用由LED或ELD器件构成的背景光源。液晶显示器属于被动发光型显示器件,它自身不发光,只能反射或透射外界光线,因此环境亮度越高,显示越清楚。其亮暗对比度可达100:1。单+5V电源供电,采用交流驱动方式。图3-9TC1602实物图使用时,可将P0与LCD的数据线相连,P2口与LCD的控制线相连,其中,TC1602第4脚RS为寄存器选择,第5脚RW为读写信号线,第6脚E为使能端。第7~14脚:D0~D7为8位双向数据线。这里要注意的是,为了布线方便,单片机端的D0~D7是接到LCD/602的D1~D0,正好相反,因此在编写软件时需要做解决,使读取对的。LCD显示电路如图3-10所示。图3-10显示电路3.8报警电路本设计采用的是声光报警,设定报警的上下限值实现报警功能,使用单片机的中断系统。根据单片机接受到的数据通过解决后与该参数设定的上下限进行比较,高于上限值(或低于下限值)则进行报警,同时能进行正常的显示。报警电路中,以指示灯和蜂鸣器构成,在输入温湿度的上下限后,系统会进行实时采样,并判断测试温湿度与输入温湿度之间的差异,当检测出的温湿度在设定的温湿度上下限外就会报警,即指示灯亮,同时蜂鸣器响,电机转动。报警电路如图3-11所示。图3-11报警电路

4软件设计整个系统的功能是由硬件电路配合软件程序来实现的,当硬件基本定型的时候软件也基本定下拉了,从软件的功能不同,可以分为两的类:一是主程序,它是整个软件的核心,专门用来协调各个执行模块和操作者的联系。二是子程序,它是用来完毕各种实质性的工作的,如测量、计算、显示、通讯等。每一个执行软件就是一个小的执行模块,这里将每一个模块一一列出来,并为每个执行模块进行功能定义和接口定义。各执行模块规划好以后,就可以规划监控软件了。一方面要根据系统的总体功能选择一种最合适的主程序结构,然后根据实时性的条件,合理安排监控软件和执行软件之间的调度关系。4.1主程序模块主程序重要完毕硬件初始化,子程序调用等功能。在主程序中,对温湿度传感器,LCD1602液晶显示器的初始化,同时调用传感器数据,进行显示,之后进行阈值判断并启动报警装置。主程序模块框图如图4-1所示。开始开始1602与SHT10初始化温湿度采集子程序温湿度解决子程序读取成功温湿度数据是否超限声光报警显示温湿度是图4-1主程序模块4.2SHT10初始化流程该流程重要对传感器的初始化进行设计,流程图如图4-2所示。SHT10初始化SHT10初始化DQ置1D0清零,发复位脉冲延时600usDQ置1等待50us读入DQ的状态等待200usDQ置1初始化结束图4-2SHT10初始化流程图4.3LCD初始模块LCD上电时,都必须按照一定的时序对LCD进行初始化操作,重要任务是设立LCD的工作方式,显示状态,清屏,输入方式,光标位置等。LCD初始化如图4-3所示。

开始开始功能设立命令调用写入指令到LCD子程序设定工作方式调用写入指令到LCD子程清屏设立显示状态调用写入指令到LCD子程设立输入方式调用写入指令到LCD子程子程序返回图4-3LCD1602初始化流程图

5系统调试5.1Proteus软件调试软件调试重要使用Proteus软件和Keil4软件。在软件调试中,一方面在Proteus中绘制电路图,并设立各元器件的参数。然后在Keil4软件编写程序,并编译后输入Proteus中进行仿真。Proteus软件是英国Labcenterelectronics公司出版的EDA工具软件。Proteus软件除了其具有和其它EDA工具软件的同样的原理布图,还可以电路仿真。不止是对单片机的仿真还对其外围器件进行仿真。其特点是:实现了单片机仿真和SPICE电路仿真相结合。具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。支持主流单片机系统的仿真。如68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。提供软件调试功能。在硬件仿真系统中具有全速、单步、设立断点等调试功能,同时可以观测各个变量、寄存器等的当前状态,因此在改软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如Keil4uVision4等软件。支持大量的外围芯片和存储器,具有强大的原理图绘制功能。总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。运营Proteus软件出现以下窗口。如图5-1所示。

图5-1Proteus原理图编辑窗口点击P(元件选择按键),填写元件名称,选择所需要的元件,对于本电路我先添加主电路元件,然后在添加子电路元件,完毕后连线,对于不便连接的元件节点,可以采用总线和网络标号的形式。完毕后保存,电路图如图5-2所示。图5-2仿真电路图5.2Keil4软件Keil4软件是KeilSoftware公司推出的uVision4,是一款可用于多种8051MCU的集成开发环境(IDE),该IDE同时也是PK51及其它开发套件的一个重要组件。除增长了源代码、功能导航器、模板编辑以及改善的搜索功能外,提供了一个配置向导功能,加速了启动代码和配置文献的生成。此外其内置的仿真器可模拟目的MCU,涉及指令集、片上外围设备及外部信号等。其提供逻辑分析器,可监控基于MCUI/O引脚和外设状态变化下的程序变量。编辑的C或汇编文献,分别由C51及A51编译器编译生成目的文献(.OBJ)。目的文献可由LIB51创建生成库文献,也可以与库文献一起经L51连接定位生成绝对目的文献(.ABS)。ABS文献由OH51转换成标准的HEX文献,以供调试器使用进行源代码调试,也可由仿真器使用直接对目的板进行调试,也可以直接写入程序存贮器如EPROM中。注意晶振的频率,默认的是11.0592MHz,可以根据需要修改。调试时注意PC机与仿真器之间始终保持通信联络,导致独立Keil仿真器上一个指示数据接受的LED不断闪亮。使用Keil4时,打开界面,并非即刻可以编辑程序的窗口,需要新建文献和设立,其环节如下:打开Keil的操作界面,在“Project”中选择“NewuVisionProject…”新建一个文献,并命名(注意此时命名时不需要加后缀),如“温湿度”即可,拟定后会弹出选择单片机的窗口。在相应的产品里选择所需要的单片机型号,本设计所用的单片机是AtmelSTC89C52,则在相应的栏目里选中。然后接下来的窗口选择“是”,然后新建,在页面里面编辑程序,命名,要注意的是这次命名需要加后缀,如“main.c”。在主窗口侧边栏找到“Target1”,右击其子标题栏“SourceGroup1”选择“AddFilestoGroup‘SourceGroup1’”。选择保存的“温湿度.c”文献添加,并在下拉单点击打开,此时,编译开始,指示灯亮。顺序编译,若出现错误,编译窗口下会出现错误提醒,双击错误提醒,则插入符号将出现在有错的地方,根据提醒对程序进行修改,保存,再编译至无错,否则无法生成“HEX”在主菜单栏里选择“Project”按出下拉单,选择“OptionsforTarget‘Target1’”,在该窗口下,将晶振的频率(Xtel(MHz))设立为12MHz,然后选择“Output”在“CreateHEXFile”前面打钩,OK。在继续编译后出现“createhexfilefrom…”,编译完毕,此时文献就可以被单片机辨认应用,导入即可。图5-3Keil4软件打开程序界面5.3仿真打开用Proteus软件编辑好的电路图,双击单片机导入程序,如图5-4所示。导入程序仿真后,如图5-5所示,其结果显示编辑的程序,以及电路图符合设计规定。检测精度也在范围之内。图5-4程序导入界面图5-5仿真结果图5.4根据原理图焊接电路板按照设计的电路图焊接电路板,原理图如图5-2。焊接时要牢记注意点,短路、虚焊都不要出现,在焊接每一次完毕后都要认真检查有没有出现错误,避免在总体的焊接完毕后,出现不知所以的问题。所以在焊接时严格按照电路图焊接。焊接完毕后检查电路板焊接情况,用万用表检查电路是否存在短路、虚焊。检查完毕确认没有问题的情况下加电测试。实物电路板如图5-6所示。

附录头文献(tou.h):#ifndef__TOU_H__#define__TOU_H__#include<reg52.h>#include<intrins.h>//#include<math.h>//Keillibrary#defineucharunsignedcharenum{TEMP,HUMI};sbitDATA=P1^7;sbitSCK=P1^6;sbitBaojin=P1^5;sbitLcdRs=P2^4;sbitLcdRw=P2^5;sbitLcdEn=P2^6;sfrDBPort=0x80;//P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口/********DS1602函数声明********/voidLCD_Initial();voidGotoXY(unsignedcharx,unsignedchary);voidPrint(unsignedchar*str);voidLCD_Write(bitstyle,unsignedcharinput);/********SHT10函数声明********/voids_connectionreset(void);chars_measure(unsignedchar*p_value,unsignedchar*p_checksum,unsignedcharmode);voidcalc_sth10(float*p_humidity,float*p_temperature);//floatcalc_dewpoint(floath,floatt);#endif/***********************************************************************************************************************************************************/SHT10程序(SHT10.c):#include<tou.h>#definenoACK0 //继续传输数据,用于判断是否结束通讯#defineACK1//结束数据传输; //地址命令读/写#defineSTATUS_REG_W0x06//00000110#defineSTATUS_REG_R0x07//00000111#defineMEASURE_TEMP0x03//00000011#defineMEASURE_HUMI0x05//00000101#defineRESET0x1e//00011110//写字节程序chars_write_byte(unsignedcharvalue){ unsignedchari,error=0; for(i=0x80;i>0;i>>=1)//高位为1,循环右移 { if(i&value)DATA=1;//和要发送的数相与,结果为发送的位 elseDATA=0; SCK=1; _nop_();_nop_();_nop_();//延时3us SCK=0; } DATA=1;//释放数据线 SCK=1; error=DATA;//检查应答信号,确认通讯正常 _nop_();_nop_();_nop_(); SCK=0; DATA=1; returnerror;//error=1通讯错误}//读字节程序chars_read_byte(unsignedcharack)//----------------------------------------------------------------------------------{ unsignedchari,val=0; DATA=1;//释放数据线 for(i=0x80;i>0;i>>=1)//高位为1,循环右移 { SCK=1; if(DATA)val=(val|i);//读一位数据线的值 SCK=0; } DATA=!ack;//假如是校验,读取完后结束通讯; SCK=1; _nop_();_nop_();_nop_();//延时3us SCK=0; _nop_();_nop_();_nop_(); DATA=1;//释放数据线 returnval;}//启动传输voids_transstart(void)//generatesatransmissionstart//_____________//DATA:|_______|//______//SCK:___||___||______{ DATA=1;SCK=0;//准备 _nop_(); SCK=1; _nop_(); DATA=0; _nop_(); SCK=0; _nop_();_nop_();_nop_(); SCK=1; _nop_(); DATA=1; _nop_(); SCK=0;}//连接复位voids_connectionreset(void)//communicationreset:DATA-line=1andatleast9SCKcyclesfollowedbytransstart//_____________________________________________________________//DATA:|_______|//_______________//SCK:__||__||__||__||__||__||__||__||__||______||___||______{ unsignedchari; DATA=1;SCK=0;//准备 for(i=0;i<9;i++)//DATA保持高,SCK时钟触发9次,发送启动传输,通迅即复位 { SCK=1; SCK=0; } s_transstart();//启动传输}//软复位程序chars_softreset(void)//resetsthesensorbyasoftreset{ unsignedcharerror=0; s_connectionreset();//启动连接复位 error+=s_write_byte(RESET);//发送复位命令 returnerror;//error=1通讯错误}/*读状态寄存器chars_read_statusreg(unsignedchar*p_value,unsignedchar*p_checksum)//----------------------------------------------------------------------------------//readsthestatusregisterwithchecksum(8-bit){ unsignedcharerror=0; s_transstart();//transmissionstart error=s_write_byte(STATUS_REG_R);//sendcommandtosensor *p_value=s_read_byte(ACK);//readstatusregister(8-bit) *p_checksum=s_read_byte(noACK);//readchecksum(8-bit) returnerror;//error=1incaseofnoresponseformthesensor}//写状态寄存器chars_write_statusreg(unsignedchar*p_value)//writesthestatusregisterwithchecksum(8-bit){ unsignedcharerror=0; s_transstart();//transmissionstart error+=s_write_byte(STATUS_REG_W);//sendcommandtosensor error+=s_write_byte(*p_value);//sendvalueofstatusregister returnerror;//error>=1incaseofnoresponseformthesensor} *///温湿度测量chars_measure(unsignedchar*p_value,unsignedchar*p_checksum,unsignedcharmode)//进行温度或者湿度转换,由参数mode决定转换内容;{// enum{TEMP,HUMI}; //已经在头文献中定义 unsignederror=0; unsignedinti; s_transstart();//启动传输 switch(mode)//选择发送命令{ caseTEMP:error+=s_write_byte(MEASURE_TEMP);break; //测量温度 caseHUMI:error+=s_write_byte(MEASURE_HUMI);break; //测量湿度 default:break; } for(i=0;i<65535;i++)if(DATA==0)break;//等待测量结束 if(DATA)error+=1;//假如长时间数据线没有拉低,说明测量错误 *(p_value)=s_read_byte(ACK);//读第一个字节,高字节(MSB) *(p_value+1)=s_read_byte(ACK);//读第二个字节,低字节(LSB) *p_checksum=s_read_byte(noACK);//readCRC校验码 returnerror; //error=1通讯错误}//温湿度值标度变换及温度补偿voidcalc_sth10(float*p_humidity,float*p_temperature){ constfloatC1=-4.0;//12位湿度精度修正公式 constfloatC2=+0.0405;//12位湿度精度修正公式 constfloatC3=-0.0000028;//12位湿度精度修正公式 constfloatT1=+0.01;//14位温度精度5V条件修正公式 constfloatT2=+0.00008;//14位温度精度5V条件修正公式 floatrh=*p_humidity;//rh:12位湿度 floatt=*p_temperature;//t:14位温度 floatrh_lin;//rh_lin:湿度linear值 floatrh_true;//rh_true:湿度ture值 floatt_C;//t_C:温度℃ t_C=t*0.01-40;//补偿温度 rh_lin=C3*rh*rh+C2*rh+C1;//相对湿度非线性补偿 rh_true=(t_C-25)*(T1+T2*rh)+rh_lin;//相对湿度对于温度依赖性补偿 if(rh_true>100)rh_true=100;//湿度最大修正 if(rh_true<0.1)rh_true=0.1;//湿度最小修正 *p_temperature=t_C;//返回温度结果 *p_humidity=rh_true;//返回湿度结果}//从相对温度和湿度计算露点/*floatcalc_dewpoint(floath,floatt){ floatlogEx,dew_point; logEx=0.66077+7.5*t/(237.3+t)+(log10(h)-2); dew_point=(logEx-0.66077)*237.3/(0.66077+7.5-logEx); returndew_point;} *//***********************************************************************************************************************************************************/DS1602程序(1602.c):#include<tou.h>//内部等待函数**************************************************************unsignedcharLCD_Wait(void){LcdRs=0;LcdRw=1;_nop_();LcdEn=1;_nop_();LcdEn=0;returnDBPort;}//向LCD写入命令或数据********************************************************#defineLCD_COMMAND0//Command#defineLCD_DATA1//Data#defineLCD_CLEAR_SCREEN0x01//清屏#defineLCD_HOMING0x02//光标返回原点voidLCD_Write(bitstyle,unsignedcharinput){LcdEn=0;LcdRs=style;LcdRw=0;_nop_();DBPort=input;_nop_();//注意顺序LcdEn=1;_nop_();//注意顺序LcdEn=0;_nop_();LCD_Wait();}//设立显示模式************************************************************#defineLCD_SHOW0x04//显示开#defineLCD_HIDE0x00//显示关#defineLCD_CURSOR0x02//显示光标#defineLCD_NO_CURSOR0x00//无光标#defineLCD_FLASH0x01//光标闪动#defineLCD_NO_FLASH0x00//光标不闪动voidLCD_SetDisplay(unsignedcharDisplayMode){LCD_Write(LCD_COMMAND,0x08|DisplayMode);}//设立输入模式************************************************************#defineLCD_AC_UP0x02#defineLCD_AC_DOWN0x00//default#defineLCD_MOVE0x01//画面可平移#defineLCD_NO_MOVE0x00//defaultvoidLCD_SetInput(unsignedcharInputMode){LCD_Write(LCD_COMMAND,0x04|InputMode);}//初始化LCD************************************************************voidLCD_Initial(){LcdEn=0;LCD_Write(LCD_COMMAND,0x38);//8位数据端口,2行显示,5*7点阵LCD_Write(LCD_COMMAND,0x38);LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR);//启动显示,无光标LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);//清屏LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE);//AC递增,画面不动}//液晶字符输入的位置************************voidGotoXY(unsignedcharx,unsignedchary){if(y==0)LCD_Write(LCD_COMMAND,0x80|x);if(y==1)LCD_Write(LCD_COMMAND,0x80|(x-0x40));}//将字符输出到液晶显示voidPrint(u

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论