毕业设计-基于单片机的环境温湿度检测系统_第1页
毕业设计-基于单片机的环境温湿度检测系统_第2页
毕业设计-基于单片机的环境温湿度检测系统_第3页
毕业设计-基于单片机的环境温湿度检测系统_第4页
毕业设计-基于单片机的环境温湿度检测系统_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

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

文档简介

摘要环境温湿度检测系统是日常生活、工业生产和农业管理中广泛使用的一种设备。该设备具备以下主要功能:实时检测出环境中的温度和湿度参数值,并显示出来,根据设定的报警限予以报警指示,可以和上层控制器通信。随着单片机的大规模应用,单片机在检测系统中也越来越多的被使用。本设计以AT89S52这款低功耗、高性能、在系统编程的8位单片机为系统控制处理核心,由单总线数字温湿度传感器DHT11、数码管显示屏、LED与蜂鸣器、通信串口和按键控制输入等五个局部组成,从而实现环境问世的监测系统的主要功能。后期的探索设计——换用红外遥控控制和LCM为显示屏、外加时钟和存储芯片、增加照度检测电路,极大地提升了系统的性能,使系统不仅可以检测并显示环境温度、湿度和照度变量,而且可以按照时间顺序存储适量的数据。此外,系统有降压整流和稳压滤波电路,可用交流市电〔220V〕、各种平安直流电〔5~24V〕、太阳能电池等为系统供电,并且可以存储少量电能〔900mAh〕,因此,系统有较宽的工作电压,可满足多种应用场合。本设计由Protel画出了电路原理图和PCB图,并由此完成了硬件的制作,使用C51语言对单片机进行编程控制,并模块化仿真,最后通过综合调试,符合预期的设计要求。关键词:AT89S52单片机DHT11传感器PCB设计温湿度检测AbstractEnvironmenttemperatureandhumiditydetectionsystemisakindofequipmentwhichiswidelyusedindailylife,industrialproductionandagriculturalmenagement.Theequipmenthasfollowingmainfunction:detectingthetemperatureandhumidityparametersintheenvironmentreal-timeanddisplaythem,givingalarmindicationaccordingtothesetlimits,andbeingabletocontactwithuppercontroller.WiththeSCMusedlarge-scalely,theSCMismoreandmoreusedindetectionsystem.Thisdesign,usesthe8-bitSCMnamedAT89S52,whichhasalotofadvantagessuchaslow-powerdissipation,high-performanceandISP,andmadeupoffiveparts:single-wiredigitaltemperatureandhumiditysensor,digitrondisplay,LEDandbuzzer,serialcomunicationsandkeysinput,thusperformthefunctionofenvironmenttemperatureandhumiditydetectionsystem.Theexplorationdesigninlaterstage,includinginfraredremotecontrolandLCMdisplay,clockandmemorychips,andilluminationdetectioncircuit,immenselypromotesthepropertyofthesystem,makesitnotonlydetecteanddisplaythetemerature,humidityandillumination,butalsostoresomedatainorderoftime.Inaddition,withstep-downrectifierandstabilivoltfiltercircuit,thesystemcanuseutilitypowerAC220V,differentsafetyDC5~24V,solarbatterytosupplypower,andstoresomeelectricenergyabout900mAh,sothatithasawidepowersupplyvoltageandmeetsdifferentapplicationplaces.ThedesigngivesthecircuitdesignschematicsandPCBdiagramwithProtel,andcompletesthehardwarepartoftheproduction,andusesC51languagesystemtoaccomplishthecontrolprogramofSCM,andsimulateseverypartsuccessfully.Throughthesyntheticaldebugging,thedesignachievestherequireddesigns.Keywords:AT89S52SCM,DHT11sensor,serialcommunication,temperatureandhumiditydetection,PCBdesign目录第一章前言11.1设计的目的意义调查11.2设计的市场现状分析21.3设计的内容要求说明31.4设计的实施方案设想4第二章硬件的设计52.1单片机的选用52.2传感器的选用72.2.1初期设计72.2.2最正确方案82.2.3电路设计92.3数码管驱动电路设计102.3.1数码管的选用102.3.2驱动电路的设计102.4报警电路设计122.4.1蜂鸣器驱动电路132.4.2LED驱动电路132.5控制输入电路设计142.6串口通信电路设计162.7稳定电源电路设计172.8系统三大局部的PCB设计182.8.1系统主体局部PCB设计192.8.2串口通讯PCB设计20稳压电源局部PCB设计21第三章程序的设计233.1程序功能描述、单片机内部资源分配和程序流程图233.1.1程序功能描述233.1.2单片机内部资源分配——两个定时器的分工233.1.3程序的流程图243.2编程语言和工具的选择以及程序文件的分配253.2.1编程语言的选择253.2.2编程工具的选择263.2.3程序文件的分配263.3传感器通信程序设计273.3.1握手确认273.3.2数据传送283.3.3相关问题解决方案313.4数码管扫描程序设计323.5报警及设置程序设计333.5.1报警驱动333.5.2报警值调整343.6按键扫描程序设计343.7串口发送数据程序设计363.7.1波特率设置363.7.2数据发送格式373.7.3发送方式373.8Keil综合编译和结果分析、程序下载383.8.1综合编译情况和结果分析383.8.2生成HEX文件下载至单片机中40第四章系统后期探索优化设计简介414.1换用红外控制和LCM显示的探索414.1.1红外控制414.1.2LCM显示444.2增加实时时钟和存储芯片来记录数据的探索484.3增加照度检测电路的探索50结束语54参考文献56附录57附1单片机驱动程序57附2硬件制作元器件安装图、布线图78第一章前言本章主要表达了温湿度检测系统设计的一些根本情况,包括目的意义、市场现状、设计要求和实施方案等几个局部。1.1设计的目的意义调查现代社会,随着国家的经济不断开展,人们的生活水平逐渐提高,在衣食住行根本满足之后,追求一种健康长寿的生活方式已经成为时代的潮流。家庭居室,工作场所是人们每天较长时间生活的两个环境,而环境中的温度和湿度变化那么和人们的生理、心理等身体健康状况息息相关。相关研究结果摘录如下;据生理学家研究,室内温度过高时,会影响人的体温调节功能,由于散热不良而引起体温升高、血管舒张、脉搏加快、心率加速。冬季,如果室内温度经常保持在25度以上,人就会神疲力乏、头晕脑胀、思维迟钝、记忆力差。同时,由于室内外温差悬殊,人体难以适应,容易患伤风感冒。如果室内温度过低,那么使人体代谢功能下降,脉搏、呼吸减慢,皮下血管收缩,皮肤过度紧张,呼吸道粘膜的抵抗力减弱,容易诱发呼吸道疾病。因此,科学家们把人对‘冷耐受”的下限温度和”冷耐热”的上限温度,分别定为11度和32度。然而,人的体感并不单纯受气温或气湿两种因素的影响,而是两者综合作用的结果。通过实验测定,最适宜的人的室内温湿度是:冬天温度为18至25度,湿度为30%至80%。夏天温度为23至28度,湿度为30%至60%。在此范围内感到舒适的人占95%以上。在装有空调的室内,室温为19至24度,湿度为40%至50%时,人会感到最舒适。如果考虑到温湿度对人思维活动的影响,最适宜的室内温度应是工作效率最高的值。温度应是18度,湿度应是40%至60%,此时,人的精神状态最好,思维最敏捷。因此,随时关注环境的温湿度变化而由此采取措施对人们的健康生活和高效工作有着重要的意义。除此之外,工业生产、农业管理和医疗护理等环境中的温湿度也是两项重要的检测控制参数,对平安生产、粮食丰收和病人康复等意义重大。局部要求数据如下:由此看来,研究设计环境温湿度检测系统十分有必要。1.2设计的市场现状分析纵观市场,温湿度检测技术已经比拟成熟,已有的各种温湿度检测产品,五花八门,犹如八仙过海,各显神通,如A2000家用温湿度报警表、YD-808A工业用温湿度显示器等产品。从功能上分析这些产品可以看出,一个比拟完整的环境温湿度检测系统应该具备以下主要的四个功能:〔1〕实时检测出环境中的温度和湿度参数;〔2〕检测的参数值显示在显示设备上〔如数码管,液晶显示器等〕;〔3〕根据环境要求,设定温度湿度报警的上下限值,并实时报警;〔4〕与上层监控设备通信〔如PC〕,实现数据传输〔双向或单向〕;因此,本设计也应该具备这些功能,并且对每一个局部进行优化设计,也可以扩展系统功能。除了功能上的分析之外,再看这些产品的造价和供电情况,有以下两个问题:〔1〕价格太高,不符合普通消费者的消费水平,如A2000家用温湿度报警表,淘宝网上售价300左右;〔2〕供电都比拟单一,规定在直流6V,9V,12V或交流220V等,除了购置产品主体之外,还需要一个特定的电源适配器;综上所述,本设计设计出的环境温湿度检测系统,除了具备市场上已有产品的功能之外,还应尽量降低制作价格,确保有较宽的工作电压。1.3设计的内容要求说明根据上述市场调查情况和毕业设计任务书的要求,本设计的研究内容包括以下几个方面:1、根本要求〔1〕主要检测环境变化中的温度和适度参数;〔2〕温湿度参数显示在LED数码管屏幕上;〔3〕可以设置温湿度报警点,并能按照设置实时报警;2、控制要求〔1〕根据需求,温湿度数据可以发送给上层监控设备,如普通电脑等;〔2〕可以按照时间顺序,以一定格式将温湿度数据导出保存,以便进行再分析处理;3、制作要求〔1〕造价低廉,工作可靠;〔2〕工作电压较宽,满足不同的供电测试条件;〔3〕做出产品样机,调试通过,可以正常工作;因此,本温湿度检测系统的设计应以这三方面的要求为依据,从而进行各个局部的详细设计。1.4设计的实施方案设想基于单片机的环境温湿度检测系统实施方案设想如下:1、由温度和湿度传感器对环境中的温度和湿度变量进行采样;2、单片机和传感器通信,获得采样数据并暂存;3、单片机对数据进行预处理〔如校验等〕,对有效数据再进行以下四种处理:驱动显示电路,把数据显示在数码管上;扫描输入的控制信号,设定报警限值;根据设定的报警,驱动报警电路工作,予以报警指示;扫描输入的控制信号,根据需要发送数据给上层设备,在设备上进行数据再处理或保存;在系统供电端有稳压滤波电路或电能存储器件,保证系统正常工作;选用价格低廉的器件或设计电路,减少花费;在以上方案都实施的情况下,对系统进行优化创新设计,强化功能;因此,本系统的设计应按照这个思路进行具体设计,把每一步的设想转化为现实的设计。系统的结构图如下:第二章硬件的设计根据绪论中的分析说明,可以明确温湿度检测系统的硬件电路分为电源稳压、传感器检测、数码管显示驱动、报警驱动、输入控制、数据发送等六大局部,其中后五个局部都以单片机为核心,由单片机来进行控制处理,因此单片机的选用至关重要。2.1单片机的选用自从20世纪70年代,因特尔公司推出第一代单片机以来,单片机的开展如雨后春笋。各大电气商、半导体商根据不同的控制需求,尤其在嵌入式系统控制方面,以因特尔公司的51单片机的框架结构为根底,研发了各种各样的、功能强大的单片机。而今,我们已经进入了一个单片机可广泛选择的、百花齐放的时代。因此,选用一款价格低廉,性能优良的单片机已不再困难。在MCS-51单片机8051的根底上,ATMEL公司开发的AT89系列的单片机自问世以来,以其较低廉的价格和独特的程序存储器——快速闪存器为用户所亲莱,尤其是AT89S52这款单片机,它有以下几个特点:1、与MCS-51单片机产品兼容,完全可采用51指令系统用汇编或C51编程;2、8K字节在系统可编程FLASH存储器,并且有1000次擦写周期,这使得。调试程序和下载程序十分方便;3、全静态操作,工作频率范围为0Hz~33MHz,频率范围宽,便于系统功耗控制;4、三级加密程序存储器,使程序和系统更加难以仿制,确保了产品的知识产权;5、32个可编程I/O口线,每个I/O都可以独立或联合使用,实现不同的数据操作,而且PI端口的高三位第二功能为ISP编程,实现在系统调试;6、三个16位定时器/计数器,其中定时器2也可以作为串口波特率的产生;7、八个中断源,分为两个优先级,可软件设置;8、一个全双工通用异步接收发送数据借口,以便与外设进行串行数据通信;9、有低功耗空闲和掉电模式,掉点后可由中断唤醒,可设置掉电标识符;10、宽工作电压范围,VCC为2.7~5.5V,与TTL电平和CMOS电平兼容;总之,AT89系列单片机与MCS-51系列单片机相比,前者和后者有兼容性,但前者的性能价格比等指标更为优越。因此,选用AT89S52单片机可实现温湿度检测系统的功能,下列图为该单片机的DIP40封装外观和引脚功能:图2-1单片机的引脚图根据单片机的推荐外围电路,复位〔10K电阻,10uf电容〕、晶振〔12MHZ,电容22pf〕电路设计如上图所示:图2-2单片机复位电路图2-3单片机晶振电路2.2传感器的选用2.2.1初期设计本设计的初期设想是用一个温度传感器和一个湿度传感器来检测环境中的温度和湿度参数,其中温度传感器选用单总线数字温度传感器DS18B20,湿度传感器选用数字式湿度传感器SHT11,那么检测局部功能框图如下:图2-4传感器初期设计方案比拟DS18B20和SHT11,这两个传感器的通信都比拟复杂,具体过程为:主机发起通信、传感器确认通信、主机给传感器写命令字、传感器给主机发送检测数据,且SHT11还要求外部输入串行时钟信号。这种通信的复杂,不仅表达在硬件电路的设计上,而且表达在程序的设计上,并且串行通信对时序要求比拟严格,这样对单片机来说将是一个巨大的挑战,何况单片机还要进行其他的后续控制处理。除此之外,这两大传感器的价格都不菲,DS18B20在8元左右,而SHT11那么在50元左右,这对支付能力也是一个巨大的考验。因此,这种方案不可取,必须寻求其他的传感器解决方案,从而简化硬件电路和程序设计,让单片机有更多的内外部资源来处理后续操作。2.2.2最正确方案后期采用单总线数字温湿度传感器DHT11。这款传感器由广州奥松电子科技研发,与单片机的通信十分简洁方便,无需外接时钟信号,通信如下:图2-5单总线数字温湿度传感器DHT11与单片机通信除此之外,它还有很多突出的优点:〔1〕温湿度传感器的一体化结构能同时对相对湿度和温度进行测量,并以数字信号输出,从而减少用户对信号的预处理负担;〔2〕独特的单总线数据传输线协议使得读取传感器更加便捷,而且还有全部校准数据字节,编码方式为8位二进制数;〔3〕40位二进制数据输出,高位先出,格式为:湿度整数局部8位,小数局部8位;温度整数局部8位,小数局部8位,最后8位为校验字节,为前32位数据的和。〔4〕宽工作电压,几乎与AT89S52的电压相同,为3~5.5V,而且功耗较低,通信最大电流为2.5mA。其简要的性能参数如下表所示;表2-1温湿度传感器DHT11性能参数从表中可以看出,它的测量范围较小,但对实验或民用已经足够了,如果要工业使用的话,可选用该公司的同类工业级产品AM323,测量范围为-55.0~+125.0度,测量范围为0.0~100.0%RH,并且可以和DHT11完全互换。2.2.3电路设计按照说明书的要求,DHT11与单片机的连接距离小于20米时,需要在VCC和DATA引脚之间接一个5K左右的电阻,因此电路设计如下:图2-6温湿度传感器DHT11与单片机连接电路至此,传感器的硬件电路设计完成,另一局部的工作就是编程问题,在下一章节介绍。2.3数码管驱动电路设计2.3.由于温湿度传感器DHT11测温范围为0~50℃,测湿范围为20~90%RH,温度和湿度都是两位数据,因此可以用两个两位一体的数码管来显示温湿度数据,共阴极或共阳极都可以,本设计中选用两个型号为FJS5202FH2.3.数码管驱动软件设计有两种方案,一种是静态驱动,即四位数码管的段选信号和位选信号,分别接入控制器的端口,需要8×4+4=36个端口;另一种是动态驱动,段选信号线公用,而位选信号分开控制,需要8+4=12个端口。考虑到单片机可用的I/O引脚只有32个,为不扩展引脚而外加芯片,因此采用动态驱动方式较合理。数码管驱动电路一般也有两种设计方案,一种是使用八D锁存芯片74HC373或74LS373锁存驱动,另一种是用三极管放大驱动。市场上74HC373芯片较74LS373芯片价格廉价也为2元左右一块,而三极管只有0.2元左右,四个三极管共8角钱,相对来说比拟经济实惠,因此选用后一种方案。而相关器件电气参数为:〔1〕红色共阳极数码管〔实际上是八个并联的红色LED〕的电压范围1.5~2.0V,最大工作电流为20mA×8=160mA;〔2〕单片机每个引脚灌电流〔外部电流流入单片机〕大约为24mA,拉电流〔单片机电流流入外设〕小于1mA。根据这两项参数,初步确定三极管选用90系列PNP型,用集电极接数码管位选引脚,基极用电阻限流后接单片机引脚予以位选控制。再考虑数码管电流的限定,符合要求的三极管只有8550和9012,其简要参数见下表:表2.2可选三极管参数由表可以看出,8550的电流和功率都很大,既浪费资源又不利于降低系统功耗,因此选用9012较为适宜。因此,这局部的电路设计如下:图2.7数码管段选信号与单片机连接电路图2.8数码管位选信号与单片机连接电路用单片机P0端口作为数码管段选信号,P2端口的高四位作为位选信号,四个电阻的粗略大小为:R=(VCC-VEB)/Ib=〔〕/1mA=4.8K,可选用E24系列的电阻4.7K或5.1K。2.4报警电路设计本设计需要指示一种温湿度正常状态、一种数据发送状态和四种超限报警状态,即温度超下限,温度超上限,湿度超下限,湿度超上限,可采用简单的声〔蜂鸣器〕光〔LED〕报警电路。LED颜色和状态及蜂鸣器状态分配如下表所示:表2.3报警指示状态分配注:“——”表示LED熄灭或蜂鸣器无声。蜂鸣器驱动电路根据蜂鸣器的参数:电压1.3~1.5V,电流20~80mA,电阻6~8Ω知,可用选用集成放大芯片LM386驱动,但更经济的是用一个三极管9012或8550驱动即可,电路如下图:图2.9蜂鸣器报警驱动电路2.4.2LED驱动电路根据LED的参数:电压1.5~2.5V,电流10~20mA,那么可用一电阻对电源进行下拉,限流分压后,LED阴极接入单片机予以控制,电阻阻值大约为:R=(VCC-VLED)/I=(5.5V-2V)/10mA=350Ω,选用330Ω或360Ω的电阻即可,具体电路如下列图所示:图2.10报警LED驱动电路2.5控制输入电路设计本设计的控制输入局部为简单的三个按键,由于单片机默认状态下端口引脚为高电平,可以接上按键与地相连,单片机检测按键端口的电平情况来决定是否有按键按下和哪个按键被按下,抖动问题采用软件延时方式,减少硬件电路设计,电路如下图:图2.11控制输入按键连接电路经过上述对各个模块的分布设计,现在可给出系统主体局部的原理总图。图2.12系统主体局部原理总图考虑到PCB设计单面板布线的可行性,单片机的外部资源〔端口引脚〕分配按下进行:传感器DHT11数据线——P11;蜂鸣器HXD驱动三极管基极——P10;程序调试ISP插座——P15、P16、P17;按键KEY1、2、3——P32、P33、P35;串口RXD、TXD——P30、P31;数码管段选信号、位选信号——P0、P23、P24、P25、P26;LED绿、黄、红——P22、P21、P20。2.6串口通信电路设计单片机AT89S52有一个全双工的UART接口,即RXD(P3.0)和TXD(P3.1),因此可以用来和上层设备如PC通信,但是由于PC的串口使用RS232电平通信协议,而单片机使用TTL电平通信协议,这两种电平的特点见下表:表2.4RS232和TTL电平标准比拟比拟两表,可以看出RS232电平和TTL电平并不兼容,为使单片机和PC通信,必须先转换电平,可采用新型集成芯片MAX232实现数据发送转换和接收转换的双重功能,依据芯片手册上的推荐电路,经合理简化后设计的串口发送数据局部电路为:图2.13通信串口电路其中J1与单片机串口相连,J2经针脚到插孔的RS232数据线与电脑相连,即可实现电脑和单片机的全双工通信。2.7稳定电源电路设计按照设计要求,系统供电要求多样化,除了交流220V的市电是必用的外,还应该具备其他供电要求,如太阳能电池,各种平安直流电压源等,而且还应该有一定的蓄电能力。考虑到市电电压太高且为正弦变化,而太阳能电池输出电压不稳定等问题,必须要对市电进行降压,对变动的电压进行稳压,而单片机系统的电压要求在5V左右,因此,可考虑用集成稳压模块LM7805进行终端稳压。LM7805是三端正5V电源稳压器件,输入电压为直流5~24V,输出电压为4.8~5.2V,最大允许电流为1.5A,有电流限制、热过载保护和短路保护功能,确保输出电压正常稳定。具体电路设计如下:图2.14稳压电源电路该电路有四个电源插座,其中J1为市电AC220V供电输入,J2为太阳能电池或其他输出直流为5~24V的电压源的输入,J3为充电输出接口,可为充电电池〔1.2V×4只〕恒流充电,J4为系统供电+5V电压输出端口,由此接到系统的电源端。当用市电供电时,先经过220V/12V的变压器T1把电压降低至有效值为12V的交流电,再用电桥BR1进行全波整流为有效值12V〔峰值大约为17.0V〕的脉动电压,然后前置电容EC1和C1滤波,经LM7805稳压并后置电容C2滤波,输出大约为稳定的+5V直流电,一局部为系统供电,另一局部为电池充电,通过调节电位器CR1可调整充电电流,给不同的电池充电。LED1为电源指示灯。当用太阳能电池等输出为直流电的电源设备时,直接接入J2端口,亦可为系统供电。使用这种设计,可以确保系统有较宽的工作电压,并且可以存储少量电能,从而到达在不同场合供电的目的。2.8系统三大局部的PCB设计在Protel99中新建设计文档,根据以上分析,画出系统主体局部、串口通信局部和电源局部的原理图,并选择适宜的封装外形,设计相应的PCB图。三局部的PCB图及设计时应注意的问题简要介绍如下:2.8.1系统主体局部PCB设计图2.15系统主体PCB图设计要求:〔1〕传感器的安装位置传感器必须安置在PCB的边缘位置,不仅应确保没有发热吸湿的器件在其附近,而且传感器的感温感湿栅窗应朝向外部,否那么可能会影响传感器对外部环境中温湿度的测量,如图2.15左下角的插座J2即为传感器的安装位置。〔2〕数码管的布线不仅数码管的引脚较多,与单片机的连线也较多,而且制作实验硬件使用的是单面板,只能在底面布线,因此,在布线的时候应该综合考虑三方〔单片机、数码管和单面实验板〕的特点,选择合理的布线方案。为保证多在底面布线,本设计对数码管采用变码布线,即数码管a~Dp段并没有和单片机P00~P07一一对应,而且位选信号线和局部段选信号线在顶面布线,详细情况如图2.15所示,其中DG1和DG2为数码管。〔3〕电源开关、插头插座和按键的位置电源开关、插头插座和按键是经常使用的器件,为方便操作,需要安装在边缘位置,和其他元件的距离不应过小。如图2.15中的SW1、J1、J3、KEY-R、KEY1~KEY3以及ISP1等。〔4〕单片机的位置单片机是系统的核心,为了便于安装和更换,单片机的周围不应放置过多元件,留有余地。〔5〕布线要求布线不应过密,特别是DIP封装的元件,引脚之间禁止布线,否那么可能导致连线短路或信号相互干扰。2.8.2图2.16串口通信局部PCB图设计要求:〔1〕芯片安装位置芯片U1的凹槽朝向J2,便于和J2连线。〔2〕电容封装选择由于电容C4引脚间有布线,封装应选用中间可布一线的外形,或把引脚间距较小的间距拉大,确保可布一线。〔3〕J2的焊盘尺寸J2的两端的固定焊盘应适当加大,以增强焊接力。因为串口插头较大,而且会有频繁的插拔,假设固定焊盘过小,可能出现松动。2.8.3图2.17电源局部PCB图设计要求:〔1〕高压局部J1为AC220V的插头,T1为AC220V/12V的变压器,这两个器件在设计时应考虑平安问题。J1的引脚间距应加大,T1的输入输出线应适当加粗,确保高压隔离和大电流散热良好。〔2〕稳压器件的位置当LM7805工作电压高于5V时,会有较大热量产生,因此在设计时应放在PCB边缘通风散热良好的地方,并且散热片朝向外部。根据上述三局部的PCB图,用万用板和相应元器件焊接制作实验硬件,依据设计用细裸导线布线,完成三局部硬件的制作。第三章程序的设计本章依据已经设计好的的硬件,选用适宜的语言给每一个模块设计驱动程序,最后综合编译,生成下载文件。程序文档由传感器通信、数码管动态扫描、LED和蜂鸣器报警、按键输入检测和串口发送数据五个局部组成。3.1程序功能描述、单片机内部资源分配和程序流程图程序功能描述程序设计的目的是控制单片机引脚的电平变化,从而控制相应外围电路按照要求工作,这些控制包括单总线温湿度传感器的数据获取、数码管的动态扫描显示、LED和蜂鸣器的联合驱动报警、按键信号检测和串口数据发送,并且这些控制必须保持协调统一、可靠稳定地实现系统的要求功能。单片机内部资源分配——两个定时器的分工数码管的显示在本系统中为关键局部,它的显示有连续性〔扫描两位之间时间差不能过大,否那么会断续显示〕和暂留性〔每一位显示的停留时间不能过短,否那么亮度不高〕,因此采用默认中断优先级较高的定时器0进行中断动态扫描,扫描时间定为1毫秒。报警LED和蜂鸣器的状态变化也应该有实时性,否那么会出现报警滞后的问题,因此用定时器1进行中断报警扫描,蜂鸣器的响声用最简单的“滴滴”声响,采用频率为5Hz的方波,而LED的闪烁也同步进行,扫描时间定为100微妙。此外,在串口发送数据期间,由于单片机本身要求,定时器1用作波特率产生器。其他控制局部在主函数中进行或附加在定时器的中断效劳中,但中断效劳不能处理太多操作,否那么程序执行效率很低。程序的流程图根据单片机的特点和系统各局部的运行时序,经过屡次试验,最后确定系统高效稳定工作的执行顺序为:开始→初始化并启动两个定时器→扫描按键→判断按键值→执行相应功能→完毕返回至按键扫描,其中定时器0中断效劳→扫描数码管→每隔1秒获取传感器数据,定时器1中断效劳→报警判断〔低温,高温,低湿,高湿〕,重复进行此过程,即可实现系统循环工作。详细流程图如下列图所示:图3-1系统程序流程图3.2编程语言和工具的选择以及程序文件的分配编程语言的选择从程序的流程图可以看出,系统的程序较为复杂,如果选用执行效率相对较高的汇编来书写,代码会很长,阅读不便,并且调试也很困难。为了提高程序的可读性和调试的便利性,选用C语言来编写。C语言功能丰富,表达能力强,使用灵活方便,应用面广,目标程序效率高,可执行性好,而且C语言既有高级语言的特点,也有汇编语言的特点,能直接对单片机硬件进行操作,因此使用起来十分方便。当然,C语言和MCS-51单片机结合之后产生的C51语言,与标准的C语言还有一定的差异,编程的时候应该注意这些问题。除此之外,C51的强大功能及其高效率的重要表达之一在于其丰富的可直接调用的库函数,这使得程序代码简单,结构清晰,易于调试和维护。特别是本征库的9个函数,虽然少,但都非常有用,其头文件为intrins.h,主要功能为按位循环左移或右移,位测试等。编程工具的选择由于单片机种类繁多,各大公司都纷纷开发了自己的编程软件,而KEILC51软件是众多单片机应用开发的优秀软件之一,它集编辑、编译、仿真于一体,支持汇编、PLM语言和C语言的程序设计,界面友好,易学易用。此外,Keil还支持自动添加多款单片机的编译预处理文件,包含各类单片机的头文件,如51单片机的头文件reg51.h。程序文件的分配经过上述分析,程序可用五个C文件来存放五个功能独立的程序模块,另外有一个公共调用的延时函数文件和主函数文件,此外,各局部还有相应的调用头文件来进行连接,从而实现了程序和硬件对应,设计模块化,调试更为方便。具体文件分配如表:表3.1系统程序文件分配3.3传感器通信程序设计由于DHT11为单总线通信器件,为了确保单片机成功与其通信,编写的程序必须严格遵守它独特的通信协议。DHT11的通信由两局部组成——握手确认和数据传送。握手确认先来看说明书中的时序图:图3-2传感器与单片机握手确认时序从图中可以看出,传感器和主机相互确认的过程为:未通信时,通信线保持高电平;通信开始后,主机先拉低电平至少18毫秒,用以确保传感器可以检测到主机信号,之后主机再拉高电平20~40微妙等待传感器响应;传感器响应后,先拉低电平40~50微妙,予以通知主机,再拉高电平同样的时间之后就转入数据传输时序,握手通信也就结束。局部程序如下〔DHT为通信端口〕://主机与DHT11通信开始DHT=0;//主机先拉低总线电平//调用延时函数,延时18毫秒DHT=1;//再拉高总线电平//调用延时函数,延时40微妙DHT=1;//拉高电平,设置总线为输入状态if(!DHT)//如果DHT11输出低电平响应,就开始接收数据{while(!DHT);//先等待DHT响应的低电平结束40~50微秒while(DHT);//再等待DHT响应的高电平结束40~50微妙//下面开始接收数据}数据传送还是先来看说明书中的时序图。图3-3传感器发送数据0时序图3-4传感器发送数据1时序从图中可以看出,在数据传输时,单片机只要按照时序检测传感器输出的电平信号即可得到一位数据,具体要求为:无论数据是0还是1,都以12~14微妙的低电平开始,之后,假设数据是0,那么传感器拉高电平并保持26~28微妙;假设数据是1,那么传感器拉高电平并保持116~118微妙,如此连续进行,送出40位的数据。由于电平变化时间是以微妙计算,非常小,因此写程序时必须要严格精确的控制时间,这在设计时有两个探索过程。〔1〕初期设想——定时器精确计时法晶振为12MHz时,定时器最小定时为1微妙,先声明一个大小为40的无符号字符型数组,用来存储定时器获得的40个微妙数,单片机计时过程如下:图3-5定时器计时接收数据流程那么这样就得到了40个微秒时间数,再对这40个时间数进行判断,得到数据0或1,从而得到温湿度数据。经过分析和试验发现,这样处理,单片机的数据量会比拟大,而且定时器的启动和关闭、数组的操作会额外花费很多时间,这就导致虽然定时器计得很精确,但是总的来说,并不是很精确,而且传感器的输出也会有一定的误差,因此这种处理数据的方式不可取,必须寻求新的解决方案。〔2〕合理方案——超时修改判断法经过后期的不断实验分析,采用以下方案较为合理:图3-6超时修改数据流程这种方案正是利用了数据0和1高电平的时间不同来判断数据,先认为是数据0的时间〔26~28微妙〕,延时30微秒越过这个时间已经足够了,再检测数据线是否仍然为高电平,如果是高电平就修改数据为1,并且等待数据1剩下的高电平结束,分字节接收,因此程序简要如下:while(!DHT);//先出现低电平约12-14微秒,等待结束//延时30微秒,越过数据0的高电平时间26~28微秒Temp_Data=0x00;//先判定数据为0if(DHT)Temp_Data=0x01;//如果数据0高电平超时,那么修改为数据1while(DHT);//等待数据1剩下的高电平时间结束,大约118-30=88微秒//以下为接收数据处理程序相关问题解决方案〔1〕精确延时函数毫秒延时://一次for循环大约8个机器周期,加上while判断和函数调用、返回,大约共120×8+40=1000us=1msvoidDelay_ms(unsignedintms){unsignedcharTemp;while(ms--)for(Temp=0;Temp<120;Temp++);}10微秒延时://nop一次1个机器周期,加上函数调用和返回各2个周期,共6+2×2=10usvoidDelay_10us(){_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}〔2〕采样传感器数据的时序安排前期设计时,定义了两个温湿度全局变量,中断使用这两个变量来显示数据;而主函数那么采样传感器,修改这两个全局变量,这种看似没有问题的设计,在实验时却始终得到的是乱码数据。结合相关资料和分析实验结果后发现,这种设计的问题就在于中断和主函数可能同时访问了这两个变量,并且主函数在修改全局变量时可能被中断打断,导致温度或湿度数据只修改了几位,就被迫送入数码管显示,显示的当然也就是乱码了。数据的修改和显示应遵从程序执行的时序,即先修改数据再显示或先显示再修改数据。考虑到传感器通信并不复杂,且最坏情况也为25毫秒左右,因此可在中断扫描数码管之前或之后,定时1s来读取传感器,这样安排程序位置后,经调试,系统显示数据正常。3.4数码管扫描程序设计根据硬件电路的设计,数码管采用动态扫描方式驱动,而动态扫描方式较多,在这里选用switch-case结构完成。在设计硬件时,为了方便在单面板上布线,共阳极数码管采用了变码编码方式,即数码管的a~Dp段和单片机的P00~P07并不对应,实际安排为:表3.2数码管段选信号线安排因此,10个数字和报警设定显示符号的编码定义为下表方式:表3.3数码管显示符号编码注:编码为十六进制,其中“┣”和“┫”代表温度和湿度,“L”和“H”代表低和高,如数码管前两位显示“┣L”时,代表正在进行低温报警值设定。当数码管显示实时温湿度数据时,前两位显示温度,后两位显示湿度;当数码管处于报警设定时,前两位显示当前设定的内容,后两位显示设定的值,如┫H、60,表示当前设定的为湿度上限,值为60%RH。以下为显示实时温湿度数据的局部程序:switch(Seg_Order){case0:Bit4=0;P0=Seg[Temperature/10];break;//显示温度高位case1:Bit3=0;P0=Seg[Temperature%10];break;//显示温度低位case2:Bit2=0;P0=Seg[Humidity/10];break;//显示湿度高位case3:Bit1=0;P0=Seg[Humidity%10];break;//显示湿度低位}显示完毕后修改Seg_Order的程序为:Seg_Order++;Seg_Order&=0x03;//超过四位后就返回第一位,从而显示下一位数码管。3.5报警及设置程序设计报警程序包括两个局部,一为报警驱动信号,另为报警值调整。报警驱动这局部的程序较为简单,主要是作温湿度超限的简单判断并为蜂鸣器和LED引脚送出电平信号即可如,蜂鸣器闪烁报警时信号为Buzzer=~Buzzer;红色LED熄灭为LED_R=1。报警值调整程序设计思路为,进入某个限值设定状态时,先修改数码管显示状态全局变量,使其显示调整结果;再进入一个死循环,在循环中扫描按键,根据不同的按键执行相应操作:结束本次调整、调整值加一或调整值减一,流程如图。图3-7报警值调整流程如此进行四次,设定四个报警点,最后再把四个子函数放入一个主调函数中,即可实现一次完整的报警调整操作。3.6按键扫描程序设计由于系统只有三个按键,个数少,可采用if-else结构逐个扫描,采用经济型的延时去抖动法,为了保证按键可靠被按下,实验说明,按键短按一次总的时间大约为300毫秒,因此按键按下抖动时间、按下时间和按键释放抖动时间的延时共300毫秒为宜,而键KEY1为多功能键,有长按和短按之分,具体安排如下:表3.4按键与键值分配注:多功能键KEY1可靠短按总时间定为500毫秒,只要超过此值即认为0是长按,依旧采用超时检测法程序简要如下。if(Key1==0)//先扫描1号按键{Delay_ms(500);//延时500毫秒越过短按时长if(Key1){While(!Key1);//等待按键释放Delay_ms(100);//长按释放去抖returnKey_M;//返回键值}else{returnKey_R}}else{//剩下程序为扫描2,3号键}3.7串口发送数据程序设计由于串口发送数据时,需要用定时器1发生波特率,而且用较高的波特率发送数据时,定时器0也不能正常工作,因此在发送数据时,两个定时器的中断效劳函数都被禁止访问,因此需要关闭数码管,关闭喇叭,而且还要重新初始化定时器为产生波特率,返回时再初始化为之前状态,恢复显示与报警。因此,串口数据发送有三个问题:波特率设置,发送格式,发送方式。波特率设置为保证单片机和PC之间通信的实时性,再考虑定时器1的本身可以设置的大小,采用BR=2400bps的波特率比拟适宜。定时器采用自动重装方式2,初值计算为:由此对单片机的串口相关内部资源设定如下:TMOD=0x20;//定时器1工作于方式2,八位自动重装计数SCON=0x50;//设置串口工作于方式1,10位为一帧的异步串行通信方式PCON=0x00;//波特率不加倍TH1=0xf3;//为定时器1写入计数初值TL1=0xf3;TR1=1;//启动定时器,开始产生波特率数据发送格式在发送数据之前,先发送数据格式为“NUMT(℃)H(%RH)”,即数据编号、温度数据、湿度数据;再开始只发送数据,格式如“0053052”。为使发送的数据可以在PC端的接收软件“串口调试助手”上清楚明了地显示,需要对发送的数据进行转码,由十六进制码转换为ASCII码,比方,为使大小为25的温度正常显示,需要进行如下转换:String2[12]=Temperature/10+0x30;//转化为32H的ASCII码,对应显示为“2”String2[13]=Temperature%10+0x30;发送方式由于传感器采样时间规定为至少1s,发送数据的间隔应大于1s,为使数据可靠转换完成和成功发送,定为每2秒钟发送一次,即用定时方式发送。此外,为表征数据成功发送,在每次数据发送完成之后,单片机为黄色LED送出一个脉冲信号,闪灯一次。串口发送数据局部程序为://按照说明书,只要向串口缓冲器SBUF送入数据,就启动一次数据发送SBUF=Temp_Data;//等待发送完成,即标志位TI为1while(!TI);//清零标志位,为下一帧发送做准备TI=0;除了这些操作之外,在每次发送数据之前先扫描按键,确定是否停止发送。最后,需要说明的是,主函数的工作很简单——扫描按键,选择进入报警设定状态或数据发送状态。3.8Keil综合编译和结果分析、程序下载综合编译情况和结果分析在KEIL中新建工程,如下列图所示,写入各局部的代码后,综合编译。修改错误和消除警告后,得到如下内容:图3-8KEILC51工程建立与编译编译具体结果为:Buildtarget'Target1'assemblingSTARTUP.A51...compilingMpilingDpilingRead_DHT.pilingKey_SpilingSet_ApilingDigitron_SpilingSend_Function.c...linking...***WARNINGL15:MULTIPLECALLTOSEGMENTSEGMENT:?PR?READ_COM?READ_DHTCALLER1:?C_C51STARTUPCALLER2:?PR?TIMER1_SERVE?DIGITRON_SHOWProgramSize:data=68.0xdata=0code=1499creatinghexfilefrom"TAHDS"..."TAHDS"-0Error(s),1Warning(s).编译结果分析综合编译后,成功创立了下载文件,但有一个警告,合理的分析和解释如下:从编译结果来看,警告的问题是屡次调用了函数Read_DHT,而函数Read_DHT又调用了函数Read_Com。第一次调用〔CALLER1〕是在主函数中,第二次调用〔CALLER2〕是在文件DIGITRON_SHOWT的中断效劳函数TIMER1_SERVE中。检查工程函数调用情况发现,串口发送数据模块和数码管显示模块,都调用了传感器数据读取模块中的函数Read_DHT。在串口发送数据模块中的调用是从主函数中转入的,而在数码管显示模块中的调用那么是发生在中断效劳函数内。根据编译器的要求,如果一个函数同时出现在主函数和中断效劳函数中,那么程序运行可能会发生一些不可预料的结果。如同本章局部温湿度全局变量的问题,所以这种情况一般是不允许的,但不影响编译完成,会予以以上内容的警告。又因为函数Read_DHT虽然被中断效劳函数和主函数调用,但被调用的时序不同,即在程序执行过程中,不会出现中断效劳函数和主函数同时调用它的情况。从程序执行的时序上来看,在中断效劳函数调Read_DHT读取数据予以数码管显示期间,主函数没有调用它,相反,在主函数调用Read_DHT读取数据予以串口发送期间,定时器被初始化为产生波特率,而且不允许任何中断,那么中断效劳函数也就没法调用它了,所以两个地方的调用并不矛盾,不会出现未知的结果。因此,这个警告可以不用消除。生成HEX文件下载至单片机中再次编译工程,创立HEX下载文件,即TAHDS.hex。由于单片机AT89S52有ISP功能,可以用接头为DIP10的排线连接系统主体PCB上的ISP1插座与编程器的ISP插座,把HEX文件下载至单片机U1;或直接把单片机在编程器中烧写程序后,取下安装在系统的DIP40底座上。第四章系统后期探索优化设计简介本系统由于前期已经根本完成设计,在后期又探索了一系列的优化设计方案,以提升系统性能。这些设计有些已经试验成功,并且也完成了硬件的制作和软件的设计;有些只是从理论上完成了设计,给出了可能的电路图或可行的解决方案,现简要介绍如下。4.1换用红外控制和LCM显示的探索4.1.1红外控制考虑到工业测控场合一般比拟危险,系统的报警设定和数据传输应该用远距离无线控制比拟平安,再从系统本钱方面考虑,无线电通信代价比拟高,而红外线那么正适合一些距离要求不是很高的场合。红外遥控技术是一种利用红外线进行点对点通信的技术,其相应的软件和硬件技术都已经比拟成熟。它有通信设备体积小、功率低、本钱低廉,信号无干扰、传输准确度高的优点。当然,它的通信缺点是只能点到点视距传输,距离有限,但这对一些要求不是很高的场合,远距离控制已经足够了。本设计使用型号为HS0038或SM0038的红外发射和接收装置,对系统进行远距离控制的探索设计。HS0038或SM0038红外系统的编码和解码操作都十分简单,并且接收头有信号整形滤波功能,输出脉冲信号与TTL电平匹配,因此只须发射和接收特定个数的脉冲即可实现编码和译码,但最少为2个脉冲,数据发送或接收帧编码格式如下图。图4-1红外发射和接收编码格式红外发送编码方式:为使接收可靠,规定第一个码宽为3ms,码间间隔和其余的码宽均为1ms,两次发射间隔不小于10ms。此外,发射脉冲需要38KHz的载波进行高频调制。红外接收译码方式:第一位码的下降沿开始接收,如果第一位码宽小于2ms,那么认为是错误的码帧,停止接收;如果码间高电平大于3ms,那么接收停止,一次数据的发送和接收完成,然后根据不同的脉冲个数来执行后续的操作。由上分析可知,单片机可以实现红外的编码发送和接收译码,根据红外发射管〔相当于一只LED〕的参数,用小型的单片机AT89S2051〔可在系统编程〕即可实现按键扫描和红外发射的功能。电路原理图和PCB图如下图:图4-2红外遥控器的电路电路分析:单片机AT89S2051作为控制器,引脚P33~P35接三个控制输入按键Key1~Key3,高频脉冲信号经单片机P37引脚输出,经NPN型三极管9013或8050放大电流后,驱动红外发射管输出高频脉冲。调节滑动变阻器CR1可实现发射距离的控制。单片机采用上电自动复位方式。程序设计思路为:利用定时器装载高频载波信号初值,采用自动重装方式2,高八位存放定时初值0xf3,对信号输出端口执行取反操作,从而产生38KHz的高频载波。图4-3红外遥控器PCB图设计要求:红外发射管的安装位置红外发射管应该安装在PCB的边缘,便于发射红外线而不受其他器件的阻挡。此外,红外接收头的电路比拟简单,如下图。为保证系统运行的稳定性和实时性,且红外接收的第一位码为低电平,可采用外部中断方式触发,红外接收程序的设计依旧可以采用前述的超时修改判断法。图4-4红外遥控接收电路4.1.2LCM显示考虑到数码管显示的字符比拟简单,不能显示出具体的检测变量单位,因此可用LCM来作为显示器件,清晰的表达出系统的检测数据。LCM是液晶显示模块的英文简写,它具有显示字符多,电路连接简单等诸多优点。按照显示的字符种类可以分为英文字符液晶和中文字符液晶,其中英文字符液晶除了可以显示ASCII码表20H以后的字符外,还可以显示一些特殊的符号。常用的英文字符集液晶1602与单片机的连接电路如下图:图4-51602LCM与单片机的连接电路电阻R4可以根据显示亮度的需要,选用0~10K间的固定电阻或直接用一个滑动变阻器代替;D0~D7为数据线,而最高位D7为液晶状态位,RS、R/W和E为控制信号线。液晶显示数据时需要执行读取器件状态〔RS=0,RW=1,EN=1,D7为状态〕、写命令字〔RS=0,RW=0,EN=高脉冲,D0~D7为命令字〕和写数据〔RS=1,RW=0,EN=高脉冲,D0~D7为字符编码〕三种根本操作,这些操作可以实现在液晶的某个位置显示某个字符的功能,这些操作都须遵从严格的时序。以下作简要的编程分析。〔1〕读操作时序图4-61602液晶的读操作时序以读器件状态为例,从时序图中可以看出,在读状态开始时,首先要拉低RS电平,拉高RW电平,进入读命令状态,稍作延时,再拉高EN电平,使能器件,再次稍作延时,开始读取D0~D7的数据,并取出D7的位值,假设为1,那么器件禁止操作,反之为允许操作,从而读取到器件的当前状态,读取完毕之后还应该恢复器件状态,即拉低EN电平。相关程序如下:BitTemp_Status;//声明一个状态变量RS=0;//拉低电平,命令RW=1;//拉高电平,读取EN=1;//拉高电平,使能器件_nop_();//少做延时Temp_Status=〔bit〕(P0&Ox80);//读取最高状态_nop_();EN=0;//恢复器件returnTemp_Status;//返回状态值〔2〕写操作时序图4-71602液晶的写操作时序以读器件状态为例,从时序图中可以看出,在读状态开始时,首先要拉低RS电平,拉高RW电平,进入读命令状态,稍作延时,再拉高EN电平,使能器件,再次稍作延时,开始读取D0~D7的数据,并取出D7的位值,假设为1,那么器件禁止操作,反之为允许操作,从而读取到器件的当前状态,读取完毕之后还应该恢复器件状态,即拉低EN电平。相关程序如下:bitTemp_Status;//声明一个状态变量RS=0;//拉低电平,命令RW=1;//拉高电平,读取EN=1;//拉高电平,使能器件_nop_();//少做延时Temp_Status=(bit)(P0&0x80);//读取最高位状态_nop_();EN=0;//恢复器件returnTemp_Status;//返回状态值〔2〕写操作时序图4-81602液晶的写操作时序写命令字操作和写数据操作的区别在于RS的电平不一样,按照通信要求,写命令字时,首先应读取LCM的状态,等待器件允许操作后;再拉低RS、RW和EN的电平,并向数据线上送入命令字码;然后稍作延时,拉高EN电平,产生高脉冲;最后再次延时较长时间,待命令字写入后,恢复器件。其中写命令字的程序如下:while(LCM_Status());//等待器件允许操作RS=0;//拉低控制线电平RW=0;EN=0;_nop_();//稍作延时之后,向数据线送入命令字P0=Temp_Data;_nop_();EN=1;//拉高电平产生高脉冲_nop_();//延时确保命令字写入_nop_();EN=0;//恢复器件状态〔3〕LCM的命令字和初始化步骤表4.11602LCM命令字LCM的初始化步骤为:首先不检测器件状态,写入三次命令字0x38,每次写入之后延时5ms,之后每次写入命令字或数据必须检测器件状态;再次写入命令字0x38,设置LCM的显示模式;显示模式设置完之后就可以对LCM进行字符显示或屏幕处理的操作。4.2增加实时时钟和存储芯片来记录数据的探索考虑到气象研究可能需要较长时间内的温湿度数据,为了使系统可以长时间的检测和记录环境中的温湿度数据,必须为系统扩展存储器和增加高精度的时钟电路。考虑到单片机I/O资源的有限性,可选用串行通信的相关器件,存储器选用芯片CSI93C86,时钟芯片选用DS1302。两款芯片简要介绍如下:〔1〕CSI93C86是由CSIalyst公司生产,可以定义为16位〔OGR=1〕或8〔ORG=0〕位,容量为16Kbit的串行EEPROM存储器。它通过DI引脚写入,DO引脚读出,采用该公司先进的CMOSEEPROM浮动门工艺加工,器件可以经受1,000,000次的写入/擦除操作,片内数据保存寿命到达100年。器件采用低功耗工艺生产、工作电压宽达1.8~6.0V、可以以3MHz的时钟信号进行数据的高速读写。〔2〕DS1302是由DALLAS〔达拉斯〕半导体公司生产的实时时钟芯片,可对秒、分、时、日、周、月以及带闰年补偿的年进行计数,从而提供实时时钟。该芯片采用同步串行通信,与控制器的通信仅需三根数据线:复位线〔RST〕、数据线〔I/O〕和串行时钟线〔SCLK〕。同样具有低功耗、宽电压和高速通信的特点。DS1302必须外接32.768KHz的晶振,备用电源端VCC1接入一个纽扣电池或大容量的电容来提供掉电供电,确保时钟的实时性。由此,两芯片与单片机的通信电路设计如图。图4-9存储器CSI93C86与单片机的连接电路图4-10时钟芯片DS1302与单片机的连接电路因此,可以用DS1302来精确记录时间和日期,把这两项数据发送给单片机,单片机再采样温湿度数据,汇总后存储在93C86中,从而到达记录过去特定时间的温湿度数据。环境的温湿度一般不会突变,具有连续性。如果每小时记录一次,记录格式为:时间月、日、时各一个字节,温湿度各一个字节,一个数据项共有5个字节,那么一片93C86可记录16×1024bit/〔5×8bit〕=410个数据项,也就是大约17天的数据。如果要研究过去两周的温湿度变化情况,只需在适当时候,由单片机读出,发送给电脑即可。4.3增加照度检测电路的探索考虑到在工业、农业和家庭的某些特定环境中,可能还需要监测环境中的照度变量,因此可为系统增加照度检测电路。照度测量初期设想可使用光敏电阻和模数转换器件来进行检测,但光敏电阻阻值与照度并不呈线性关系,大致如下列图所示:图4-11光敏电阻阻值与光强关系而且,光敏电阻不仅对可见光敏感,对不可见光如红外线也敏感〔这常用来检测红外发射管是否完好〕,因此这种方案测量精度不是很高。后期,指导老师建议用硒光电池来作为可见光敏感元件。硒光电池输出电压较小,必须把电压放大到适当值域后,再经模数转换,由单片机比照标准照度予以数据修正,最后把照度显示出来。简要过程如下:图4-12照度检测过程但硒光电池价格比拟昂贵,在一些照度要求不高的的情况下,可以用光敏电阻或其他光敏材料,通过相关的算法,来实现照度的大致测量。相应测量电路设计为:图4-13用光敏电阻检测照度电路其中,相应照度算法为:例如,天气晴朗时,测得DO=0xcc,那么L=8400Lx。现在,可给出系统后期探索设计的结构图、原理总图和PCB图。图4-14后期探索设计系统结构图图4-15后期探索设计原理总图图4-16后期探索设计PCB图设计要求:〔1〕红外接收头的安装位置红外接收头应安装在PCB的边缘,便于接收遥控器发射的红外线,如图5.11的IR1位置。〔2〕光敏电阻的安装方向光敏电阻的栅格应朝向被测光线的方向,使光线充分照射在感光局部,确保测量的准确性。至此,后期拓展设计到此就已经结束,如果还有其他需求,亦可选用适宜的器件,来实现预期目标。结束语为了设计出基于单片机的环境温湿度检测系统,搜集了大量的芯片手册,查阅了较多的图书资料,复习了所学的课本教材,分两个阶段对系统进行了设计——前期的根本设计和后期的探索设计。前期的设计,在种类繁多的温度和湿度传感器中选定了由广州奥松公司生产的单总线数字温湿度传感器DHT11,这款传感器的优势在于通信协议相对来说比拟简洁,产品价格低廉,这对设计低本钱,高精度的温湿度检测系统十分有必要。对于功能方面的要求,在调查了市场上的同类产品之后,根据实际需求来设计的。市场上的温湿度检测系统的功能为:检测并显示温湿度数据,设置报警点并报警,与上层监控设备通信。因此设计正是从这几个方面的要求出发,利用单片机本身的特点,来实现系统的功能。后期的探索设计,提升了系统的性能。红外遥控是为实现远距离无线控制,从工业测控的平安角度考虑;LCM显示是为显示更多字符,从系统的阅读便利、人性化角度考虑;数据存储器和实时时钟是为记录监测数据,从气象研究的角度考虑;照度检测是为满足某些特定场合的照明要求,从平安生产方面考虑。因此,探索设计从不同场合的实际要求出发,根据需要扩展系统的功能。由于第一次设计基于单片机的系统,虽然完成了根本的设计要求,但在设计过程中遇到了许多硬件和软件问题还没有完全解决;设计的过程也是模块式的,没有完整系统的总体规划;后期的探索设计只是从理论上进行了可行性分析,没有做出相应的硬件并调试符合预期设想。因此,以后还必须加强单片机系统设计的能力,毕业设计只是一个浅薄的入门。当然,在设计过程中,应虚心听取他人的建议和意见,对解决设计过程中的问题都很有帮助。展望未来,最终的系统应该为基于单片机的多功能环境检测系统,它不仅可以检测环境的温度、湿度、照度等所需的环境变量并显示在液晶屏幕上,可以根据设定的限值进行报警提示,可以以时间顺序存储大量的检测数据,并根据需要发送给上层分析处理设备,还可以用红外遥控实行远程无线控制,除此之外,电源系统可以适应各种供电场合,并存储局部电能,断电后确保系统可继续工作一定时间。参考文献[1]李瀚荪.简明电路分析.北京:高等教育出版社,2002[2]康光华.电子技术根底-模拟局部.北京:高等教育出版社,1979[3]康光华.电子技术根底-数字局部.北京:高等教育出版社,1980[4]马金龙.信号与系统.北京:科学出版社,2006[5]唐颖.单片机原理与应用.北京:北京大学出版社,2008[6]郑莉,董渊,张瑞丰.C++语言程序设计.北京:清华大学出版社,2004[7]唐文彦.传感器.北京:机械工业出版社,2010[8]陈尔绍等.电子控制电路实例.北京:电子工业出版社,2004[9]姜威.实用电子系统设计根底.北京:北京理工大学出版社,2008[10]毛兴武等.新型电子器件及其应用技术.北京:中国电力出版社,2010[11]孟贵华.电子元器件选用入门.北京:机械工业出版社,2004[12]黎小桃等.Protel99入门与提高.北京:电子工业出版社,2009[13]郭强.液晶显示模块应用与调试.北京:电子工业出版社,2010[14]陈涛.单片机应用及C51程序设计.北京:机械工业出版社,2008[15]钟睿.MCS-51单片机原理及应用开发技术.北京:中国铁道出版社,2006附录附1单片机驱动程序(1)主函数相关文档程序文件——Main.c#include"read_dht.h"#include"key_scan.h"#include"set_alarm.h"#include"send_function.h"#include"digitron_show.h"//主函数-报警设定或数据发送voidmain(){unsignedcharKey_Code;//开机进入温湿度显示报警状态Timer_Start_0();while(1){//扫描按键Key_Code=Key_Scan();switch(Key_Code){caseKey_R:Set_Alarm();break;//如果Key1键短按,那么进入报警设定状态caseKey_M:Send_Status();break;//如果Key1键长按,那么进入数据发送状态default:break;}}}(2)延时相关文档头文件——Delay.h#ifndef__DELAY_H__#define__DELAY_H__externvoidDelay_10us();externvoidDelay_ms(unsignedintms);#endif程序文件——Delay.c#include"intrins.h"//延时10微秒函数voidDelay_10us(){_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}//延时1毫秒函数voidDelay_ms(unsignedintms){unsignedcharTemp;while(ms--)for(Temp=0;Temp<120;Temp++);}(3)传感器相关文档头文件——Read_DHT.h#ifndef__HT_DETECTOR_H__#define__HT_DETECTOR_H__externunsignedcharHumidity;externunsignedcharTemperature;externvoidRead_DHT();#endif程序文件——Read_DHT.c#include"reg51.h"#include"delay.h"#include"intrins.h"#include"read_dht.h"//DHT连接端口sbitDHT=P1^1;//湿度数据存储变量unsignedcharHumidity=0;//温度数据存储变量unsignedcharTemperature=0;//临时接收数据数组unsignedcharDHT_Data[5];//8位串口数据接收函数unsignedcharRead_Com(){unsignedcharCom_Data=0x00,Temp_Data=0x00,Temp;for(Temp=0;Temp<8;Temp++){while(!DHT);//先出现低电平约12-14微秒,等待结束Delay_10us();//低电平结束后,先检测数据“0”时的高电平时间为26-28Delay_10us();Delay_10us();Temp_Data=0x00;if(DHT)Temp_Data=0x01;//如果数据“0”的高电平超时,那么转为数据“1”while(DHT);//等待高电平结束Com_Data<<=1;//因为高位数据先出,所以每接收一位数据必须把已接收数据向左移动一位Com_Data|=Temp_Data;//处理接收的一位数据,和已接收的数据按位相与,即加到最后一位上}returnCom_Data;//返回八位数据}voidRead_DHT(){DHT=0;//主机与DHT11通信开始,首先拉低总线Delay_ms(18);//延时至少为18毫秒DHT=1;//拉高总线电平40-50微秒Delay_10us();Delay_10us();Delay_10us();Delay_10us();DHT=1;//拉高电平,设置总线为输入状态if(!DHT)//如果DHT11响应,就开始处理数据{while(!DHT);//先等待DHT响应的低电平结束40-50微秒while(DHT);//再等待DHT响应的高电平结束40-50微秒,然后开始读取总线上DHT发送的五字节数据DHT_Data[0]=Read_Com();//接收湿度整数局部DHT_Data[1]=Read_Com();//接收湿度小数局部DHT_Data[2]=Read_Com();//接收温度整数局部DHT_Data[3]=Read_Com();//接收温度小数局部DHT_Data[4]=Read_Com();//接收校验位数据DHT=1;//数据接收完毕,拉高总线电平,为下一次通信做准备if(DHT_Data[0]+DHT_Data[1]+DHT_Data[2]+DHT_Data[3]==DHT_Data[4])//开始校验数据,前四个字节数据的和等于最后一字节开始校验数据,前四个字节数据的和等于最后一字节{Humidity=DHT_Data[0];//校验成功后,把获得的湿度数据赋值给湿度变量Temperature=DHT_Data[2];//把获得的温度数据赋值给温度变量}}(4)按键相关文档头文件——Key_Scan.h#ifndef__KEY_SCAN_H__#define__KEY_SCAN_H__#defineKey_M0x10#defineKey_R0x00#defineKey_U0x01#defineKey_D0x02externunsignedcharKey_Scan();#endif程序文件——Key_Scan.c#include"reg51.h

温馨提示

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

评论

0/150

提交评论