- 561.50 KB
- 2022-04-21 发布
- 1、本文档由用户上传,淘文库整理发布,可阅读全部内容。
- 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,请立即联系网站客服。
- 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细阅读内容确认后进行付费下载。
- 网站客服QQ:403074932
哈尔滨剑桥学院毕业设计论文题目:智能浇花控制系统n哈尔滨剑桥学院毕业设计审阅评语一、指导教师评语该生在整个毕业设计过程中,态度端正,积极主动,能基本在每个阶段完成相应任务,能按时上交论文,时间安排也十分合理。前期设计中出现的问题及误区,老师指点后都细心更改,每次遇到阻碍都及时主动与老师交流、沟通、讨论论文出现的问题。论文完成了任务书所规定的设计任务,论文层次结构安排科学,语言表达流畅准确,格式符合规范要求,达到预期结果,符合学士论文答辩的要求,同意该同学参加毕业答辩。是否同意答辩:同意答辩√不同意答辩□指导教师(签名)翟淑霞职称副教授2013年5月22日二、评阅人评语是否同意答辩:同意答辩□不同意答辩□评阅教师(签名)职称年月日哈尔滨剑桥学院n毕业设计答辩评语及成绩三、答辩委员会评语四、毕业设计成绩签字(盖章):五、答辩委员会主任单位:答辩委员会主任职称:答辩委员会主任签字:年月日哈尔滨剑桥学院n毕业设计任务书题目名称:智能浇花控制系统设计立题意义:随着科学的不断发展和人们生活水平的不断进步,人们对于生活质量的要求也越来越高,花草养殖成为了家庭生活中的一部分,人们养殖花草的目的大多是为了陶冶情操和提高室内外的空气质量等等,但由于工作繁忙等原因,不能按时给花草浇水成为了花卉死亡的主要原因;因此设计一款定时浇花的系统便成为当务之选。技术条件与要求:1.本产品实用性强。2.主要用于家庭和较小场所。3.本系统抗干扰能力强,感应灵敏、性价比较高。任务内容(包括内容、计划、时间安排、完成工作量与水平具体要求)一、任务内容:1.系统的总体设计方案。2.系统各部分硬件电路设计。3.系统各部分软件电路设计。二、计划、时间安排:2012年11月26日~~2013年4月7日选题、撰写阶段2013年4月8日~~5月12日中期检查阶段5月13日~~5月24日整理、答辩阶段5月25日毕业论文(设计)答辩三、完成工作量与水平具体要求按照计划进度、指导教师的要求完成预定的工作量、提高论文的设计水平。专业负责人意见:签名:年月日n智能浇花控制系统设计摘要随着科学的不断发展和人们生活水平的不断进步,人们对于生活质量的要求也越来越高,花草养殖成为了家庭生活中的一部分,人们养殖花草的目的大多是为了陶冶情操和提高室内外的空气质量等等,但由于工作繁忙等原因,不能按时给花草浇水成为了花卉死亡的主要原因。本文利用AT89C51单片机设计了一种自动浇花控制系统,此系统可为人们解决因工作等原因无法按时为花卉浇水的问题,以便于花卉茁壮成长。本设计采用汇编语言进行编程,在LED液晶屏上实现小时,分,秒的显示;并利用单片机来实现计时,定时功能,同时通过7个按键开关和3个指示灯来实现参数设置和调节功能、浇花间隔时间的设定、浇水持续时间的设定、单片机对电磁阀的自动控制。根据用户设定的时间顺利的完成浇花任务。关键词:单片机;控制;显示;电磁阀IVIVnIntelligentcontrolsystemforwateringtheflowersAbstractWiththecontinuousdevelopmentofscienceandthepeoplelifelevelofprogress,peoplefortherequirementsofthelifequalityismoreandmorerigorous,plantsbreedingbecomepartofthefamilylife.Thepurposesofpeoplebreedingplantsarefortheedifysentimentandimprovetheindoorandoutdoorairqualityandsoon.Becauseofthebusyjobsandotherfactors,theinabilitytowatertheflowersandplantsbecomethemaincauseofdeath.Inthispaper,AT89C51single-chipmicrocomputerdesignedakindofautomaticwateringtheflowerscontrolsystem.Thesystemcanworkforpeoplewhocannotwatertheflowersontime,sothattheflowerscangrowstrengthandhealthy.Thisdesignusestheassemblylanguagesprogramming,realizinghours,points,seconddisplayonLED;Andusingsinglechipcomputertorealizethetiming,timingfunction,andatthesametimethroughsevenbuttonswitchesandthreeindicatortoachieveparametersettingandadjustmentfunction,thewatertheflowersoftheintervaltimeset,thedurationofwaterwiththechipset,solenoidvalvetobeautomaticcontrol.Accordingtouserssettingtimedonesmoothlythetaskofwateringtheflowers.Keywords:MCS;control;display;solenoidvalveIVIVn目录摘要IAbstractII1.绪论12.系统设计方案32.1系统工作原理32.2系统方框图设计32.3系统结构32.3.1单片机模块42.3.2显示模块42.3.3电磁阀模块42.3.4按键模块42.3.5指示灯模块42.3.6复位电路模块42.4系统人机界面设计52.5系统操作步骤63.关键器件的选型73.1单片机的选择73.1.1AT89C51简介73.1.2AT89C51的主要性能73.1.3AT89C51的管脚说明83.2继电器的选择103.3电磁阀的选择103.4显示器的选择114.硬件电路设计124.1单片机最小系统124.1.1晶振电路设计124.1.2复位电路124.1.3单片机最小系统电路设计13IVIVn4.2按键电路设计144.3数码管显示电路设计154.4电磁阀电路设计164.5整体电路设计175.系统软件设计185.1软件架构设计185.2主程序185.2初始化模块195.3按键判别与处理模块215.4按键消抖方法225.5数码显示模块235.6工作时间计算模块25结论26致谢27参考文献28附录29IVIVn哈尔滨剑桥学院毕业设计智能浇花控制系统设计1.绪论近年来,人们的生活水平有了大幅度的提高,然后如何真正提高生活质量,如何使生活产生质的飞跃成为了大多数人们思考的问题。种植花草是中国人千百年来的维持不变的喜好,故多数人选择种植花草来陶冶情操,同时,也把它作为一项业余的消遣活动,但由于人们生活节奏快和经常出差等缘故,不能按时为花草浇水成为了花草死亡的主要原因。为了解决按时为花草浇水的问题,人们会采取在手机中存备忘录以及做各种备忘录等方法,但这些方法始终存在很多缺陷,市场上的智能浇花系统仪器功能繁多但是价格过于昂贵,而且对于普通家庭而言,过于复杂的应用和多功能是不必要的。智能浇花系统的出现正可以解决这一问题,该系统其主要执行装置是一个电磁阀门,其一端连接水管,另外一端连接外置的水管作为浇水口,浇水的水量主要由单片机控制。设备主要是通过控制浇水的时间间隔和浇水的持续时间来控制浇水量的。操作方便简便,这样即实现了家庭生活的现代化又保证了植物的正常生长。近年来,以电子技术为代表的新技术促进了电子行业的飞速增长,也极大地推动了智能家电和智能家用设备的快速发展。国外的智能家用设备市场俨然已经做大做强,鉴于中国在全球制造链和设计链的重要地位,使得这里成为全球各大生产智能家用设备厂商逐鹿的大战场,同时,也带动了中国本土智能家用设备仪器研发与测试技术应用的迅速发展。智能浇花控制系统自然也包括在其中,近些年来,国内外出现了许多种智能浇花控制系统,其功能与控制原理也存在着许多的不同,但根本目的均为方便人们的日常生活和保证花草的正常生长。众所周知,在二十世纪,人类跨越了三个“电”的时代,即电气时代、电子时代和电脑时代。但这种电脑,通常指个人计算机,也就是我们平时所说的PC机。它由主机、显示器、键盘等组成。除此之外还有一类计算机,大多数人很不熟悉。这种计算机就是把智能赋予给各种机械的单片机(微控制器)。这种计算机最小的系统只用一片2828n哈尔滨剑桥学院毕业设计集成电路,就能进行简单运算和控制。因为其体积小,通常都被放在被控机械的“肚子”里。在整个装置中,他的作用有如人类头脑,若它出了毛病,整个装置也就瘫痪了。现如今,这种单片机的使用领域已发展的十分广泛,如智能仪表、导航系统、实时工控、通讯设备、家用电器等。各种家用产品用上了单片机以后,便能起到令产品换代升级的功效,通常都会在产品名称前加上形容词——“智能型”,例如智能型洗衣机等等。而花卉养殖作为大多数人生活中的一部分,却常常因为人们工作等原因被忽略,智能浇花控制系统可为人们解决这一问题,与此同时,智能浇花控制系统若能走进家庭,也是人们生活进入智能化的标志之一。2828n哈尔滨剑桥学院毕业设计2.系统设计方案2.1系统工作原理智能浇花控制系统的设计,其主要执行装置是一个电磁阀门,其一端连接水管,另外一端连接外置的水管作为浇水口,浇水的水量主要由单片机控制。设备主要是通过控制浇水的时间间隔和浇水的持续时间来控制浇水量的[1]。2.2系统方框图设计系统主要是由单片机、电源、按键、显示、指示灯、复位电路、电磁阀模块等组成。方框图如图2-1所示:复位电路模块电磁阀模块显示模块指示灯模块单片机模块按键模块电源模块图2-1系统方框图2.3系统结构整个自动浇花设备的结构可以分为5大部分:中央处理单元(CPU),LED显示部分,电磁阀部分,按键部分,指示灯部分等。2828n哈尔滨剑桥学院毕业设计2.3.1单片机模块单片机模块对整个系统进行控制,实现以下功能:(1)控制显示模块显示工作参数;(2)根据按键的输入做出正确的计算,并传输到显示器件上实现时间的调整设置;(3)控制LED的点亮和熄灭;(4)实现电磁阀的控制。2.3.2显示模块数码显示模块能够将需要的时间参数显示出来,提供了系统和操作者的交流窗口,是人机界面的重要组成部分之一。2.3.3电磁阀模块电磁阀是本设备的执行设备,系统通过电磁阀控制水的流通和截止,实现了电能到机械能的转换。2.3.4按键模块按键是人机界面的另一个重要组成部分,它是最主要的输入设备。用户通过按键将自己的要求告知单片机,单片机根据用户的设置进行相应的操作。2.3.5指示灯模块指示灯是数码显示模块以外的另一输出设备,在数码管的基础上起到辅助作用。2.3.6复位电路模块复位模块主要功能为在上电的一瞬间,电压不是直接跳变到单片机可工作的电压范围。并且在外部输入电压较低的时候(电压在临界范围),这个时候单片机可能工作也可能不工作,故而会引起芯片内程序道德无序执行,复位电路需要确保在上电的时候暂时不让单片机立刻进入工作状态,即上电延时状态。2.4系统人机界面设计操作界面如图2-2所示,主要由2位数码管、7个按键和3个发光二级管组成。图中各部分介绍如下:数码管:用于显示工作持续时间和时间间隔,配合按键完成各项参数的设置。LED1:电源指示灯,当通电以后就亮起,说明系统已经开始工作。2828n哈尔滨剑桥学院毕业设计LED2和LED3:参数指示灯。当LED2亮起以后,说明目前数码管上显示的是工作间隔时间,可以通过按键对其设置。当LED3亮起时,说明目前显示的是工作持续时间。ON/OFF:电源开关,按下后电源指示灯LED1点亮,系统开始工作。RESET:系统复位。当遇到意外情况系统出现死机,可通过此按键恢复正常工作。SWITCH:用于切换工作间隔时间和工作持续时间,按下以后LED2和LED3将依次点亮。UP和DOWN:增加和减少数码管所显示数字的值。OK:确定键,当用户使用UP和DOWN键设置好时间以后,按下OK键进行保存和应用。CLEAR:清零键,可通过此按键将当前数码管示数快速清零,重新进行设置。ON/OFFRESETOKDOWNUPCLEARSWITCHLED1LED2LED3图2-2操作人机界面2.5系统操作步骤(1)将入水管连接到自来水龙头和电磁阀之间,用出水管连接电磁阀和花盆,这个过程中注意水管的密封性,也不要让水溅到电路板上。(2)将控制系统通电,按下电源开关ON/OFF,LED1亮,表示一切正常。(3)按下SWITCH键,LED2点亮,通过UP和DOWN设置工作间隔时间。按下CLEAR可清零。2828n哈尔滨剑桥学院毕业设计(1)按下SWITCH键,LED2熄灭,LED3点亮,通过UP和DOWN设置工作持续时间,按下CLEAR可清零。(2)按下OK键,LED3熄灭,系统按照设定的参数开始工作。2828n哈尔滨剑桥学院毕业设计3.关键器件的选型3.1单片机的选择AT89C51单片机是Atmel公司推出的一款产品,一般小芯片的价格都比较低,同样AT89C51作为一款小芯片产品其价格相对而言较为便宜,并且其与MCS-51系列兼容行很好,所以本系统决定采用AT89C51作为芯片[2]。3.1.1AT89C51简介AT89C51是一种带4K字节FLASH存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C5x单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案[3]。3.1.2AT89C51的主要性能(1)与MCS-51兼容;(2)4K字节可编程FLASH存储器;(3)寿命:1000写/擦循环;(4)数据保留时间:10年;(5)全静态工作:0Hz-24MHz;(6)三级程序存储器锁定;(7)128×8位内部RAM;(8)32可编程I/O线;(9)两个16位定时器/计数器;(10)5个中断源;(11)可编程串行通道;(12)低功耗的闲置和掉电模式;2828n哈尔滨剑桥学院毕业设计(13)片内振荡器和时钟电路。3.1.3AT89C51的管脚说明AT89C51的引脚图如图3-1所示。图3-1AT89C51的引脚图VCC:供电电压。GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P0口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的低八位。在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须接上拉电阻。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为低八位地址接收。2828n哈尔滨剑桥学院毕业设计P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号[4]。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL),这是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口,如下表所示:表3-2P3管脚第二功能表P3口管脚备选功能P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2INT0(外部中断0)P3.3INT1(外部中断1)P3.4T0(计时器0外部输入)P3.5T1(计时器1外部输入)P3.6/WR(外部数据存储器写选通)P3.7/RD(外部数据存储器读选通)RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。 /PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。2828n哈尔滨剑桥学院毕业设计/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。3.2继电器的选择继电器是一种电控制器件。它具有控制系统(又称输入回路)和被控制系统(又称输出回路)之间的互动关系。通常应用于自动化的控制电路中,它实际上是用小电流去控制大电流运作的一种“自动开关”。故在电路中起着自动调节、安全保护、转换电路等作用。本次设计过程中需要一个继电器来控制电磁阀的工作。由于需要工作电压在5V左右。所以选择了型号为JZC-36F的继电器,其工作电压在4V~45V之间[5]。3.3电磁阀的选择阀门是在流体系统中,用来控制流体的方向、压力、流量的装置。阀门是使配管和设备内的介质(液体、气体、粉末)流动或停止并能控制其流量的装置。阀门是管路流体输送系统中控制部件,它是用来改变通路断面和介质流动方向,具有导流、截止、节流、止回、分流或溢流卸压等功能。用于流体控制的阀门,从最简单的截止阀到极为复杂的自控系统中所用的各种阀门,其品种和规格相当繁多。由于本设备采用单片机控制,并且电磁阀是由开关信号控制的,与单片机控制电路连接十分的方便,所以决定采用电磁阀作为阀门[6]。电磁阀从原理上分为三大类:(1)直动式电磁阀: 原理:通电时,电磁线圈产生电磁力把关闭件从阀座上提起,阀门打开;断电时,电磁力消失,弹簧把关闭件压在阀座上,阀门关闭。特点:在真空、负压、零压时能正常工作,但通径一般不超过25mm。(2)分步直动式电磁阀:原理:它是一种直动和先导式相结合的原理,当入口与出口没有压差时,通电后,电磁力直接把先导小阀和主阀关闭件依次向上提起,阀门打开。当入口与出口达到启动压差时,通电后,电磁力先导小阀,主阀下腔压力上升2828n哈尔滨剑桥学院毕业设计,上腔压力下降,从而利用压差把主阀向上推开;断电时,先导阀利用弹簧力或介质压力推动关闭件,向下移动,使阀门关闭。特点:在零压差或真空、高压时亦可动作,但功率较大,要求必须水平安装。(1)先导式电磁阀:原理:通电时,电磁力把先导孔打开,上腔室压力迅速下降,在关闭件周围形成上低下高的压差,流体压力推动关闭件向上移动,阀门打开;断电时,弹簧力把先导孔关闭,入口压力通过旁通孔迅速腔室在关阀件周围形成下低上高的压差,流体压力推动关闭件向下移动,关闭阀门。 特点:流体压力范围上限较高,可任意安装(需定制)但必须满足流体压差条件。由于直动式电磁阀结构较为简单,动作可靠,而且设备需要在断电条件下铁芯始终保持在关闭状态,所以选用常闭型的直动式电磁阀。具体为YCSM31系列的二位二通直动式电磁阀(常闭型)。3.4显示器的选择在显示器的选择上,虽然LED数码管消耗电力比液晶显示器多一点,但是LED数码管显示更加清晰,更加适合在白天等强光条件下显示。液晶显示极其省电,但是使用有温度范围限制,且因是反光式的,在外界光线很明亮的情况下很容易看不清楚。另外,LED数码管的价格与液晶显示器相比较为低廉,故本次设计采用LED数码管[7]。2828n哈尔滨剑桥学院毕业设计4.硬件电路设计4.1单片机最小系统4.1.1晶振电路设计AT89C51单片机芯片内部设有一个反相放大器所构成的振荡器,XTAL1和XTAL2分别为振荡电路的输入端和输出端。在XTAL1和XTAL2引脚上外接定时元件,内部振荡电路就产生自激振荡。定时元件常常是用石英晶体和电容组成的并联谐振回路。系统选择了12MHz的晶振片,两个30pF的电容C7和C8。晶振电路如图4-1所示。图4-1晶振电路4.1.2复位电路本设计采用的按键复位电路,当要系统自动复位时,只需要按住S7按键,此时电源Vcc经过电阻R1、R2分压,并且在RST端产生一个复位的高电平。同样,只要保证RST端保持高电压的时间大于两个机器周期时,系统自动能实现正常复位。复位电路如图4-2所示:2828n哈尔滨剑桥学院毕业设计图4-2AT89C51单片机的复位电路4.1.3单片机最小系统电路设计单片机最小系统设计电路如图4-3所示:图4-3单片机最小系统2828n哈尔滨剑桥学院毕业设计如图所示,AT89C5单片机的RST引脚连接复位电路,P2.7引脚连接电磁阀电路,P1.0~P1.7引脚连接按键电路,XTAL1和XTAL2引脚连接晶振电路,P2.0和P2.1引脚连接指示灯电路,P2.5~P2.7引脚连接放大电路则与P0.0~P0.7引脚一起控制LED显示电路[8]。4.2按键电路设计系统采用非编码键盘,按键电路主要由5个按键S1~S5组成,采用独立式的按键形式。各按键的功能见表4-4:表4-4按键功能对照表按键编号功能连接端口S1SWITCHP1.1S2UPP1.2S3DOWNP1.3S4CLEARP1.4S5OKP1.5按键电路如图4-5所示,按照图中的电路连接方法,判断是否有键按下的方法是:查询每一根接按键的I/O口线的输入电平,如果是低电平则说明这个接口线连接的按键处于按下状态。相反,若为高电平则说明按键处于非按下状态。图4-5按键电路4.3数码管显示电路设计系统采用两个七段发光数码显示器HS-3461BS2,HS-3461BS2它是共阳极的数码显示器。2828n哈尔滨剑桥学院毕业设计处于工作状态的数码管,其显示情况由单片机的P0.0~P0.6七个接线口决定,其七个口分别连接着数码管的七个笔画。例如要在数码管DS1中显示1,而数码管DS2处于非工作状态,则需要将P2.6接线口置为1,P2.5接线口置为0,并且使P0.1和P0.2接线口置为1,而P0.0,P0.3~P0.6接线口置为0。字形段码表如表4-6所示:表4-6数码管段码表显示字符共阴极字型码五班03FHC0H106HF9H25BHA4H34FHB0H466H99H56DH92H67DH82H707HF8H87FH80H96FH90H根据上面的7段字形码表可以进行编码,从而控制数码管的显示。LED显示电路如图4-7所示图4-7数码管显示电路2828n哈尔滨剑桥学院毕业设计4.4电磁阀电路设计如下图所示Q3为一个PNP三极管,D1为普通二极管,K1为JZC-36F继电器,M电动机符号来表示电磁阀。在继电器失电的状态下,动合触点断开,动断触点闭合,当继电器得电后,动合触点闭合,动断触点断开,利用继电器的触电开关作用可以控制设备或者传送逻辑电平信号。动合触点是指继电器(或功能电器)中有预定激励时闭合,无激励时断开的触点,而动断触点则是继电器(或功能电器)中有规定的激励时断开,无规定的激励时闭合的触点。在本次系统设计中选用了动合触电开关,使继电器在失电状态下保持断开的状态,然而在得电的状态下保持闭合状态。即当Q3基极得到一个低电平则继电器开关立即闭合,在处于高电平时继电器开关保持断开状态[9]。当继电器的开关闭合时,电磁阀则处于一个通路的状态下,进而电磁阀开始工作,系统设备开始浇水。相反,当继电器的开关断开时,电磁阀处于一个断路的状态下,则电磁阀不工作,从而系统设备也不工作。电磁阀电路如图4-8所示。图4-8电磁阀电路4.5整体电路设计总电路主要由:晶振电路,复位电路,按键设置电路,LED显示电路,电磁阀电路,以及电源电路等几个部分。通过这几个分电路的分工合作,能够使得系统具有显示功能,2828n哈尔滨剑桥学院毕业设计并且具备键盘调整功能,同时能够对电磁阀进行有效的控制。从而使设备顺利的进行工作。整体电路图见附录1。2828n哈尔滨剑桥学院毕业设计5.系统软件设计5.1软件架构设计在编写程序代码之前,必须先对系统通盘考虑,事先设计好系统的软件架构。软件架构是指在一定的设计原则基础上,从不同角度对组成系统的各部分进行搭配和安排,形成系统的多个结构而组成架构,它包括该系统的各个组件,组件的外部可见属性及组件之间的相互关系。对本系统而言,就是要设计好每一个功能最合理的实现方法,不要等到代码写到一半才发现某个功能难以实现,导致全部重写或是迫不得已采用有隐患的的实现方法。一般而言,软件架构设计要达到如下的目标:可靠性(Reliable)、安全性(Secure)、可扩展性(SCAlable)、可定制化(CuSTomizable)、可扩展性(Extensible)和可维护性(MAIntainable)等[10]。在本系统中,主要的部分有按键处理、数码管的动态显示和工作时间的计算。这三个任务都是必须连续工作的。如果按键处理相关程序暂停运行,用户按下按键时就没有反应;如果数码管相关的程序暂停运行,显示的数字就会出现异常。为了实现系统软件架构要求的目标(主要是可靠性、可扩展性和可维护性),采用了这样的软件结构:在主程序中读取按键输入以及进行相应按键的处理;用定时器TIMER0定时出发中断,在定时器的终端服务程序中进行数码管的动态扫描显示;另一个定时器TIMER1用来计算工作间隔时间和工作持续时间。5.1.1主程序主程序指的是单片机上电以后就开始运行的程序,与中断服务程序相区分。主程序进行了两个操作,首先对系统进行初始化设置,然后进入一个循环结构,扫描按键是否被按下,当有键按下以后就执行相应的按键处理程序[11]。流程图见图5-1。单片机复位以后(无论上电复位还是按键复位)将从程序存储器的0000H地址开始运行程序。在这里必须写一条跳转指令,引导程序跳转到主程序的起始地址。为了使程序更清晰,提高可读性,采用了模块化的思想来指导程序的编写。也就是将各功能封装成子程序,在使用时直接调用。2828n哈尔滨剑桥学院毕业设计在主程序中调用了两个子程序,分别是初始化子程序和按键判别与处理子程序,在接下来的几节中将会依次介绍。图5-1主程序流程图程序开始初始化按键判别与处理程序结束5.2初始化模块在本系统中,初始化的操作要实现两个目标,一是对单片机本身的特殊功能寄存器(ISR)进行赋值,是单片机内部集成的各功能正常工作,比如定时器;二是对单片机外围的输出设备的状态进行设置,防止出现不希望的输出,比如电磁阀控制的水管。单片机内部的设置主要集中在定时器相关的寄存器。将定时器0设为10ms溢出一次,用于数码管的动态显示;定时器1也设为10ms溢出一次,通过软件计100个数实现1秒的定时时间[12]。外部设备方面,电磁阀驱动端口P2.7需要设为高电平,让电磁阀不通电,保持关闭状态;LED2驱动端口P2.0设为高电平,让其点亮;LED3驱动端口P2.1要设为低电平,让它不亮;数码管段码选择端口P0设为0C0H,让其显示“00”,稍后将由定时器0中断控制它显示正确的数字;按键输入端口P1.1~P1.2均设为高电平,否则将无法正确读取按键状态。初始化子程序见附录二。初始化子程序流程图见5-2。2828n哈尔滨剑桥学院毕业设计图5-2初始化子程序流程图程序开始配置定时器0寄存器配置定时器1寄存器输入端口设为高电平设置LED2亮LED3灭数码管显示“00”设置电磁阀关闭程序结束2828n哈尔滨剑桥学院毕业设计5.3按键判别与处理模块P1.1=0?P1.2=0?P1.3=0?P1.5=0?P1.4=0?程序开始读取P1消抖处理程序结束切换显示当前数加1当前数减1当前数=0保存数值YYYYYNNNNN图5-3按键判别处理子程序流程图2828n哈尔滨剑桥学院毕业设计上图5-3按键判别处理子程序流程图在这个子程序内,首先读取P1口的输入状态,经过消抖处理以后依次判断P1.1~P1.5的电平是否由1变为0,哪一位变为0了,就说明其对应的按键已经被按下,可以跳转到相应的按键处理程序。按键具体的操作连锁关系如下[12]:1.当指示灯LED2亮,数码管1选中时,经过“UP”,“DOWN”调节按键调节过的显示数字存储与(41)H,其相应的P0值存储与(40)H。2.当指示灯LED2亮起,数码管2选中时,经过“UP”,“DOWN”调节按键调节过的显示数字存储与(61)H,其相应的P0值存储与(61)H。3.当指示灯LED3亮起,数码管1选中时,经过“UP”,“DOWN”调节按键调节过的显示数字存储与(51)H,其相应的P0值存储与(51)H。4.当指示灯LED3亮起,数码管2选中时,经过“UP”,“DOWN”调节按键调节过的显示数字存储与(71)H,其相应的P0值存储与(71)H。5.4按键消抖方法为了确保CPU对一次按键动作只确定一次,系统采用软件消除抖动的方法。具体为:若CPU检测到有键按下时,先执行一段延时程序后再检测此按键,若仍为按下状态,则CPU认为此按键确实按下。同样,在键从按下到再次松开时,若CPU检测到有键松开,并在延时一段时间后仍检测到键在松开状态,则认为此键确实松开了[13]。消抖流程图如图5-4所示。2828n哈尔滨剑桥学院毕业设计主程序开始读键盘有键按下否?用延时程序确定键是否按下键按下是否有效?按键处理初始化NNYY图5-4按键消抖方法流程图5.5数码显示模块数码管显示程序是基于定时器0的中断功能实现的。定时器溢出时间是10ms,每次溢出中断选中一位数字,下一次中断再选中另一位数字。有研究证实,当图画变换速度大于每秒24帧以后,人眼就看不出闪烁[14]。按照刚才的计算,数码管刷新的速度是每秒50帧,大大超过24帧的最低限度,所以肉眼看不出扫描时的闪烁。2828n哈尔滨剑桥学院毕业设计在用按键修改工作参数后,将参数存入一个指定的内存地址单元,在定时器0中断中,读取这个单元内的数据并显示出来。程序开始i=0?选中十位i=1P0输出十位数码i=0P0输出个位断码选中个位程序结束NY图5-5数码管显示程序(定时器0中断服务程序)流程图5.6工作时间计算模块2828n哈尔滨剑桥学院毕业设计工作间隔时间的计算是基于定时器1的中断功能实现的。定时器1的溢出时间为10ms,当溢出100次以后,即为1秒。每次计数达到一秒,就将预存的工作间隔时间减去1秒,当工作间隔时间减到0时,说明已经到了浇花时间,开启继电器,让水流通[15]。图5-6工作时间计算程序(定时器1中断服务程序)流程图程序开始i=i+1i>=100?i=0间隔时间减1秒间隔时间=0?开始浇花程序结束NNYY2828n哈尔滨剑桥学院毕业设计结论本次毕业论文所设计的智能浇花控制系统的主要特点为系统的两大功能,即定时浇花和定量浇花,系统的主要控制器件为AT89C51单片机、继电器、电磁阀以及LED数码管,通过软硬件的共同控制,完成浇水过程。通过本次毕业设计,让我进一步了解了微电脑控制的智能系统,更扎实关于单片机AT89C51的相关知识。也使我真正接触到了检测控制系统的设计,让我了解到设计中不仅要考虑到技术方面的问题,还有实用性、实际操作性等很多细节需要注意。通过对智能浇花系统的设计,我摆脱了单纯的理论知识学习状态,理论和实际的结合锻炼了我综合运用所学的专业基础知识来解决实际工程问题的能力,同时也提高我查阅文献资料、设计手册以及电脑制图等专业能力水平,而且通过对整体的掌控,对局部的取舍,以及对细节的斟酌处理,都使我的能力得到了锻炼。在我的设计中也许还有好多不足的地方,但是正是这些不足才给了我们研究单片机的巨大动力,只有发现问题,面对问题,才有可能解决问题,不足和遗憾不会给我打击只会更好的鞭策我前行,今后我会更加关注这些新技术新设备,并争取尽快的掌握这些先进的技术知识,更好的为自己努力,为自己奋斗。2828n哈尔滨剑桥学院毕业设计致谢通过这一阶段的努力,我的毕业论文终于完成了。论文的顺利完成,我要由衷地感激翟淑霞老师。在整个设计期间,翟老师倾注了大量的时间和精力,从论文选题、开展调研到论文的软硬件设计阶段一直给予指导与启发,并为我提供了许多有用的想法和设计思路,在我写作论文的过程中,翟老师给我提供了许多资料,并对电路设计中出现的问题给予耐心解答,完稿之后在百忙之中仔细阅读,给出修改意见,在此对她表示感谢。与此同时,还要感谢身边的同学们对我的帮助,在我写本论文的过程中,他们给予我大量的指导和建议,对我不解的地方进行耐心的讲解,我才能顺利的完成论文的写作。2828n哈尔滨剑桥学院毕业设计参考文献[1]郭天祥.51单片机C语言教程——入门、提高、开发、拓展全攻略[M].北京:电子工业出版社,2009:67-87.[2]王玉凤,刘湘黔.电子设计从零开始[M].北京:清华大学出版社,2010:123-134.[3]谭浩强.C程序设计教程学习辅导[M].北京:清华大学出版社,2011:23-26.[4]童诗白.模拟电子技术基础[M].成都:高等教育出版社,2010:45-48.[5]赵克中.磁力驱动技术与设备[M].北京:化学工业出版社,2008:134-156.[6]林伸茂.8051单片机彻底研究[M].北京:中国电力出版社,2007:56-67.[7]吴磊.8051微控制器[M].北京:清华大学出版社,2008:98-111.[8]郭英涛.LCD背光驱动电路与应用实例[M].北京:人民邮电出版社,2009:245-256.[9]张炜.LCD驱动电路、驱动程序与典型应用[M].北京:人民邮电出版社,2009:256-265.[10]SDGroup.SDMemoryCardSpecifications[Z].USA:TechnicalCommitteeSDAssociation,2008:456-467.[11]Teayon.HardwareWhitePaper[Z].USA:MicrosoftCorporation,2011:46-57.[12]张琳.调节阀的应用[M].北京:化学工业出版社,2009:76-89.[13]徐贤.新一代绿色光源LED及其应用技术[M].北京:人民邮电出版社,2009:47-76.[14]崔雪莉.单片机原理及应用[M].北京:电子工业出版社,2010:36-48.[15]唐绪军.报业经济与报业经营[M].北京:新华出版社,1999:117-121. 2828n附录附录1整体电路图44n附录2浇花程序#include#include//内部函数,包含_nop_()空函数指令#defineucharunsignedchar#defineuintunsignedintsbitRS=P1^0;//定义LCD模块控制引脚sbitRW=P1^1;sbitE=P1^2;#defineDataPortP2//定义LCD模块数据端口#defineBusy0x80//忙标志,D7位为1说明忙ucharXpos;//列方向地址指针ucharYpos;//行方向地址指针//以下是短延时函数voidDelay5Ms(void){uinti=5552;while(i--);}voidDelay400Ms(void){unsignedcharTempCycA=5;unsignedintTempCycB;while(TempCycA--){TempCycB=7269;while(TempCycB--);};}//以下是读忙状态函数//功能:在正常读写操作之前检测LCD模块的忙状态,44n//D7=0:LCD控制器空闲;D7=1:LCD控制器忙voidCheckBusy(void){DataPort=0xff;//P1口写1RS=0;//选择指令寄存器RW=1;//选择读模式_nop_();E=1;//使能LCD_nop_();_nop_();while(DataPort&Busy);//若D7=1,则DataPort&Busy=1,说明忙,等待E=0;//若D7=0,说明不忙,令E=0}//以下是写入IR寄存器命令函数//功能:向LCD模块写入命令字符CMD//若AttribC=1检测忙信号,若AttribC=0不检测忙信号voidWriteIR(ucharCMD,ucharAttribC){if(AttribC)CheckBusy();//若AttribC=1,则检测忙信号,否则,顺序执行RS=0;//选择指令寄存器RW=0;//选择写模式_nop_();DataPort=CMD;//将命令送数据端口_nop_();E=1;//使能LCD_nop_();_nop_();E=0;//禁止LCD}44n//以下是写入DDR寄存器函数//功能:在当前光标位置显示一个字符voidWriteDDR(charc){CheckBusy();//检测忙信号RS=1;//选择数据寄存器RW=0;//选择写模式_nop_();DataPort=c;//将显示字符送往数据口_nop_();E=1;//写使能_nop_();_nop_();E=0;//禁止LCD}//以下是光标定位函数voidLcdPos(ucharXpos,ucharYpos){uchartmp;//定义tmp为指令码Xpos&=0x0f;//16xx型液晶的范围是0~15Ypos&=0x01;//Y的范围是0~1tmp=Xpos;if(Ypos==1)tmp|=0xc0;//若Ypos为1(显示第2行),地址码+0xc0tmp|=0x80;//若Ypos为0(显示第1行),地址码+0x80WriteIR(tmp,0);}//以下是初始化函数//功能:向LCD模块写入不同命令,完成必要的初始化过程voidLcdReset(void)44n{Delay400Ms();WriteIR(0x30,0);//设为8位接口模式,显示2行字符,busy=0不检测忙信号Delay5Ms();WriteIR(0x30,0);Delay5Ms();WriteIR(0x30,0);Delay5Ms();WriteIR(0x30,1);//设置显示模式(以后均检测忙信号)WriteIR(0x08,1);//显示开关控制指令,显示关闭WriteIR(0x01,1);//清屏指令,将DDRAM数据全部填入"空白"WriteIR(0x06,1);//输入方式设置指令,字符不动,光标自动右移一格WriteIR(0x0f,1);//显示开关控制指令,显示器开,光标开,光标闪烁}//以下是在指定行列显示字符函数voidWriteChar(ucharXpos,ucharYpos,charc){LcdPos(Xpos,Ypos);WriteDDR(c);}//以下是显示字符串函数voidWriteString(ucharXpos,ucharYpos,chars[]){ucharp=0;for(;;){WriteChar(Xpos,Ypos,s[p]);p++;if(s[p]==0)break;44nif(++Xpos>=15)//每行最多显示16个字符{Xpos=0;//如果一行显示不完,则转到下一行或上一行的第一个字符Ypos^=1;}//如果一行显示不完,则转到下一行或上一行显示}}/**************************************************************************************///Filename:SHT10.c//Author:ChenFen//Date:2008-8-26//SHT10数字温湿度传感器的读写程序/**************************************************************************************/#include#defineuintunsignedintucharwendu,shidu,air,wendugao,wendudi,shidugao,shidudi,Mgao,Mdi;//定义要发送的温度和湿度空气质量/*********************************************************//*********************************************************//************SHT10模块********************************//*********************************************************//*********************************************************///SHT10interfacesbitSCK=P3^4;//defineclockinterfacesbitDATA=P3^0;//definedatainterface44nsbittem=P1^3;sbitwet=P1^4;sbitset=P1^5;sbitadd=P1^6;sbitsub=P1^7;typedefunion{unsignedinti;//definetwounionfloatf;}value;enum{TEMP,HUMI};//TEMP=0,HUMI=1#definenoACK0//用于判断是否结束通讯#defineACK1//结束数据传输//adrcommandr/w#defineSTATUS_REG_W0x06//00000110#defineSTATUS_REG_R0x07//00000111#defineMEASURE_TEMP0x03//00000011#defineMEASURE_HUMI0x05//00000101#defineRESET0x1e//00011110voids_transstart(void);//启动传输函数voids_connectionreset(void);//连接复位函数chars_write_byte(ucharvalue);//DHT90写函数chars_read_byte(ucharack);//DHT90读函数chars_measure(uchar*p_value,uchar*p_checksum,ucharmode);//测量温湿度函数voidcalc_dht90(float*p_humidity,float*p_temperature);//温湿度补偿voidGet_TH();/**************************************************************************************/voidGet_TH()44n{valuehumi_val,temp_val;ucharerror,checksum;s_connectionreset();error=0;error+=s_measure((uchar*)&humi_val.i,&checksum,HUMI);//measurehumidityerror+=s_measure((uchar*)&temp_val.i,&checksum,TEMP);//measuretemperatureif(error!=0)s_connectionreset();//incaseofanerror:connectionresetelse{humi_val.f=(float)humi_val.i;//convertsintegertofloattemp_val.f=(float)temp_val.i;//convertsintegertofloatcalc_dht90(&humi_val.f,&temp_val.f);//calculatehumidity,temperaturewendu=temp_val.f;shidu=humi_val.f;}}/*********************************************************/voids_transstart(void)//generatesatransmissionstart//DATA://SCK:{DATA=1;SCK=0;//Initialstate_nop_();SCK=1;44n_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:{uchari;DATA=1;SCK=0;//Initialstatefor(i=0;i<9;i++)//9SCKcycles{SCK=1;SCK=0;}s_transstart();//transmissionstart}/*********************************************************/chars_write_byte(ucharvalue)//writesabyteontheSensibusandcheckstheacknowledge44n{uchari,error=0;for(i=0x80;i>0;i/=2)//shiftbitformasking{if(i&value)DATA=1;//maskingvaluewithi,writetoSENSI-BUSelseDATA=0;SCK=1;//clkforSENSI-BUS_nop_();_nop_();_nop_();//pulswithapprox.5usSCK=0;}DATA=1;//releaseDATA-lineSCK=1;//clk#9forackerror=DATA;//checkack(DATAwillbepulleddownbyDHT90),DATA在第9个上升沿将被DHT90自动下拉为低电平。_nop_();_nop_();_nop_();SCK=0;DATA=1;//releaseDATA-linereturnerror;//error=1incaseofnoacknowledge//返回:0成功,1失败}/*********************************************************/chars_read_byte(ucharack)//readsabyteformtheSensibusandgivesanacknowledgeincaseof"ack=1"{uchari,val=0;DATA=1;//releaseDATA-linefor(i=0x80;i>0;i/=2)//shiftbitformasking{SCK=1;//clkforSENSI-BUSif(DATA)val=(val|i);//readbit44n_nop_();_nop_();_nop_();//pulswithapprox.5usSCK=0;}if(ack==1)DATA=0;//incaseof"ack==1"pulldownDATA-LineelseDATA=1;//如果是校验(ack==0),读取完后结束通讯_nop_();_nop_();_nop_();//pulswithapprox.5usSCK=1;//clk#9forack_nop_();_nop_();_nop_();//pulswithapprox.5usSCK=0;_nop_();_nop_();_nop_();//pulswithapprox.5usDATA=1;//releaseDATA-linereturnval;}/*********************************************************/chars_measure(uchar*p_value,uchar*p_checksum,ucharmode)//makesameasurement(humidity/temperature)withchecksum{unsignederror=0;unsignedinti;s_transstart();//transmissionstartswitch(mode){//sendcommandtosensorcaseTEMP: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;//waituntilsensorhasfinishedthemeasurementif(DATA)error+=1;//ortimeout(~2sec.)isreached*(p_value)=s_read_byte(ACK);//readthefirstbyte(MSB)44n*(p_value+1)=s_read_byte(ACK);//readthesecondbyte(LSB)*p_checksum=s_read_byte(noACK);//readchecksumreturnerror;}/*********************************************************/voidcalc_dht90(float*p_humidity,float*p_temperature)//calculatestemperature[C]andhumidity[%RH]//input:humi[Ticks](12bit)//temp[Ticks](14bit)//output:humi[%RH]//temp[C]{constfloatC1=-4.0;//for12BitconstfloatC2=+0.0405;//for12BitconstfloatC3=-0.0000028;//for12BitconstfloatT1=+0.01;//for14Bit@5VconstfloatT2=+0.00008;//for14Bit@5Vfloatrh=*p_humidity;//rh:Humidity[Ticks]12Bitfloatt=*p_temperature;//t:Temperature[Ticks]14Bitfloatrh_lin;//rh_lin:Humiditylinearfloatrh_true;//rh_true:Temperaturecompensatedhumidityfloatt_C;//t_C:Temperature[C]t_C=t*0.01-40;//calc.temperaturefromticksto[C]rh_lin=C3*rh*rh+C2*rh+C1;//calc.humidityfromticksto[%RH]rh_true=(t_C-25)*(T1+T2*rh)+rh_lin;//calc.temperaturecompensatedhumidity[%RH]if(rh_true>100)rh_true=100;//cutifthevalueisoutsideofif(rh_true<0.1)rh_true=0.1;//thephysicalpossiblerange44n*p_temperature=t_C;//returntemperature[C]*p_humidity=rh_true;//returnhumidity[%RH]}voiddelayms(ucharcount)//延时countms子程序{uchari,j;do{for(i=5;i>0;i--)for(j=98;j>0;j--);}while(--count);}voidkeepoffwendu(ucharnowtem){wendugao=nowtem/10;wendudi=nowtem%10;wendugao=wendugao+'0';wendudi=wendudi+'0';}voidkeepoffshidu(ucharnowtem){shidugao=nowtem/10;shidudi=nowtem%10;shidugao=shidugao+'0';shidudi=shidudi+'0';}voidkeepoffM(ucharnowtem)44n{Mgao=nowtem/10;Mdi=nowtem%10;Mgao=Mgao+'0';Mdi=Mdi+'0';}voidshowwendu(ucharshi,ucharge){LcdReset();WriteString(0,0,"tem:");WriteChar(6,0,shi);WriteChar(7,0,ge);WriteChar(9,0,'C');}voidshowshidu(ucharshi,ucharge){LcdReset();WriteString(0,0,"wet:");WriteChar(6,0,shi);WriteChar(7,0,ge);WriteString(9,0,"%RH");}/***************************************************************************/voidmain(){ucharM;M=40;s_connectionreset();//delayms(100);44nwhile(1){LcdReset();WriteString(0,0,"hello.");if(tem==0){TEM:while(1){Get_TH();//获得温度和湿度keepoffwendu(wendu);showwendu(wendugao,wendudi);if(wet==0)gotoWET;elseif(set==0)gotoSET;}}if(wet==0){WET:while(1){Get_TH();//获得温度和湿度keepoffshidu(shidu);showshidu(shidugao,shidudi);if(tem==0)gotoTEM;elseif(set==0)gotoSET;}}44nif(set==0){SET:while(1){keepoffM(M);showshidu(Mgao,Mdi);if(add==0)M=M+1;elseif(sub==0)M=M-1;elseif(tem==0)gotoTEM;elseif(wet==0)gotoWET;44