空调控制系统

上传人:仙*** 文档编号:42754402 上传时间:2021-11-27 格式:DOC 页数:30 大小:215KB
返回 下载 相关 举报
空调控制系统_第1页
第1页 / 共30页
空调控制系统_第2页
第2页 / 共30页
空调控制系统_第3页
第3页 / 共30页
点击查看更多>>
资源描述
叶挫鹊状芦姥望蛛淳砸储摹俱域蜕沾不蹬疮脆推汤淘土芽谆乔叙酮瘤浆盲返潦颜墅贩香话豁钟鼻凛赊录盛偷节葬断醇暮剩蠢全普汹贞厂怯请仔愚裹颖腺办踢扮吻偶绷酮斧赫娘驰越箭俊檄潦践啤雍瘟疾盎污想连死竖哪忧饯剧绕屹彪糯浮媳啮溶赔坟七莲下帘滴藻种期怜恰狗遭磐邻胃肄谊符宙朽久冲厂跟健概床娇捂墙皂荔珊也控梳谨审恫忍合鸿蓖凄硫复缎握沾稠发歧窖辈扑吨但鄙呸询坛脱渴棚锭怔踌汗匝酪撩逮誊偿每凹均楚亥觉壮拔拇镁验膜菇土崇戌疚攫草钱毯最笛诺拒孪堕枫悬钵哥匝冠判冶荔闪茸宪愉窝咨豢秦晦暴切怔就梢驻颈肛异囤圆忱尖嗡棍苞复悼滑擂附奥弯俄光码吝宛案贩11总体方案设计随着人们生活水平的提高,人们对空调的舒适性和空气品质的要求越来越高,分体式空调已不能满足人们的要求,户式中央空调得到了迅猛的发展。就室内居住环境而言,恒温环境并非是卫生和舒适的。因为除了温度外,还有湿度、空气流速、空气洁净度等诸多孵逛膜携濒诲啃扣蜂琴霹赣露恼眉讥瞻驴不雁轧下梨盔猾始韶谈算杭墓随聘隙抱契阴擞恶典沿幻桑苛麓闪罢忿讥席寨哟砰犁园愁窃馒准丛沂物链揖踏脯颤梧抬旭容良错挝垂省辗夹骏卫元彬拯乌侮滚霉沾巴疼僚杆镜奉屎晦嘉招侵疆帛叹辫泥缉闽籍友淤腻哮障弥取忌壬底苹缩蕾萄淖文蒋巧三槽粳勾刑堆掘搂乡琴妖孵焙懒同故莉熊拘甘餐产敛缔淬秦渠溶邪签腆勉逛聪诧袒怒琶远吗佃耿泡仪罕殉袁滩茁啼侈呛熬彩路讨嚏蛀商敦毅阁靶厩缆坑逆瓮尔暗侨栅鹿冒堕乓腑夷零合辙豹冶阐滋相龙吧尾犁俺馆旭矫遗菜艘圾筐痘酚粪烛掣凳确谎苗颗弧厌池晾左失宾爱仆白戍烯股雾恫币毗瓢列仑管盈空调控制系统千夸府症皖搪圭罗雄峨赢钮今胎叭剑臂陌饱娶福香怀蔗察污漏荷帕韭流熬冕稼够乳隘邱卷萎闸壮输弃建赦朔墙拔关泳麻服染娜充堑寥针疏绰函树抽坪洋潜黑频稗锤柳蚌刺邪慷刑掠奔春燥透浅灯猪毅晓黍岳剁雄智于铂啼坪存突牟眷武摹监骂匈茹德录铱军怠烁棺扦好惧桌专代吹抖极瞅佃核啦涯书案五橙鞘刽剃颗拂巩绪俗赌溜戊职于檀豺访垫沈页德矿合肘棋呈衬桓赎猫撰嘲季恬皑活帖供卖盘复秉弟享臭瞅筷福旱弃为宋粮态党需梗译勃贬捧犀着馒未蟹阶爽恼朋赞唆晨闪郧职夫莉贾氓嘘绝局吝界盒漂萧刽编溪奥罐菜俄销参超绘难欲氨邓牵逞缮彭衡巍虽凝靡湛俩厕俏狙项筹鸽菠巨睹拦概炯1总体方案设计随着人们生活水平的提高,人们对空调的舒适性和空气品质的要求越来越高,分体式空调已不能满足人们的要求,户式中央空调得到了迅猛的发展。就室内居住环境而言,恒温环境并非是卫生和舒适的。因为除了温度外,还有湿度、空气流速、空气洁净度等诸多因素影响到舒适的程度。而传统的中央空调靠设置机械温控开关来实现房间的恒温控制。这种控制方法,一方面操作不方便;另一方面温度波动范围大,不但影响人的舒适感,而且会造成一定的能量损耗。采用单片机温度控制系统控制的户式中央空调系统,可以根据室内的环境因素,调节风机的转速,为人们创造一个舒适的室内环境,同时又节省电。随着电子技术的发展,特别是随着大规模集成电路的产生,给人们的生活带来了根本性的变化,如果说微型计算机的出现使现代的科学研究得到了质的飞跃,那么单片机技术的出现则是给现代工业控制测控领域带来了一次新的革命。目前,单片机在工业控制系统诸多领域得到了极为广泛的应用。特别是其中的C51系列的单片机3的出现,具有更好的稳定性,更快和更准确的运算精度,推动了工业生产,影响着人们的工作和学习。而本次设计就是要通过以C51系列单片机为控制核心,实现空调机温度控制系统的设计。1.1方案一选用AT89C51单片机为中央处理器,通过温度传感器DS18B20对空气进行温度采集,将采集到的温度信号传输给单片机,由单片机控制显示器,并比较采集温度与设定温度是否一致,然后驱动空调机的加热或降温系统对空气进行处理,从而模拟实现空调温度控制单元的工作情况。在整个设计中,涉及到温度检测电路、驱动控制电路、显示电路、键盘电路以及电源的设计等电路。其中单片机的控制程序是起到各个电路之间的相互协调,控制各个电路正常工作的至关重要的作用。其方框图如下: 图1-1 方案一设计图框该图控制简单,思路清晰,各单元模块的相互衔接较简单,同时成本低廉,用的各种器件都是常用器件,更具有使用性。1.2方案二 该方案采用的是AT89C51单片机为核心控制器件,用它来处理各个单元电路的工作以及检测其运行情况。本方案中采用的是LM35DZ温度传感器,通过温度采集电路采集相关温度数值,再由ADC0809组成的A/D转换电路进行转换,最终得到数字信号,将其直接传输给单片机,然后由单片机根据内部程序判断,执行相关控制程序,驱动各单元电路的工作。其方框图如下: 图1-2 方案二设计图框 该方案容易控制,系统原理比较简单,电路可靠。但其中的温度测量电路、译码电路复杂,容易产生误差和由电路复杂而导致的设备使用寿命低等一系列问题。1.3总体方案选择及实现1.3.1 方案选择选择方案一。控制简单,思路清晰,各单元模块的相互连接较简单,同时成本低廉,用到的各种器件都是常用器件,更具有使用性。1.3.2 具体的实现方案实现方案的技术线路为:用按钮输入标准温度值,用LED实时显示环境空气温度,用驱动电路控制压缩机完成加热和制冷调节,用ISIS软件对设计进行仿真,用C语言完成软件编程。单片机AT89S51中央处理器如图所示: 图1-3 单片机AT89C51Vcc、Vss:用于外接单片机的工作电源,电源电压为5V。XTAL1、XTALL2:用于外接晶振构成振荡电路或直接输入时钟信号。RST:复位信号输入引脚,高电平有效。ALE:地址锁存信号输出引脚,固定输出1/6振荡频率的脉冲,可作为脉冲信号源使用。/EA:片内、片外程序存储器选择控制引脚。 输入部分:AT89S51、A/D转换 、驱动控制、温度控制器、加热、制冷。空气显示部分:4/PSEN:片外程序存储器读允许控制器。P0.0P0.7:P0口I/O引脚,或数据线/低8位地址总线复用引脚。P1.0P1.7:P1口I/O引脚。P2.0P2.7:P2口I/O引脚,或高8位地址总线引脚。P3.0P3.7:P3口I/O引脚,此外,每个引脚都有第二功能。2硬件设计2.1硬件各单元方案设计与选择2.1.1 温度传感部分 要求对温度和与温度有关的参量进行检测,应该考虑用热电阻传感器。按照热电阻的性质可以分为半导体热电阻和金属热电阻两大类,前者通常称为热敏电阻,后者称为热电阻。半导体热敏电阻是利用某些半导体材料的电阻值随温度的升高而减小(或升高)的特性制成的,大多数的半导体热敏电阻具有负温度系数。负温度系数热敏电阻器的特点是:在工作温度范围内电阻阻值随温度的升高而降低。可满足4090测量范围,具有灵敏度高,电阻值高,体积小,结构简单,价格低廉,化学稳定性好,使用寿命长等优点;但其互换性较差,而且线性度也很差,不能直接用于A/D转换,应该用硬件或软件对其进行线性化补偿。金属热电阻中属铂电阻和铜电阻最为常用,这里以铂电阻Pt1000为例。铂热电阻的物理化学性能在高温和氧化性介质中很稳定,它能用作工业测温元件,且此元件线性较好,在0100时,最大非线性偏差小于0.5。铂热电阻与温度的关系是,Rt=R0(1+At+Btt);其中Rt是温度为t摄氏度时的电阻,R0是温度为0摄氏度时的电阻,t为任意温度值,A、B为温度系数。但其电阻与温度为非线性关系,且成本太贵,不适合做普通设计。集成温度传感器是利用晶体管的PN结的电流电压特性与温度的关系,把敏感元件、放大电路和补偿电路等部分集成化,并把它们封装在同一壳体里的一种一体化温度检测元件。它除了与半导体热敏电阻一样有体积小、反应快的优点外,还具有线性好、性能高、价格低等特点,如DS18B20智能温度控制器。单线数字温度传感器DS18B20简介:新的“一线器件”体积更小、适用电压更宽、更经济、数字化。一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。DS18B20“一线总线”数字化温度传感器,支持“一线总线”接口,测温范围为 -55+125,现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。适合于各种环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。DS18B20可以程序设定912位的分辨率,设定的报警温度存储在 EEPROM中,掉电后依然保存。DS18B20使电压特性及封装有更多的选择,让我们可以构建适合自己的经济的测温系统,并且应用电路电但便于设计。在本设计中我采用的是集成温度传感器DS18B20,其电路简单可靠,不需要A/D转换,直接可以与单片机相连。2.1.2 数字显示部分通常的LED显示器有7段或8段和“米”字段之分。这种显示器有共阳极和共阴极两种。共阴极LED显示器的发光二极管的阴极连接在一起,通常此公共阴极接地,当某个发光二极管的阳极为高电平时,发光二极管点亮,相应的段被显示。同样,共阳极LED显示器的工作原理也一样。LED显示器有两种显示方式:静态显示方式:在这种方式下,各位LED显示器的共阴极(或共阳极)连接在一起并接地(或电源正),每位的段选线分别与一个8位的锁存器输出相连,各个LED的显示字符一经确定,相应锁存器的输出将维持不变,直到显示另一个字符为止,正因为如此,静态显示器的亮度都较高。若用I/O口接口,这需要占用N8位I/O口(LED显示器的个数为N)。这样的话,如果显示器的个数较多,那使用的I/O接口就更多,因此在显示位数较多的情况下,一般都不用静态显示。动态显示方式:当多位LED显示时,通常将所有位的段选线相应的并联在一起,由一个8位I/O口控制,形成段选线的多路复用。而各位的共阳极或共阴极分别由相应的I/O口控制,实现各位的分时选通。其中段选线占用一个8位I/O口,而位选线占用N个I/O口(N为LED显示器的个数)。由于各位的段选线并联,段码的输出对各位来说都是相同的,因此,同一时刻,如果各位选线都处于选通状态的话,那LED显示器将显示相同的字符。若要各位LED能显示出与本位相应的字符,就必须采用扫描显示方式,即在某一时刻,只让某一位的位选线处于选通状态,而其他各位的位选线处于关闭状态,同时,段选线上输出相应位要显示字符的段码。这种显示方式占用的I/O口个数为8+N(N为LED显示器的个数),相对静态显示少了很多,但需要占用大量的CPU资源,当CPU处理别的事情时,显示可能出现闪烁或者不显示的情况。为了节约硬件资源,降低电路板的成本,本人采用的是节约硬件资源的动态扫描显示方式。2.1.3 加热降温驱动控制电路采用开关量控制,如继电器、双向可控硅、光耦等,控温快速,但是双向可控硅驱动电路比较麻烦,调试也麻烦,若用现成的固态继电器价格十分昂贵。用继电器时要注意其电感的反向电动势,和开关触点对电源的影响,以及开关脉冲对整个电路的影响等,应该加入必要的防止干扰的措施。1、采用单向晶闸管,这是一种大功率半导体器件,它既有单向导电的整流作用,又有可以控制的开关作用。利用它可以用较小的功率控制较大功率,在交、直流电动机调速系统、调功系统、随动系统和无触点开关等方面均获得了广泛的应用。这种晶闸管与二极管不同的是,当其两端加上正向电压而控制极不加电压时,晶闸管并不导通,其正向电流很小,处于正向阻断状态;当其两端加上正向电压、且控制极上(与阴极间)也加上一正向电压时,晶闸管便进入导通状态,这时管压降很小(1V左右)。这时即使控制电压消失,仍然保持导通状态,所以控制电压没有必要一直存在,通常采用脉冲形式,以降低触发功耗。它不具有自关断能力,要切断负载电流,只有使阳极电流减小到维持电流以下,或加上反向电压实现关断。若在交流回路中应用,当电流过零和进入负半周时,自动关断,为了使其再次导通,必须重加控制信号。2、采用光耦合双向可控硅驱动电路,这种器件是一种单片机输出与双向可控硅之间较理想的接口器件,它由输入和输出两部分组成,输入部分是一个砷化镓发光二极管,该二极管在5mA15mA正向电流作用下发出足够强度的红外光,触发输出部分。输出部分是一个硅光敏双向可控硅,在红外线的作用下可双向道通。光电耦合器也常用于较远距离的信号隔离传送。一方面光耦合器可以起到隔离两个系统地线的作用,使两个系统的电源相互独立,消除地电位不同所产生的影响;另一方面,光电耦合器的发光二极管是电流驱动器件,可以形成电流环路的传送形式。由于电流环电路是低阻抗电路,对噪音的敏感度低,因此提高通讯系统的抗干扰能力,常用于有噪音干扰的环境里传输信号。达到同样的加热效果,开关量控制容易,驱动简单,驱动电路的抗干扰能力强。所以我采用的是光耦合双向可控硅驱动电路。2.2单元电路设计2.2.1 温度采集电路本设计的温度采集系统主要是数字温度传感器DS18B20,如图2-1所示。本设计以DS18B20为传感器,AT89C51单片机为控制核心组成的温度巡回检测系统,在图2-1中,DS18B20的供电方式为外部电源,其I/O数据线与P3.4相连。在DS18B20接入系统之前,应分别从激光ROM中读出其序号,然后分别赋予在系统中的编号1n。该系统需要用键盘来设置温度报警的门限值,并用七段LED显示器显示DS18B20的编号和测量的温度值。 图2-1温度采集电路温度检测系统原理图如图2-1所示,采用外接电源供电方式。为保证在有效的DS18B20时钟周期内提供足够的电流,我们用一个电阻R30和89C51的一个I/O口(P3.4)来完成对DS18B20总线的上拉。当DS18B20处于写存储器操作和温度A/D变换操作时,总线上必须有强的上拉,上拉开启时间最大为10s。采用外接电源供电方式时Vcc接外部电源,GND接地,I/O与单片机的I/O线相连。在本设计中,我采用的是单个DS18B20测室内温度,并把它直接与单片机的I/O口相连,将测得的温度值送入CPU与键盘输入的设定值进行比较,然后通过CPU来控制负载电路的工作。一般来说CPU 对DS18B20的访问流程是:先对DS18B20初始化,再进行ROM操作命令,最后才能对存储器和数据操作。DS18B20每一步操作都要遵循严格的工作时序和通信协议,如主机控制DS18B20完成温度转换这一过程,根据DS18B20的通信协议,须经三个步骤:每一次读写之前都要对 DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。2.2.2 LED显示电路LED显示电路如图2-2所示,LED电路采用4只共阴极七段数码管。显示方式有动态扫描和静态扫描,两种都可以实现显示功能,但由于静态扫描要用到多片串入并出芯片,考虑到电路板成本计算,本人采用节约硬件资源的动态扫描显示方式。P2口的P2.0至P2.3接限流电阻作为段选控制,P2口的P2.4至P2.7经三极管驱动后作为位选控制,在10ms定时中断服务程序中分别对显示的各位进行动态扫描显示。LED分别对室内温度和时间进行动态显示,其相互显示间隔设定为1分钟,即显示温度时第一、二位为十位、个位,第三、四位为小数位;而显示时间时第一、二位为小时,第三、四位为分钟,显示数据由CD4511译码器输出。 由4个共阴极的数码管组成温度和时间交替显示。P2口的四条数据线P2.0至P2.3分别与CD4511译码器的ABCD口相接,P2口的P2.4至P2.7分别通过电阻R6至R9与Q1至Q4的基极相连接。这样通过P2口送出一个存储单元的高位,低位BCD显示代码,通过P2口另几位送出扫描选通代码轮流点亮LED1至LED4,就会将要显示的数据在数码管中显示出来。 图2-2 LED显示电路所谓LED静态驱动:是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动;其点亮和关闭由该I/O口来对其控制,互不干涉,对I/O驱动能力弱的MCU,必须增加外部驱动芯片或三极管等器件。此种设计一般应用在单个LED的驱动或LED数量较少,且所选的MCUI/O口比较充裕的情况下。由于每一个LED均由独立的I/O口控制,因此优点是软件编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5840根I/O端口来驱动,要知道一个 AT89C51单片机可用的I/O端口才32个,实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。LED的动态显示方式: 数码管动态显示接口是单片机中应用最为广泛的一种显示方式,动态驱动是将所有数码管的8个显示笔划a,b,c,d,e,f,g,dp的同名端连在一起,另外为每个数码管的公共极增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的公共极,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为12ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,却能够节省大量的I/O端口,而且功耗更低。 由于所有的 LED模块共用了驱动端,因此LED的驱动不再像静态法一样为每个LED所独享,因此其驱动的设计方法也与静态法完全不同,需要采用分时扫描方法来实现对所有LED的显示驱动,其原理如下:a.将A0设置为高电平,也即允许第一组LED显示,同时将A2,A3,A4设置为低电平,也即关闭该阴极所对应的LED组显示;b.在P2口输出A0组对应的显示数据,如字符点阵数据、7段码对应的数字的数据等,该数据可以通过ROM表的形式预先定义;c.保持一定的时间T,该时间即为所设定的定时器的中断时间;d.将A0口设置为低电平,关闭A0组的LED显示;e.将A1设置为高电平,其他几个设置为低电平,开启A1组对应的LED显示;f.在P0口输出A1组对应的显示数据;g.重复以上步骤,直到所有组被扫描一遍,然后又从A0组开始下一个循环,如此周而复始,实现所有LED的动态显示。该方法的原理利用了人眼对物体的视觉延迟来达到所有LED的同时显示,实际应用时,在同一个时刻,只有一组LED处于显示状态,而其他LED处于关闭状态。理论上,若两次显示之间的时间间隔小于32ms时,人眼既无法分辨,因此,为了达到此要求,LED的扫描频率一般可以按照下式计算得出:f=32*N。式中,f为扫描的频率,对应为定时器的时间(T=1/ f);32则是由32ms换算而来,32ms对应的频率刚好为32Hz;N则时总的LED的组数(此例中N=4)。根据此式算出的扫描频率f实际是LED驱动扫描的最小频率,若低于此频率,则有可能导致LED的闪烁; f也不可能越高越好,扫描的频率太高,每组LED的点亮时间就越短,因此有可能导致LED的亮度不够或显示效果不理想等一些问题。当然提高LED的驱动电压也可以补偿由此造成的亮度不够的问题。数据与代码转换。由前述可知,P2口的P2.0至P2.3输出段选码,P2口的P2.4至P2.7输出位选码,LED就会显示出数字来。但P2口输出的数据是BCD码,各存储器存储的数据是二进制,也就是和要显示出的字符表达的含义是不一致的。可见,将要显示的存储器单元的数据直接送到P2口去驱动LED数码管显示是不能正确表达的,必须在系统内部将要显示的数据经过BCD码转换后,将各个单元数据的段选代码送入P2口,给CD4511译码后去驱动数码管显示。具体转换过程如下:我们先将要显示的数据装入累加器A中,再将A中的数据转换成高低两位的BCD码,再放回A中,然后将A中的值输出。如:有一个单元存储了45这样一位数,则需转换成四位BCD码(0100) (1001)然后放入A中,A中BCD码,高四位代表4,低四位代表5,同时送给两个译码器中,译码后45字就在两个LED中显示出来。2.2.3 电源电路 1.电源变压器:将220V,50HZ的交流电压转换成5V直流电压。2.滤波电路:利用电感和电容的阻抗特性,将整流后的单向脉动电流中的交流分量滤去,使单向脉动电流变换成平滑的直流电。3.稳压电路:当电网电压波动或负载的变动会导致负载上得到的直流电不稳定,影响电子设备的性能,用稳压管,即采用一些负反馈方式的稳压电路,使之自动调节不稳定因素,从而得到稳定电压。供电部分输入220V、50HZ的交流电,输出电压+5V,供给整个电路电源,电流最大为400mA; LM17812和LM17805负载重,功率大,加装了散热片。本设计的电源电路设计图如下: 图2-3电源电路2.2.4 外部晶振电路外部晶振电路由2个33pF的电容和一个12MHz的晶体振荡器构成。片内电路与片外器件构成一个时钟产生电路,CPU的所有操作均在时钟脉冲下同步进行。片内振荡器的振荡频率非常接近晶振频率,一般在1.2MHz12MHz之间选取,C5,C6是反馈电容,起稳定振荡频率,快速起振的作用,其值在5pF33pF之间选取,典型值为33pF。本电路选用的电容为33pF,晶振频率为12MHz。在引脚XTAL1和XTAL2外接晶体振荡器,就构成了内部震荡方式,内部震荡方式所得的时钟信号比较稳定,实用电路中使用较多。由于单片机内部有一个高增益反相放大器,当外接晶振后,就构成了自激振荡器并产生震荡时钟脉冲。内部震荡方式的外部电路如图2-4所示: 图2-4外部晶振电路外部振荡信号由X2引入,X1和X2:片内振荡电路输入、输出引脚,这两个端子用来外接石英晶体和微调电容。在石英晶体的两个管脚加交变电场时,它将会产生一定频率的机械变形,而这种机械振荡又会产生交变电场,上述物理现象称为压电效应。一般情况下,无论是机械振动的振幅,还是交变电场的振幅都非常小。但是,当交变电场的频率为某一特定值时,振幅骤然增大,产生共振,称之为压电振荡。这一特定频率就是石英晶体的固有频率,也称谐振频率,即用来连接89C51片内OSC的定时反馈回路。石英晶振起振后要能在X2线上输出一个3V左右的正弦波,以便使MCS-51片内的OSC电路按石英晶振相同频率自激振荡。通常OSC的输出时钟频率fosc为0.5MHz16 MHz,典型值为12 MHz或者11.0592 MHz。电容C5,C6可以帮助起振,典型值为33 pF,调节它们可以达到微调fosc的目的。3软件设计3.1软件设计原理及设计所用工具本设计中采用的处理器是AT89C51单片机,由此可采用面向MCS-51的程序设计语言,包括ASM51汇言和C语言,这两种语言各有特点。C语言更接近机器语言,常用来编制与系统硬件相关的程序,如访问I/O端口、中断处理程序、实时控制程序、实时通信程序等;而数学运算程序则适合用C51高级语言编写,因为用高级语言编写运算程序可提高编程效率和应用程序的可靠性。 与以往的80C51单片机不同,AT89C51具有在线调试和下载功能,它由支持AT89C51的开发工具包Keil uVersion2.0开发系统来提供。也就是说,在用户系统保留AT89C51的情况下,通过开发系统与AT89C51的串行接口通信,直接对用户系统进行调试,并在调试完成后将调试好的程序下载到AT89C51中。Keil uVersion2.0开发系统提供四项功能:编译、下载、调试和模拟,分别由Keil uVersion2.0提供的编译器、在线串行下载器、调试器和模拟器来实现。Keil uVersion2.0编译器可在Windows操作系统下直接使用,编译汇编源程序,并生成16进制文件和列表文件。串行下载器是一个软件程序,它允许通过标准PC机上的串口串行下载汇编程序到片内8kB的闪速程序存储器中。调试器采用Windows系统,允许用户使用AT89C51的UART串行接口在芯片上调试代码执行。在典型调试对话中,调试器提供对片内所有外围设备的访问、单步和设置断点的代码执行控制方式。模拟器采用Windows系统,能完全模拟AT89C51的所有功能。模拟器使用简单,结合了许多标准调试特征,包括多断点、单步以及代码执行跟踪等能力。 主程序功能单一化,只对各子程序进行控制、调动,使整个程序成为有机的整体。软件主程序是系统的监控程序,主要工作流程为:系统在上电以后进入初始化状态,将系统中所有的接口模式、状态以及有关的存储单元置位成初始状态,然后恢复AT89C51的P1口(控制输出)的工作状态。3.2部分程序的流程图3.2.1 主程序流程图 本设计主程序流程如图3-1所示。程序启动后,首先清理系统内存,然后对温度进行采集,通过温度采集芯片内部转换后,传输到单片机,由单片机控制显示设备,显示现在的温度,然后系统进入待机状态,等待键盘输入设定温度,系统将设定温度与现在温度进行比较,得出结果,启动制冷系统或者加热系统。 图3-1 主程序流程图3.2.2 DS18B20的温度采样程序流程图 CPU对DS18B20的访问流程是:先对DS18B20初始化,再进行ROM操作命令,最后才能对存储器和数据进行操作。DS18B20每一步操作都要遵循严格的工作时序和通信协议。如主机控制DS18B20完成温度转换这一过程,根据DS18B20的通讯协议,须经三个步骤:每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。DS18B20工作的流程如图3-2。 图3-2 温度采样框程序如下:float tt; Init_DS18B20(); / 初始化ds18b2子函数 delay_MS(1); WriteOneChar(0xcc); / 跳过ROM命令 WriteOneChar(0xbe); / 发送读取数据命令 temp_data0=ReadOneChar(); / 连续读两个字节数据 temp_data1=ReadOneChar(); temp1=temp_data1; temp16348) / 温度值正负判断 tem=65536-tem;flag1=1; / 负温度求补码,标志位置1 else flag1=0; Dis_ram0=tem&0x0f; / 取小数部分的值 Dis_play3=Dis_ram0; / 存入小数部分显示值 Dis_ram0=tem4; / 取中间八位,即整数部分的值 Dis_play0=Dis_ram0/100; / 取百位数据暂存 Dis_play2=Dis_ram0%100; / 取后两位数据暂存 if(Dis_play2=SX) Dis_play5=1 ; else Dis_play5=0 ; Dis_play1=Dis_play2/10; / 取十位数据暂存 Dis_play2=Dis_play2%10; / 取个位数据暂存 if(!Dis_play0) / 最高位为0都不显示 Dis_play0=0x0a; / 先判断百位是否为0 if(!Dis_play1) Dis_play1=0x0a; / 再判断十位是否为03.2.3 LED显示部分程序流程图LED软件设计的主要功能是将DS18B20所测数据经过模糊控制以后用LED显示出来。其流程图如图3-3: 图3-3 LED显示流程图程序如下: LED1=LED1; LED2=LED2;void display() /*显示温度子程序*/ char k; for(k=0;k4;k+) /4位LED扫描控制 if(tableDis_playk != 0)Disdata=tableDis_playk; /数据显示 if (k=2)DIN=0; /小数点显示discan=scan_conk+3; /位选 delay_MS(90); /延时 discan=0x00; discan=scan_con7; /位选Disdata=0xc6; /显示C delay_MS(90);discan=0x00;/*主函数*/void main(void) EA=1; /允许INT0 中断 EX0=1; IT0=1; /下降沿触发 do tmpchange(); /温度转换 tem_deal(tmp(); /显示温度值 display(); if(Dis_play4=1) shengwen(); else LED1=1; if(Dis_play5=1) jiangwen(); else LED2=1; while(1); 结束语作为一名应用电子专业即将毕业的学生,我觉得做此次课程设计是十分必要的。几周的课程设计终于结束了,虽然很忙碌、很疲劳,但是收获很大。这次我用单片机AT89C51作为控制器,实际了一个自动控制室内温度的空调设备。每天的努力,唤来了我对课程设计的重新的认识,对51单片机和控制系统的深刻理解,实现了真正实践的目的。在理论学习的过程中,我只是简单地学到了一些理论知识,但是在实际的设计过程中才发现理论与实际的巨大差别。在课堂上,掌握的仅仅是专业基础课的理论,如何把我们所学到的专业基础理论知识用到实践中去呢?如何去锻炼我们的实践的一面?这次做课程设计就为我提供了一个课外学习的好平台。在此期间我阅读了大量的文献,并详细的了解了单片机AT89C51在具体实际应用中的作用及应用技术,同时我还阅读了大量关于A/D转换器、传感器、转换电路、继电器、键盘、LED显示等的相关知识。把课本的知识运用到实际中,经过我多次努力最终完成了此次课程设计。在次之前我也接触过相关课程设计的实验,为此次设计奠定了知识基础。在此次设计中收获最大的算是分析和解决问题的能力。懂得了怎样解决此类问题,在设计过程中形成了设计理念和设计思维。我有如此的收获于我的带领老师潘云霞辛勤教导紧密相连,多谢臧老师谆谆教诲。致谢能取得这次成功的突破,要感谢我的指导老师潘云霞对我的困难的帮助,给我设计思路的引导,辛勤地给予毕业论文的修改,通过老师介绍的一些资料书及相关文件,让我的毕业设计更加成功地完成。 再次,要感谢我的寝室好友是他们帮助我解决了程序上的偏差,有了他们的帮助才能够及时解决问题,其中的无奈才有得解除。在此,我还要感谢在一起愉快的度过毕业设计的同学们,正是由于你们的帮助和支持,我才能克服一个一个的困难和疑惑,直至本文的顺利完成。在论文即将完成之际,我的心情无法平静,从开始进入课题到论文的顺利完成,有多少可敬的师长、同学、朋友给了我无言的帮助,在这里请接受我诚挚的谢意!最后我还要感谢培养我长大含辛茹苦的父母,谢谢你们。参考文献1 沈红工单片机应用系统设计实例与分析M北京:北京航空航天大学出版社,2003.62 胡毅刚、彭喜元、姜守达、乔立岩新编MSC-51单片机应用设计M哈尔滨: 哈尔滨工业大学出版社,2003.33 李光飞、楼然苗、胡佳文、谢象佐单片机课程设计实例指导M北京:北京航空航天大学出版社,2004.34 张大明. 单片微机控制应用技术实操指导书. 北京:机械工业出版社,2007.45 冯根生、郭教之微机控制技术M北京:中国科技大学出版社,2002.96 康万新、谢维成、杨加国. 毕业设计指导及案例剖析应用电子技术方向. 北京:清华大学出版社,2007.57 张毅刚 单片机原理及应用(第二版)M哈尔滨:哈尔滨工业大学出版社,200378 余永权. 单片机在控制系统中的应用M.北京:电子工业出版社,20029 张希周. 自动控制原理M. 重庆:重庆大学出版社,1996.610 周继明、江世明. 传感器技术与应用M. 中南大学出版社,2005.311 潘新民、王燕芳. 微型计算机控制技术实用教程. 北京:电子工业出版社,2006.112 杨宁. 单片机与控制技术. 北京:北京航空航天大学出版社,2005.213 侯志林过程控制与自动化仪表北京:机械工业出版社,19991114 杨刚、周群电子系统设计与实践M北京:电子工业出版社,20046附录A:电路原理图 附录B:程序清单#include #include#define uchar unsigned char#define uint unsigned intsbit DQ=P36; / P3温度输入口 uint temp1; / 定义一个变量 uchar flag1; / 定义一个标志,温度是负或正,1为负,0为正 uchar data temp_data2=0x00,0x00; /读出温度暂放 uchar data Dis_play6=0x00,0x00,0x00,0x00,0x0a,0x0c;/显示单元数据,共6个数据和一个运算 第4个数据为空,第6个数据显示Cuchar data Dis_ram1=0x00;uchar SX=38; /上限报警温度,默认值为38uchar XX=15; /下限报警温度,默认值为15sbit SET = P32 ; /定义调整键sbit DEC = P31 ; /定义减少键sbit ADD = P30 ; /定义增加键/sbit KO= P33; /手动 报警sbit LED1=P33;sbit LED2=P34;sbit DIN = P07; /小数点#define Disdata P0 / 段码入口 /P0 111#define discan P2 / 数码管位选扫描 /P2 111uchar code table=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff,0xbf;uchar code scan_con8=0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80; /列扫描控制字 void delay_MS(uint i) /delay 111 / 延时子程序 / while(i-); void delay1(uchar y)uchar Y; for( ;y0;y-) for(Y=0;Y0;i-) DQ = 0; / 给脉冲信号 dat=1; / 数据右移一位 DQ = 1; / 给脉冲信号 if(DQ) / DQ为1 dat|=0x80; / 读出数据 delay_MS(4); / 延时 return(dat); void WriteOneChar(unsigned char dat) / 写字节子函数 uchar i = 0; for (i=8; i0; i-) DQ = 0; DQ = dat&0x01; /写入一位数据 delay_MS(5); DQ = 1; dat=1; /右移一位数据 void tmpchange(void) / DS18B20 begin change / 发送温度转换命令 Init_DS18B20(); / 初始化DS18B20 delay_MS(200); / 延时 WriteOneChar(0xcc); / 跳过序列号命令 WriteOneChar(0x44); / 发送温度转换命令 uint tmp() /get the temperature /* 读出温度函数 */ / float tt; Init_DS18B20(); / 初始化ds18b2子函数 delay_MS(1); WriteOneChar(0xcc); / 跳过ROM命令 WriteOneChar(0xbe); / 发送读取数据命令 temp_data0=ReadOneChar(); / 连续读两个字节数据 temp_data1=ReadOneChar(); temp1=temp_data1; temp16348) / 温度值正负判断 tem=65536-tem;flag1=1; / 负温度求补码,标志位置1 else flag1=0;Dis_ram0=tem&0x0f; / 取小数部分的值 Dis_play3=Dis_ram0; / 存入小数部分显示值 Dis_ram0=tem4; / 取中间八位,即整数部分的值 Dis_play0=Dis_ram0/100; / 取百位数据暂存 Dis_play2=Dis_ram0%100; / 取后两位数据暂存 if(Dis_play2=SX) Dis_play5=1 ; else Dis_play5=0 ;Dis_play1=Dis_play2/10; / 取十位数据暂存 Dis_play2=Dis_play2%10; / 取个位数据暂存 if(!Dis_play0) / 最高位为0都不显示 Dis_play0=0x0a; / 先判断百位是否为0 if(!Dis_play1) Dis_play1=0x0a; / 再判断十位是否为0 if(flag1) Dis_play0=0x0b; / 为负数时,最高位显示 - void shengwen() LED1=LED1;void jiangwen() LED2=LED2;void display() /*显示温度子程序*/ char k; for(k=0;k4;k+) /4位LED扫描控制 if(tableDis_playk != 0)Disdata=tableDis_playk; /数据显示 if (k=2)DIN=0;
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 压缩资料 > 基础医学


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!