为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

基于单片机的全开电水热水器的设计

2017-10-18 50页 doc 159KB 17阅读

用户头像

is_731942

暂无简介

举报
基于单片机的全开电水热水器的设计基于单片机的全开电水热水器的设计 沈阳理工大学 题 目: 基于单片机的全开电水热水器的设计 系 别: 信息与工程学院 专 业: 测控技术与仪器 学生姓名: 闫圣坤 指导教师: 耿 欣 2011年 06月 15日 摘 要 热水器是日常生活中的常用电器,此次课题的研究对象为一种新型的电热水器,与太阳能热水器相比,它功能强,成本低,是普通家庭的实用产品。 本设计研制了一个智能化的热水器系统,它在以往设计的热水器的基础上增加了微型单片机控制芯片,并且能够实现温度控制与显示、水位控制与显示功能,并可以调整温度上下限与水位下限...
基于单片机的全开电水热水器的设计
基于单片机的全开电水热水器的设计 沈阳理工大学 目: 基于单片机的全开电水热水器的设计 系 别: 信息与工程学院 专 业: 测控技术与仪器 学生姓名: 闫圣坤 指导教师: 耿 欣 2011年 06月 15日 摘 要 热水器是日常生活中的常用电器,此次课题的研究对象为一种新型的电热水器,与太阳能热水器相比,它功能强,成本低,是普通家庭的实用产品。 本设计研制了一个智能化的热水器系统,它在以往设计的热水器的基础上增加了微型单片机控制芯片,并且能够实现温度控制与显示、水位控制与显示功能,并可以调整温度上下限与水位下限,采用电位器与DS18B20来分别实现对水位与温度的采集,采用STC12C5A60S2实现对数据的分析与处理,系统完整功能完善,是新一代智能产品。 本文根据设计要求,介绍了总体设计、系统硬件与系统软件,重点介绍了系统功能模块设计的详细思路和实现方法,以及对系统关键技术详细说明,实现了单片机控制下的简单要求与实现过程,从科学、实用的角度实现了系统功能。 关键词:单片机;水位控制;温度控制;智能化 I Abstract Water heater is used in daily life, this topic research electric object for a new type of electric water heater, compared with solar energy water heater, it strong function, low cost, is ordinary family practical products. The design of the water heater developed an intelligent design system, which is in the past on the basis of the water heater increased miniature single-chip microcomputer control chip, and can realize temperature control and display, water level control and display, and can adjust the temperature upper limit, with water level by potentiometer and DS18B20 to realized respectively with the collection of temperature of water level, the STC12C5A60S2 make the data analysis and processing, the system is complete with perfect functions, a new generation of intelligent products. Based on the design requirements, describes the overall design, system hardware and system software, focusing on the detailed design of system function module ideas and methods, as well as key technical details of the system to realize the simple requirements of SCM under the control of the process and implementation , from a scientific and practical point of view to achieve the system functionality. Keywords: SCM; Water level control; Temperature control; intelligent II 目 录 1 引 言 ............................................................................................................................... 1 2 系统的总体方案设计 ...................................................................................................... 3 2.1 控制原理................................................................................................................ 3 2.2 控制功能................................................................................................................ 4 2.3 方案设计................................................................................................................ 4 3 系统硬件设计 ................................................................................................................. 6 3.1 单片机的硬件结构及特点 ..................................................................................... 6 3.1.1 单片机的引脚介绍 ........................................................................................ 6 3.1.2 单片机最小系统的设计 ............................................................................... 9 3.2 显示部分的电路设计 .......................................................................................... 10 3.3 按键部分的电路设计 .......................................................................................... 12 3.3.1 键盘的选择 ................................................................................................ 12 3.3.2 键盘的电路设计 ........................................................................................ 12 3.4 温度检测电路设计 .............................................................................................. 14 3.4.1 温度传感器的选用..................................................................................... 15 3.4.2 使用方法及电路设计 ................................................................................. 15 3.5 液位检测电路设计 .............................................................................................. 18 3.5.1 电位器的选用 ............................................................................................ 18 3.5.2 电路设计 .................................................................................................... 18 3.6 电源部分的设计 .................................................................................................. 19 4 系统的软件设计 ............................................................................................................ 21 4.1 控制系统的主程序功能及流程图 ....................................................................... 21 4.1 主程序流程图 ............................................................................................... 21 4.2 按键程序流程图 ........................................................................................... 22 4.3 定时器程序流程图 ....................................................................................... 25 4.4 显示程序流程图 ........................................................................................... 26 4.5 A/D转换程序流程图 .................................................................................... 27 III 5 调试 ............................................................................................................................... 29 5.1 硬件部分调试 ...................................................................................................... 29 5.2 软件部分调试 ...................................................................................................... 29 5.3 整体调试.............................................................................................................. 30 结 论 ................................................................................................................................... 31 致 谢 ................................................................................................................................... 32 参考文献 ............................................................................................................................. 33 附录 A 英文文献 ............................................................................................................. 34 附录 B 中文翻译 ............................................................................................................. 40 附录 C 电路图 ................................................................................................................... 45 附录 D 程序 ...................................................................................................................... 46 IV 沈阳理工大学学士学位 1 引 言 热水器是现代家庭生活中的必需品, 目前中国大约有3,5亿个家庭,每个家庭至少需要一台热水器每5,6年更换一次,可想而知中国热水器市场有多大~ 热水器分为电热水器、燃气热水器、太阳能热水器三大类。燃气事故的多发性,对消费者的心理影响,安装环境的要求和燃气价格的上涨,使得燃气热水器销量在近几年急速下降;太阳能热水器因本身局限性无法全面推广,而电热水器借此市场良机迅速增长,在商场出售能统计到的比例约占热水器60%,成为行业龙头。 电热水器可分为储水式电热水器、快速电热水器两种。随着人民生活水平的提高,居住环境的改善,消费者时间观念的增强和消费观念的改变;加上中国各地电网建设和改造;以及国家政策全力推动电厂的建设,电价也将随之降低,使快速电热水器(即热式电热水器和速热式电热水器)在中国的使用条件得到满足,为快速电热水器市场普及带来了更大的发展契机,快速电热水器市场即将显示出强劲的发展态势,正引发一场热水器市场变革~ 参照国外的经验,预计未来五年,快速电热水器以其安全、节能、快捷、小巧、方便等特点,将成为中国热水器市场的主流产品,而从消费者的角度考虑对热水器的要求也日益见长。 (1)安全是电热水器永恒的主题。 电热水器属于比较特殊的产品,不同于其他家用电器产品,电热水器的安全问题涉及到消费者的生命。由于电热水器的加热管置于内胆中的水中,而在使用电热水器时用户又全身潮湿,电阻很低,这时如果电热水器稍微有很小的泄漏电流就可能发生生命危险。要知道,没有任何东西能与生命的价值相提并论。这也是消费者在选购电热水器产品时所重点考虑的因素。科学技术的发展必须为消费者带来好处,首先必须为生命提供保障。 (2)节能是电热水器发展的重点。 众所周知,电热水器是家电产品的耗电耗水“大户”,据有关统计数据显示,目前我国居民使用的家电产品中仅热水器的保有量就大约有1.5亿台,城市居民家庭热水器的平均拥有量达71.5%。 去年以来,“电荒”、“水荒”席卷了大半个中国之后,电热水器的节能问题尤为广大消费者和生产企业所重视。目前已经有近20% 1 沈阳理工大学学士学位论文 的电热水器生产企业通过了国家权威部门的节能认证。节能家电不是概念性炒作,而必须通过国家相关认证。 (3)智能化、数字化是电热水器行业大势所趋。 近年来彩电、空调、影碟机等家电产品,陆续进入了“智能化”、“数字化”时代。同样地,电热水器产品的发展也纷纷走上了智能化和数字化道路。 此设计的目的在于:通过运用所学的单片机系统,来实现热水器的各项功能,弥补前人在热水器方面的缺点与不足,真正体现热水器的智能化与简单化,并加 [1]强热水器的安全性与提高其性价比,让广大消费者能放心使用,安心享用。 2 沈阳理工大学学士学位论文 2 系统的总体方案设计 2.1 控制原理 本设计采用单片机芯片STC12C5A60S2 来实现对整个功能的控制,他不仅体积小而且灵敏度高,性价比高,稳定性好,是单片机中首选的芯片,通过读温度与水位的采样,来判断其执行的功能,温度的采样采用温度传感器DS18B20来完成,该传感器价格低廉,采用一线总线技术,硬件连接简单,使用方便,稳定性 55,,125摄氏度,能准确的适用在热水器好,精度高,测量温度的范围大,在, 上,对于水位的控制,我首先考虑到使用压力传感器,但是压力传感器的造价高,安装起来不方便,最后我采用水瓢来控制电位器的滑动变阻器,从而输出不同的线性电压,在通过A/D转换来实现模数转换的方式实现对水位的控制,从而将水位值转换成数字量输入单片机进行处理,外观图如图2.1所示。 注水电位口 器 浮 漂 水 位 图2.1 外部结构图 对于主控芯片的选择,有两种可以选择的方案,方案如下; 方案一、使用普通51系列单片机,外部加上A/D转换芯片,对其进行水位的测量,电位器的电压经过A/D转换芯片,转换为数字量输入单片机,单片机经过转换后显示在数码管上,这样会使硬件部分的电路过于复杂,同时外挂的A/D转换芯片价格过高,性价比较低。 方案二、使用具有A/D转换功能的单片机芯片,直接将电位器返回电压接入 3 沈阳理工大学学士学位论文 单片机A/D转换通道,单片机将电压转换为数字量,经过处理后,显示在数码管上,这样设计不仅可以减小硬件的复杂程度,而且还可以增加程序的可靠程度,性价比较高。 从性价比与设计便捷性的方面考虑,最后选择具有A/D转换功能的单片机芯片,型号为STC12C5A60S2,作为微控制芯片使用。 2.2 控制功能 设计中主要以单片机的控制为主,控制的主要功能有:自动进水功能、自动停止进水功能、显示功能、自动加热功能、自动停止加热功能,而对于这些功能的控制都由单片机系统来完成,控制的流程为:按键控制设定温度值与水位值并开始加热,单片机开始像温度传感器与A/D转化芯片提取温度码与电压转码,然后经过转换处理,将其转换成温度值与水位值并进行显示与比较,产生一系列动作,当达到温度上限时单片机控制热水器停止工作,并指示灯显示熄灭;当到达温度下限时,开始加热并发出指示灯点亮;当达到水位下限时,单片机控制进水阀开始进水,停止加热;当达到水位上限时停止进水,开始加热。 2.3 方案设计 在总结之前热水器发展的基础上,另辟新境,让热水器系统的功能更完善,价格更低廉,使用更方便,基于这几点的要求,考虑此设计主要分为三大部分: (1)主控制部分 对于主控制部分,考虑到要完成的任务量较大,较复杂,所以使用单片机芯片来控制整个系统的完成,由于单片机的控制功能强大,为在设计中带来许多便捷的地方,并且单片机为可编程系统,还可以通过软件编程来实现热水器不同的功能。 (2)温度和水位的信息提取部分 温度的提取采用温度传感器DS18B20来实现完成的,对于此传感器大家并不陌生,他是具有一线总线功能的器件,不仅使用简单方便,而且精度很高,并且外接电路简单方便,为系统减少了许多负担。 水位的提取与采集,主要是由电压转换而来,水位系统采用浮子带动连杆,连杆一端连接旋转的电位器,当浮子上下移动带动连杆转动就会使电位器的阻值 4 沈阳理工大学学士学位论文 发生变化,从而使电位器输出的电压发生变化,在通过A/D转换芯片,将电压值转化成数字量输入单片机进行处理后进行显示。 (3)对于输出的控制信号的处理 使用低电压控制高电压的继电器来实现,单片机输出信号对热水器的控制。 总体方案设计功能控制框图如图2.2所示 按键输入 显示输出 单 DS18B20 继 电 器 温度传感器 控 制 片 显示输出 液位检测 机 图2.2 结构框图 5 沈阳理工大学学士学位论文 3 系统硬件设计 3.1 单片机的硬件结构及特点 宏晶公司推出的高档8位单片机。提高了芯片的集成度,性能上大为提高,增加了多种片内硬件功能,并扩展了功能单元的种类和数量。 3.1.1 单片机的引脚介绍 掌握单片机,应首先了解该单片机的引脚,熟悉并牢记各引脚的功能。该单片机中各种芯片的引脚是互相兼容的。制造工艺为HMOS的MCS-51的单片机都采用40只引脚的双列直插封装DIP方式。目前大多树为此类封装方式。制造工艺为CHMOS的8031/89C51/87C51除采用DIP封装方式以外,还采用方形封装方式。 [2] [3] 如图3.1所示 139P10/AD0P00238P11/AD1P01337P12/AD2P02436P13/AD3P03535P14/AD4P04634P15/AD5P05733P16/AD6P06832P17/AD7P07 1321INT1P201222INT0P211523T1P221424T0P2325P241926X1P251827X2P2628P2731EA/VP40VCC10RXD911RESETTXD30ALE/P1729RDPSEN1620WRGND STC12C5A60S2 图3.1 STC12C5A60S2引脚图 40只引脚按其功能来分,可分为如下4类: (1)电源引脚:Vicki、Vss。 (2)时钟引脚:XTAL1、XTAL2。 (3)控制引脚:/PSEN、ALE、/EA、RESET。 (4)I/O口引脚;P0、P1、P2、P3、为4个8位I/O口的外部引脚。 6 沈阳理工大学学士学位论文 [7]下面结合图3.1来介绍各引脚的功能。 电源及时钟引脚 1、电源引脚 电源引脚接入单片机的工作电源 (1)Vcc(40引脚):接+5V电源。 (2)Vss(20引脚):接地 2、时钟引脚 2个时钟引脚XTAL1,XTAL2外接晶体与片内的反相放大器构成了1个振荡器,它为单片机提供了时钟信号。2个时钟引脚也可以外接独立的晶体振荡器。XTAL1是片内振荡器的反相放大器输入端,XTAL2则是输出端,使用外部振荡器时,外部振荡信号应直接加到XTAL2,而XTAL1悬空。内部方式时,时钟发生器对振荡脉冲二分频,如晶振为12MHz,时钟频率就为6MHz。晶振的频率可以在1MHz-24MHz内选择。电容取30PF左右。型号同样为STC12C5A60S2的芯片,在其后面还有频率编号,有12,16,20,24MHz可选。大家在购买和选用时要注意了。 (1)XTAL1(19引脚):接外部晶体的1个引脚。该引脚内部是1个反相放大器的输入端。这个反相放大器构成了片内振荡器/如果采用外接晶体振荡器时,此引脚应接地。 (2) XTAL2(18引脚):接外部晶体的另一端,在该引脚内部接至内部反相放大器的输出端。若采用外部时钟振荡器时,该引脚接收时钟振荡器的信号,即 [4][5]把此信号直接接到内部时钟发生器的输入端 。 3、控制引脚 此类引脚提供控制信号,有的引脚还具有复用功能。 (1)RST/Vpd(9引脚):RST(RESET)是复位信号输入断,高电平有效。当单片机运行时,在此引脚加上持续时间大于2个机器周期的高电平时候,就可以完成复位操作。在单片机正常工作时,此引脚应为?0.5V低电平;Vpd为本引脚的第二功能,即备用电源的输入断。当主电源Vcc发生故障,降低到某一规定值的低电平时,将+5V电源自动接入RST端,为内部RAM提供备用电源,以保证片内RAM中的信息不丢失,从而使单片机在复位后能继续正常运行。 7 沈阳理工大学学士学位论文 (2)ALE引脚输出为地址锁存允许信号,当单片机上电正常工作后,ALE引脚不断输出正脉冲信号。当单片机访问外部存储器时,ALE输出信号的负跳沿用于单片机发出的低8位地址经外部锁存器锁存的锁存控制信号。即使不访问外部存储器,ALE端仍有正脉冲号输出,此频率为时钟振荡频率的1/6。如果有脉冲信号输出,则单片机基本上是完好的;应该注意的是,每当MCS-51访问外部数据存储器时,在2个机器周期中ALE只出现1次,即丢失1个ALE脉冲。因此,严格来说,用户不宜用ALE做精确的时钟源或定时信号。ALE端可以驱动8个LS型TTL负载;/PROG为本引脚的第二功能。在对片内EPROM型单片机编程写入时,此引脚作为编程脉冲输入端 (3)/PSEN:程序存储器允许输出控制端。在单片机访问外部程序存储器时,此引脚输出脉冲负跳沿作为读外部程序存储器的选通信号。此引脚外接部程序存储器的/OE端。/PSEN端可以驱动8个LS型TTL负载。 如果检查一个MCS-51单片机应用系统上电后,CPU能否正常到外部程序存储器读取指令码,可用示波器插在/PSEN端有无脉冲输出。 (4)/EA/Vpp(Enable Address/Voltage Pulse of Programing,31脚):/EA功能为内外程序存储器选择控制端。 当/EA引脚为高电平时,单片机访问片内程序存储器,但在PC(程序计数器)值超过0FFFH时,即超出片内程序存储器的4KB地址范围,将自动转向执行外部程序存储器内的程序。 当/EA引脚为低电平时,单片机则只访问外部程序存储器,不论是否有内部程序存储器。对于STC12C5A60S2来说,因其无内部程序存储器,这样只能选择外部程序存储器。 Vpp为本引脚的第二功能。在对EPROM型单片机内EPROM固化编程时,用于施加较高的编程电压。对于STC12C5A60S2,则加在Vpp引脚的编程电压为+12V或+5V。 4、I/O口引脚 (1)P0口:8双向位三态I/O口,使用此I/O口作为段选码端。 (2)P1口:使用此I/O口作为按键接口。 (3)P2口:8位准双向I/O口,使用此I/O口作为位选码端。 8 沈阳理工大学学士学位论文 P1口,P2口,P3口是3个8位双向的I/O口,各口线在片内均有固定的上拉电阻。当这3个准双向I/O口作输入口使用时,要向该口先写1,另外准双向I/O [6]口无高阻的“浮空”状态,故称为双向三态I/O口 3.1.2 单片机最小系统的设计 此次设计选用STC12C5A60S2的最小系统,STC12C5A60S2内部有60KB闪烁存储器,芯片本身就是一个最小系统。在能满足系统的性能要求情况下,可优先考虑采用此种方案。用这种芯片构成的最小系统简单很可靠。用STC12C5A60S2单片机构成的最小应用系统时,只要将单片机接上时钟电路和复位电路即可,该系统与其他最小系统相比,省去了外扩程序存储器的工作,该最小应用系统只能用作一些小型的数字量的测控单元。单片机最小系统电路如图3.2所示。 139P10/AD0P00238P11/AD1P01337P12/AD2P02436P13/AD3P03535P14/AD4P04634P15/AD5P05733P16/AD6P06832P17/AD7P07 1321INT1P201222INT0P21C122uf1523T1P221424T0P2325P24C222uf1926Y1X1P25182712MHZX2P2628+5VP2731EA/VP40VCC10RXD911S19RESETTXDC330+ALE/P10uf1729PB38RDPSEN1620PB37WRGND STC12C5A60S2 R1 10k 图3.2 单片机最小系统 (1) 复位电路 微处理器在上电、掉电及低压供电时,监控器产生脉冲信号这可以保证微处理器实现上电自动复位:当供电压过低时,防止CPU失控。电源电压Vcc升到1V时RESET引脚变为低电平,随着Vcc的继续升高,RESET一直保持低电平。当Vcc高于复位门限电平时,RESET并不马上变为高电平,而是要滞后一个复位脉 9 沈阳理工大学学士学位论文 冲宽度(约200ms)后再变为高电平。当Vcc低于复位门限电平,RESET引脚马上变成低电平,即使以后Vcc恢复且高于复位门限电平,RESET也不马上变成高电平,而是要延迟一个复位脉冲宽度。掉电时,Vcc只要低于复位门限电平,RESET立即变为低电平。 (2) 晶振电路 本单片机芯片所用晶振电路由12MHz晶振与两个22μf的电容组成,为单片机 [7]提供外来的震荡周期,通过改变晶振与电容的大小可以改变单片机的运行周期 。 3.2 显示部分的电路设计 LED显示器结构常用的LED显示器分为8段(或7段,8段比7段多了1个小数点“dp”段)。每一个段对应1个发光2极管。这种显示器有共阳极和共阴极2中,共阴极LED显示器的发光二极管的阴极连接在一起,通常将公共阴极接地。当某个发光二极管的阳极为高电平时,发光二极管点亮,相应的段被显示。同样,共阳极LED显示器的发光二极管的阳极连接在一起,通常此公共阳极接正电压,当某个发光二极管的阴极接低电平时,发光二极管被点亮,相应的段被显示。为了使LED显示器显示不同的符号或数字,就要把不同段的发光二极管点亮,这样就要为LED显示器提供代码,因此这些代码可使LED相应的段发光,从而显示不 [6]同字型,因此该代码称之为段码(或成为字型码)。 (1) 显示器的工作原理 由N个LED显示块可拼连接成N位的LED显示器,N个LED显示块有N位为线和8xN根段码线。段码线控制显示字符的字型,而位选线位各个LED显示块中各段的公共端,它控制该LED显示位的亮或暗。 (2) 动态显示方式:在多位LED显示时,为简化硬件电路,通常将所有位的段码线相应段并联在一起,由一个8位I/O口控制,形成段码线的多路复用,而各位的共阳极或共阴极分别由相应的I/O线控制,形成各位的分时选通。若要各位LED能够同时显示出与本位相应的显示字符,就必须采用动态显示方式,即在某一时刻,只让某一位的位线处于选通状态,而其他各位的位选线处于关闭状态,同时,段码线上输出相应位要显示的字符的段码。这样 在同一时刻,4位LED中的只有选通的哪一位显示出字符,而其他3位则是熄灭的,同样在下一时刻,只让下一位选线处于选通状态,而其他各位的位选线处于关闭状态, 在段码线上舒 10 沈阳理工大学学士学位论文 服将要显示字符的段码,则同一时刻,只有选通位显示出相应的字符,而其他各位则是熄灭的,如此循环下去,就可以使各位显示出相应的字符,虽然这些字符是在不同时刻出现的,而在下一时刻,只有一位显示,其他各位熄灭,但由于LED 显示器的余辉和人眼的视觉暂留作用,只要每位显示间隔足够短,则可以造成多为同时亮的假象,达到同时显示的效果。 LED不同位显示的时间间隔应根据实际情况而定。发光二极管从导通到发光有一定的延时,导通时间太短,则发光太弱,人眼无法看清,但也不能太长,因为要受限于临界闪烁频率,而且次时间越长,占用CPU时间也越长多。另外,显示位数增多,也将占用大量的CPU时间,因此动态显示实质是以牺牲CPU时间来 换取器件的减少的。 而对于此设计采用动态扫描方式作为显示,这样做的好处是,显示硬件无须外购芯片成本低,并且硬件电路连接简单,缺点是所需的I/O口线较多,软件编程循环容易与程序发生冲突,为了提高显示管的亮度,采用共阳极数码显示管,采用74HC573芯片作为驱动部分,74HC573器件输入是的CMOS输出兼容的;加上上拉电阻,他能和LS/ALSTTL数车兼容,操作电压:2.0V-6.0V。输出电流为1.0uA。其中使用单片机的P0口控制数码显示管的段码选择,数码管使用条件:1.段及小数点上加限流电阻;2使用电压:根据发光颜色决定;3使用电流:静态总电流80mA,动态平均电流4-5mA,峰值电流100mA。使用P2口做为位选码端, [5][6] 显示部分的硬件电路如图3.3所示。 11 沈阳理工大学学士学位论文 6+5V8LED8+5V9124-LED-1U4120OCVCC11103CGND510P212191D1QP2231812D2QP2341723D3QP2451644D4QP2561575D5Q11P267146D6QP278137D7QP289128D8Q+5V74HC573 U5120OCVCC1110CGND 219CO1P011D1Q318CO2P022D2Q417CO3P033D3Q516P04CO44D4Q615P05CO55D5Q714P06CO66D6Q813P07CO77D7Q912P08CO88D8Q 74HC573 图3.3 数码显示电路图 3.3 按键部分的电路设计 3.3.1 键盘的选择 常用的键盘一般分为两种:行列式按键键盘与独立式按键键盘;例如:常用的电脑键盘,家用计算器键盘都属于行列式键盘,行列式键盘的优点就是使用单片机的I/O口较少,而且连接电路简单;而独立式按键每一个按键需要占用一个独立的I/O口,用于按键较少的硬件电路中,综上说述,由于设置使用的键盘个数较少,所以使用独立式按键。 3.3.2 键盘的电路设计 本设计使用按键的电路图如图3.4所示,图中的SXR1为10K的上拉电阻排,将按键的公用端接到地,在无按键动作的状态下,由于上拉电阻排的作用,单片 12 沈阳理工大学学士学位论文 机的P1口全部为高电平,如果S1按键被按下,则单片机的I/O口相当于被输入一个低电平信号,通过判断这个信号的高低电平来判断按键是否被按下。 VCC1SXR1 COP181S1P172P163P154S2P145P136P127S3P118 电阻排S4 S5 S6 图3.4 键盘电路图 单片机应用系统中,键盘扫描只是单片机的工作内容之一。单片机在忙于各项工作任务时,如何兼顾键盘的输入,取决于键盘的工作方式。键盘工作方式的选取应根据实际应用系统中CPU工作的忙、闲情况而定。其原则是既要保证能即使响应按键操作,又不要过多的占用CPU的时间,通常,键盘工作方式有三种:即编程扫描、定时扫描、中断扫描。 1、编程扫描方式(查表) 这种方式就是只有当单片机空闲时,才调用键盘扫描子程序,反复的扫描键盘,等待用户从键盘上输入命令或数据,来响应键盘的输入请求。键盘采用编程扫描方式工作,P1口高2位输出逐行扫描信号,在由P1口输入8位列信号,均为低电有效。 首先:P1口高2位拉低状态,置全0来扫描行,若P1低六位输出全1,则说明键盘无键按下;若不完全为1,则说明键盘有可能有键按下。 其次:用软件延时10ms来消除按键抖动的影响。确实有按键按下时,进行下一步。 再次:发逐行扫描,即先将第一行置0扫描,然后判断是否有列被置0,如果有则在这一行有按键按下,则将P1的键值返回,然后进行查表;如果没有按键按 13 沈阳理工大学学士学位论文 下,则扫描下一行,如果没有按键按下则返回值为0,也就是没有按键动作; 最后:等待按键释放后,在进行按键功能的处理操作。 2、定时扫描的工作方式 单片机对键盘的扫描也可以采用定时扫描方式,即每隔一定的时间对键盘扫描一次。 在这种扫描方式中,通常利用单片机内的定时器,产生10ms的定时中断,CPU响应定时器溢出中断请求,对键盘进行扫描,在有键按下时识别出该键,并执行相应键的处理功能程序。 3、中断工作方式 为了进一步提高单片机扫描键盘的工作效率,可采用中断扫描方式,即只有在键盘有按键按下时,才执行键盘扫描程序并执行该按键功能程序,如果无按键按下,单片机将不理睬键盘。 本设计中使用编程扫描的方式来完成对按键的功能的判断与执行。 3.4 温度检测电路设计 本次设计所采用的温度传感器为当今最流行畅销的DS18B20,该传感器不仅硬件接口简单而且价格低廉,灵敏度高,体积小,具有耐磨耐碰,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域,并且实现一线总线技术,只需要一根线就可以完成所有的命令与数据的传输,外形如图3.5所示: 14 沈阳理工大学学士学位论文 图3.5 DS18B20外形图 3.4.1 温度传感器的选用 1.(1)独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。 2)测温范围 ,55?,,125?,固有测温分辨率0.5?。 ( (3)支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现多点测温 (4)工作电源: 3~5V/DC (5)在使用中不需要任何外围元件 (6)测量结果以9~12位数字量方式串行传送 (7)适用于DN15~25, DN40~DN250各种介质工业管道和狭小空间设备测温 (8)标准安装螺纹 M10X1, M12X1.5, G1/2”任选 (9)PVC电缆直接出线或德式球型接线盒出线,便于与其它电器设备连接。 2. 传感器的应用场合 1)该产品适用于冷冻库,粮仓,储罐,电讯机房,电力机房,电缆线槽等 ( 测温和控制领域 (2)轴瓦,缸体,纺机,空调,等狭小空间工业设备测温和控制。 (3)汽车空调、冰箱、冷柜、以及中低温干燥箱等。 (4)供热/制冷管道热量计量,中央空调分户热能计量和工业领域测温和控制。 3.4.2 使用方法及电路设计 15 沈阳理工大学学士学位论文 1、接线说明 独特的一线接口,只需要一条口线通信 多点能力,简化了分布式温度传感应用 无需外部元件 可用数据总线供电,电压范围为3.0 V至5.5 V 无需备用电源 测量温度范围为-55 ?C至+125 ? 。华氏相当于是-67 ? F到257华氏度 -10 ? C至+85 ? C范围内精度为?0.5 ?C,温度传感器可编程的分辨率为9~12位,温度转换为12位数字格式最大值为750毫秒 用户可定义的非易失性温度报警设置 应用范围包括恒温控制,工业系统,消费电子产品温度计,或任何热敏感系统,温度与12为返回值对应如表3.1所示: 表3.1 数据温度对照表 温度?C 数据输出(二进制) 数据输出(十六进制) +125 00000000 11111010 00FA -55 00000000 00110010 0032 +1/2 00000000 00000001 0001 0 00000000 00000000 0000 -1/2 111111111 11111111 FFFF -25 111111111 11001110 FFCE -55 111111111 10010010 FF92 12位数据中后四位为温度值的小数部分二进制的一位数代表十进制的0.5,而剩下8位为温度显示的整数部分最大值为00FA,当返回值大于FF92实此时温度为负值,对应对温度值进行处理就可得到实际的测量温度; 2、DS18B20内部结构 主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。该装置信号线高的时候,内部电容器 储存能量通由1线通信线路给片子供电,而且在低电平期间为片子供电直至下一个高电平的到来重新充电。 DS18B20的电源也可以从外部3V,5.5V的电压得到,结构图如图3.6所示 16 沈阳理工大学学士学位论文 图3.6 DS18B20的内部原理图 3、DS18B20控制功能命令 读ROM、ROM匹配、搜索ROM、跳过ROM、报警检查。这些指令操作作用在没有一个器件的64位光刻ROM序列号,可以在挂在一线上多个器件选定某一个器件,同时,总线也可以知道总线上挂有多少,什么样的设备。 若指令成功地使DS18B20完成温度测量,数据存储在DS18B20的存储器。一个控制功能指挥指示DS18B20的演出测温。测量结果将被放置在DS18B20内存中,并可以让阅读发出记忆功能的指挥,阅读内容的片上存储器。温度报警触发器TH和TL都有一字节EEPROM 的数据。如果DS18B20不使用报警检查指令,这些寄存器可作为一般的用户记忆用途。在片上还载有配置字节以理想的解决温度数字转换。写TH,TL指令以及配置字节利用一个记忆功能的指令完成。通过缓存器读寄存器。所有数据的读,写都是从最低位开始。 4、DS18B20的控制命令 a.温度转换 44H 启动DS18B20进行温度转换 b.读暂存器 BEH 读暂存器9个字节内容 c.写暂存器 4EH 将数据写入暂存器的TH、TL字节 d.复制暂存器 48H 把暂存器的TH、TL字节写到E2RAM中 e.重新调E2RAM B8H 把E2RAM中的TH、TL字节写到暂存器TH、TL字节 f.读电源供电方式 B4H 启动DS18B20发送电源供电方式的信号给主CPU 17 沈阳理工大学学士学位论文 5、DS18B20的初始化步骤如下: (1)先将数据线置高电平“1”。 (2)延时(该时间要求的不是很严格,但是尽可能的短一点) (3)数据线拉到低电平“0”。 (4)延时750微秒(该时间的时间范围可以从480到960微秒)。 (5)数据线拉到高电平“1”。 (6)延时等待(如果初始化成功则在15到60毫秒时间之内产生一个由DS18B20所返回的低电平“0”。据该状态可以来确定它的存在,但是应注意不能无限的进行等待,不然会使程序进入死循环,所以要进行超时控制)。 (7)若CPU读到了数据线上的低电平“0”后,还要做延时,其延时的时间从发出的高电平算起(第(5)步的时间算起)最少要480微秒。 将数据线再次拉高到高电平“1”后结束。 本设计中的测温部分的电路图如图3.7所示,其中1引脚接高电平,3引脚接地,单片机的P3.7口接温度传感器DS18B20的通信2口,通过一个5.1K的上拉电阻将该I/O口上拉后,便可通过指令进行通信。 DR13芯插座+5V 5.1kRd1P38 3 21 图3.7 温度传感器电路图 3.5 液位检测电路设计 3.5.1 电位器的选用 由于液位传感器价格昂贵,对于液位测量部分设计中使用电位器来代替液位传感器,液位传感器返回的信号为0-~5V的直流信号,所以选用电位器作为替代最为可靠,通过旋转电位器的旋转端,来调整电压值,变化范围为0~5V。 3.5.2 电路设计 水位测量模拟电路如图3.8所示,图中PR1为10K电位器,通过旋转电位器 18 沈阳理工大学学士学位论文 来改变P18口的输出电压,电位器采用串联电阻分压的方式,调整时可以输出0~5V的直流电压。 +5V10KPR1 P18 图3.8 水位测量模拟电路图 3.6 电源部分的设计 本设计中采用7805与外接12V变压器来组成5V电源,对单片机进行供电,使用7805供电的优点是,工作输入电压在7,35伏范围内能准确输出5V电压,并且外接电路简单可靠,性价比高;电源部分的硬件电路如图3.9所示。 U2 12VVOUTIN+++220V变压器12VGND--C47805+3C25V104470ufC1C3+104470uf - 图 3.9 电源电路图 三端稳压集成电路7805外形如图3.9所示,从做到右引脚排列依次为1、2、3引脚,1引脚功能为输入端,3为公共接地端,2为输出端,输入电压值在7V,35V之间,但是当输入电压值大于17V时应为7805加上散热片,否则容易由于过热而导致烧坏。 19 沈阳理工大学学士学位论文 图3.10 7805外形图 电子产品中常见到的三端稳压集成电路有正电压输出的78××系列和负电压输出的79××系列。故名思义,三端IC是指这种稳压用的集成电路只有三条引脚输出,分别是输入端、接地端和输出端。它的样子象是普通的三极管,TO-220的标准封装,也有9013样子的TO-92 封装。 用 78/79系列三端稳压IC 来组成稳压电源所需的外围元件极少,电路内部还有过流、过热及调整管的保护电路,使用起来可靠 、方便 ,而且价格便宜。该系列集成稳压IC型号中的78或79后面的数字代表该三端集成稳压电路的输出电压,如7806表示输出电压为正6V,7809表示输出电压为负9V。 20 沈阳理工大学学士学位论文 4 系统的软件设计 4.1 控制系统的主程序功能及流程图 软件系统主要完成下述主要功能: (1)初始化程序的设置 (2)按键的扫描 (3)读取温度值与取A/D转换的8位的二进制值 (4)对取回值转换成所需的温度与水位 (5)显示温度值与水位 (6)判断是否到设定温度与设定水位 4.1 主程序流程图 主程序完成程序的初始化部分,首先初始化,然后定义单片机的A/D转换口,本设计中使用的单片机是具有A/D转换功能的STC12C5A60S2单片机,使用此单片机就会省去使用一个外挂的A/D转换芯片,使用此单片机的A/D转换步骤为,定义A/D转换的转换口,将A/D转换的寄存器清0,打开A/D转换电源,延时4ms,等待A/D转换上电,然后开启定时器0,开始定时,进入按键执行程序,此后将会一直执行按键执行程序,程序流程图如图4.1所示。 21 沈阳理工大学学士学位论文 开 始 初始化 定义A/D转换口 A/D寄存器清0 开A/D转换电源 延时4ms 定时器0设置 按键程序 图4.1 主程序流程图 4.2 按键程序流程图 按键程序流程图如图4.2所示,该程序主要完成对按键的判断与执行操作,单片机的P1口接入按键程序,使用的按键程序为独立按键,6个按键,这样将占用6个I/O,分别为P1.0~P1.5,而P1.7口留给A/D转换使用,将每一个I/O口接一个10K的上拉电阻,当有I/O口的值为低电平时则证明该I/O口有按键被按下,所以程序只要判断哪个I/O口为低电平,就能判断出哪个按键被按下,由于程序中的A/D转换口与按键口都为P1口所以为了使按键不受到干扰,使用的判断方式不能对整个I/O口进行操作,所以当为单片机的I/O 口赋值为1时,只对用到的单片机的I/O口进行赋值,首先将按键的I/O口赋值为1,如果有按键按下,然后延时50ms,然后再次将按键的I/O口置1,再次判断是否有按键按下,如果有按键,则证明确实有按键动作,则将此时的按键值进行组合,然后进行查询程序,将按键键值码储存后开始查询,这样就会将对应的按键值判断出来,然后判断如果在设置值界面,则进入按键值处理程序,该程序将会对程序中对于需要修改的值进行加减处 22 沈阳理工大学学士学位论文 理,然后进入判断按键是否松开,然后程序结束并返回。 按键1:进入设置界面,第一次按下进入设置温度界面,第二次按下进入设置 水位界面。 按键2:返回功能,返回主测量界面。 按键3:在设置界面,将光标处的值加1。 按键4:在设置界面,将光标处的值减1。 按键5:调整闪烁位左移。 按键6:调整闪烁位右移。 23 沈阳理工大学学士学位论文 开 始 N 有按键动作 Y 延时50ms 按键I/O口复位 N 再次判断 Y 组合按键值 N N 0X01 0X08 Y Y 设置值减1 设置界面 N 0X10 0X02 Y Y N 光标左移 返回主界面 N N 0X20 0X04 Y Y 光标右移 设置值加1 返 回 图4.2 按键程序流程图 24 沈阳理工大学学士学位论文 4.3 定时器程序流程图 定时器0程序完成程序的定时、累计时间、A/D转换部分,定时器0的设置,使用定时/计数0,定义为定时器0、方式1,为16位定时寄存器装初始值,由于16位定时器在晶振为12MHz的状态下的定时器间最长为65536us,为加计数状态,达到计数值65536则跳到中断再次进行初始值的重装,所需要的定时器值为1ms,便于计算,所以初始值为65536-1000,则定时初始值为64536,将其高8位赋值TH0,低8位赋值TL0,然后将定时器0的累计值加1,主要是为了增加定时时间,而当定时器0的值为半秒时,这时定时器的累计值为0.5s,然后将定时器累计值归0,重新定时,然后将半秒位取反,半秒位用来控制在数码管作调整时,闪烁光标位的定时,然后进入显示程序,显示程序中包含A/D转换程序,然后进行与设定值的比较程序,最后打开定时器0,跳出中断程序,流程图如图4.3所示。 25 沈阳理工大学学士学位论文 开 始 停止定时器0 赋定时器初始值 定时累计值加1 N 累计值=500 Y 定时累计值归0 半秒位取反 显示程序 比较程序 开定时器0 返 回 图4.3 定时器0流程图 4.4 显示程序流程图 显示子程序完成对显示内容的更新,A/D转换程序的运行,同时选择显示界面与切换各个显示界面,进入程序后,首先判断为显示测量温度与A/D转换值界面,还是显示调整值界面,如果为显示温度与A/D转换值界面,先消隐然后位选、段选,之后判断是否点亮小数点,进行A/D转换程序,采集A/D转换值,如果是显示调整值界面,在消隐位选后,判断是否闪烁,如果闪烁通过半秒屏蔽位来控制,半秒停止显示,半秒显示数值,这样就达到了闪烁的目的,然后将显示控制 26 沈阳理工大学学士学位论文 位加1,判断显示控制位如果为4,则在重新返回重新显示,然后返回。 开 始 N 显示界面判断 Y 消隐 消隐 位选 位选 N 段选 是否闪烁 Y N 显示小数点 显示段码值 关闭显示 Y 显示小数点 A/D转换 温度转换 显示位加1 N 显示位为4 Y 显示位归0 返 回 图4.4 显示子程序流程图 4.5 A/D转换程序流程图 本设计中使用STC12C5A60S2单片机芯片,该芯片具有A/D转换功能,使用 27 沈阳理工大学学士学位论文 单片机的P1.7口作为A/D转换口,在初始化设置中已将A/D转换进行过初始化,所以在提取AD转换值时,步骤为:开始A/D转换,输入A/D转换指令,然后做一个4个机器周期的延时,之后等待A/D转换的完成,如果转化完成,则停止A/D转换,储存转换值,然后返回,流程图如图4.5所示。 开 始 开始A/D转换 延时4个机器周期 N 等待转换完成 Y 停止A/D转换 储存A/D转换值 返 回 图4.5 A/D转换程序 28 沈阳理工大学学士学位论文 5 调试 5.1 硬件部分调试 硬件部分设计使用Protel 99 SE作为硬件设计软件,通过软件绘制电路图,选择元件,然后使用开发板,自己焊接调试,硬件部分模块都有:单片机最小系统、显示电路、键盘电路、温度检查电路、水位检测电路,下面分别对如下主要模块的调试进行讲解。 1. 单片机最小系统 单片机最小系统为单片机的最小组成部分,该部分由晶振电路与复位电路构成,首先焊接单片机芯片引脚座,40引脚,之后按照电路图分别焊接复位电路,晶振电路,其中的部分元件为了节省空间,将其放在芯片座内,这样更加美观整洁,焊接完成后使用万用表进行检测,按照电路图电路部分,电路检测完成后,对该系统进行测试,通电后,使用电脑对该芯片进行下载,找一个简单程序下载即可,如果下载成功,证明单片机最小系统焊接成功,在焊接时一定注意单片机的31引脚需要接高电平,这是关键。 2. 显示电路的调试 显示电路由LED共阳极数码管与驱动芯片74HC573构成,焊接时,一定将单片机的P0口加上拉电阻,否则,单片机的P0口的驱动能力不足以满足LED的驱动,而导致显示不明显,或不正常,焊接后要对每一条线路进行检查,查看是否连接无误,之后先用5V直流电源,对数码管的控制端进行检测,检测成功后,可以下载一个显示程序进行检测。 3. 键盘电路的测试 键盘电路使用独立按键,其焊接比较简单,先将P1口焊接一个上拉电阻排,然后将I/O口对应独立按键的接口,之后使用万用表测量通断,旋钮打到蜂鸣档位,按下按键,蜂鸣器如果蜂鸣,证明接通,否则进行检查,是否有虚焊点。 5.2 软件部分调试 软件部分使用模块化的方式,即各个模块分开编程测试,最后将其整合在一起,其模块划分如下: 1. 显示模块:对数码管进行扫描显示,计算扫描时间,进行测试,通过软件 29 沈阳理工大学学士学位论文 调试到数码显示正常,将显示模块的入口与出口设置好,以方便其他程序调用,显示程序设置在定时器中,定时器定时2ms,进行一个数码管的显示,显示完一次的时间为8ms。 2. 键盘程序:键盘程序使用软件的编程思维方式,将该按键程序放在入口程序中,放在while(1){};语句中进行不断的循环,通过if语句进行判断,有按键按下,下载程序后,将按键的工作设置为LED的数码管显示,第一个按键显示 ,这样就可以检测按键模块是否正常。 1,最后一个显示6 3. 温度采集:温度采集中重要的部分为DS18B20的初始化设置,只要初始化设置成功,那么提取程序就会相对成功,在初始化时,设置一个LED初始化成功的指示灯,当初始化正确时,LED彩灯点亮,如果不成功则一直初始化,最后进行调试后,达到可以测温的效果。 4. A/D转换部分:本次设计的A/D转换部分为单片机内部自带的A/D转换,通过指令的控制即可完成,其中调试时,使用硬件的电位器进行调试,旋转电位器,将数字值显示到数码显示管上,这样调试成功。 5.3 整体调试 在软件与硬件调试全成功的前提下,将软件部分与硬件部分进行相结合,单片机复位后,先设置水位报警值与温度报警值,温度值设置为30度,水位值任意设置一个值例如为15L,之后用手捏住DS18B20温度传感器,使其温度上升为30度以上,可以停止加热,当低于这个温度,开始加热,之后旋转水位电位器,当水位低于程序内部设置的下限值时开始加水,当全部调试完成后,系统就可以正常使用了。 30 沈阳理工大学学士学位论文 结 论 本设计的热水器控制系统设计成功,能对水位和水温进行测量和控制,并且能够调节温度上下限与水位下限,并能时刻显示水位与温度值,是新一代的智能化产品,该设计的完成与实现,与所学的知识是紧密相连的,通过本次设计,不仅是对所学知识的考查,更是对我的自学能力和收集资料能力以及动手能力的考验。本次设计使我对一个项目的整体设计有了初步认识,还认识了很多器件,并能独立设计出其接口电路,并学会了使用Protel设计电路。本次设计还使我意识到了实践的重要性,在硬件制作和软件调试的过程中,出现了很多问题,最终都是通过反复实验解决的。还有对于程序编辑的逻辑性与可更改性的重要性,通过这次设计,我能准确的编辑C语言程序,不仅锻炼了我编程序的能力,而且还教会了我怎样独立思考问题,完成课题的设计任务,到达完整化、简单化、合理化。 总之,在设计的过程中,无论是对于学习方法还是理论知识,我都有了新的认识,这将激励我在今后再接再厉,不断完善自己的理论知识,提高实践运作能力。 31 沈阳理工大学学士学位论文 致 谢 四年的美好的大学生活仿佛就要在这篇最后的谢辞里缓缓落幕,青春散场,时光依然,有些怅然若失,却又收获满载,回首前路,曾经的点点滴滴在我的心头涌起。 在这里要特别感谢我的指导耿欣老师,感谢你在整个毕业论文的创作过程中对我的帮助和指导,感谢你在我懈怠散漫时的督促与教诲;感谢曾在我的毕业设计中予以我帮助的所有同学和朋友,感谢他们陪我一起走过大学生涯的最后一段,使得我的论文能够如期顺利完成。 在这里,想说的只有俩个字:谢谢,衷心的谢谢。衷心感谢四年里教导过的我的每一位师长,你们严谨致学的态度,高风亮节的品质是我人生路上的楷模和坐标:感谢和我一起共渡三年的兄弟姐妹,感谢你们在我脆弱无助时的温暖的鼓励和真诚的帮助,你们的友情永远是我生命里最珍贵的财富,感谢沈阳理工大学应用技术学院给予我的一切:知识,信任,勇气和力量。虽然刚刚建校不久,还有好多东西不完善,但是却给我带来了许多东西。并在生命里打下了深深的烙印。 通过这次毕业设计,我在老师的辛勤指导和严格要求下,获得了丰富的理论知识,并在设计过程中翻阅了大量的科技文献,针对内容的要求对所学过的专业知识又认真细致的进行巩固和练习,在硬件和软件的组合上认真听取了指导老师的意见,在另一方面极大地提高了实践能力,并对当前的电子领域的研究状况和发展方向有了一定的了解。 人的一生里能有几个四年,在沈阳理工大学应用技术学院年里,让我脱胎换骨,让我华蛹成蝶。写到这里。我的心里充满了希望与力量,未来的路还有很长很长,但我会一直坚定的走下去,向着我的理想,向着我的目标,无论遇到怎样的困难与险阻,我都不会退缩,我会一直带着自己的执着,毅然前行。 谨以此文献给我老师们,感谢他们长久以来对我的默默支持和鼓励。 32 沈阳理工大学学士学位论文 参考文献 [1] 李朝青.单片机原理及接口技术(简明修订版).杭州:北京航空航天大学出版社,1998 [2] 张友德,赵志英,涂时亮(单片微型机原理、应用与实验[M](上海:复旦大学出版社,2000( [3] 阎石.数字电子技术基础(第三版). 北京:高等教育出版社,1989 Prote199高级应用[M](北京:人民邮电出版社,2000( [4] 赵晶( [5] 梁纯,王军(基于MCS一51单片机的LED点阵图文显示屏设计[J](工矿自动化,2005(6):90—92( [6] 李广弟.单片机基础,,,.北京:北京航空航天大学出版社,1994 [7] 楼然苗,李光飞(51系列单片机设计实例[M](北京:北京航空航天大学出版社,2003 33 沈阳理工大学学士学位论文 附录 A 英文文献 Introduction of Programmable controllers From a simple heritage, these remarkable systems have evolved to not only replace electromechanical devices, but to solve an ever-increasing array of control problems in both process and nonprocess industries. By all indications, these microprocessor powered giants will continue to break new ground in the automated factory into the 1990s. In the 1960s, electromechanical devices were the order of the day ass far as control was concerned. These devices, commonly known as relays, were being used by the thousands to control many sequential-type manufacturing processes and stand-along machines. Many of these relays were in use in the transportation industry, more specifically, the automotive industry. These relays used hundreds of wires and their interconnections to effect a control solution. The performance of a relay was basically reliable - at least as a single device. But the common applications for relay panels called for 300 to 500 or more relays, and the reliability and maintenance issues associated with supporting these panels became a very great challenge. Cost became another issue, for in spite of the low cost of the relay itself, the installed cost of the panel could be quite high. The total cost including purchased parts, wiring, and installation labor, could range from $30~$50 per relay. To make matters worse, the constantly changing needs of a process called for recurring modifications of a control panel. With relays, this was a costly prospect, as it was accomplished by a major rewiring effort on the panel. In addition these changes were sometimes poorly documented, causing a second-shift maintenance nightmare months later. In light of this, it was not uncommon to discard an entire control panel in favor of a new one with the appropriate components wired in a manner suited for the new process. Add to this the unpredictable, and potentially high, cost of maintaining these systems as on high-volume motor vehicle production lines, and it became clear that something was needed to improve the control process – to make it more reliable, easier to troubleshoot, and more adaptable to changing control needs. General application areas 34 沈阳理工大学学士学位论文 The programmable controller is used in a wide variety of control applications today, many of which were not economically possible just a few years ago. This is true for two general reasons: 1 there cost effectiveness (that is, the cost per I/O point) has improved dramatically with the falling prices of microprocessors and related components, and 2 the ability of the controller to solve complex computation and communication tasks has made it possible to use it where a dedicated computer was previously used. Applications for programmable controllers can be categorized in a number of different ways, including general and industrial application categories. But it is important to understand the framework in which controllers are presently understood and used so that the full scope of present and future evolution can be examined. It is through the power of applications that controllers can be seen in their full light. Industrial applications include many in both discrete manufacturing and process industries. Automotive industry applications, the genesis of the programmable controller, continue to provide the largest base of opportunity. Other industries, such as food processing and utilities, provide current development opportunities. There are five general application areas in which programmable controllers are used. A typical installation will use one or more of these integrated to the control system problem. The five general areas are explained briefly below. Description The STC12C5A60S2 is a low-power, high-performance CMOS 8-bit microcomputer with 4K bytes of Flash programmable and erasable read only memory (PEROM). The device is manufactured using Atmel?s high-density nonvolatile memory technology and is compatible with the industry-standard MCS-51 instruction set and pinout. The on-chip Flash allows the program memory to be reprogrammed in-system or by a conventional nonvolatile memory programmer. By combining a versatile 8-bit CPU with Flash on a monolithic chip, the Atmel STC12C5A60S2 is a powerful microcomputer which provides a highly-flexible and cost-effective solution to many embedded control applications. Function characteristic 35 沈阳理工大学学士学位论文 The STC12C5A60S2 provides the following standard features: 4K bytes of Flash, 128 bytes of RAM, 32 I/O lines, two 16-bit timer/counters, a five vector two-level interrupt architecture, a full duplex serial port, on-chip oscillator and clock circuitry. In addition, the STC12C5A60S2 is designed with static logic for operation down to zero frequency and supports two software selectable power saving modes. The Idle Mode stops the CPU , timer/counters, serial port and interrupt system to continue functioning. The Power-down Mode saves the RAM contents but freezes the oscillator disabling all other chip functions until the next hardware reset. VCC:Supply voltage. GND:Ground. XTAL1 Input to the inverting oscillator amplifier and input to the internal clock operating circuit. XTAL2 Output from the inverting oscillator amplifier. Oscillator Characteristics XTAL1 and XTAL2 are the input and output, respectively,of an inverting amplifier which can be configured for use as an on-chip oscillator, as shown in Figure 1.Either a quartz crystal or ceramic resonator may be used. To drive the device from an external clock source, XTAL2 should be left unconnected while XTAL1 is driven as shown in Figure 2.There are no requirements on the duty cycle of the external clock signal, since the input to the internal clocking circuitry is through a divide-by-two flip-flop, but minimum and maximum voltage high and low time specifications must be observed. Figure 1. Oscillator Connections Figure 2. External Clock Drive Configuration Idle Mode In idle mode, the CPU puts itself to sleep while all the onchip peripherals remain active. The mode is invoked by software. The content of the on-chip RAM and all the special functions registers remain unchanged during this mode. The idle mode can be terminated by any enabled interrupt or by a hardware reset.It should be noted that when idle is terminated by a hard ware reset, the device normally resumes program 36 沈阳理工大学学士学位论文 execution,from where it left off, up to two machine cycles before the internal reset algorithm takes control. On-chip hardware inhibits access to internal RAM in this event, but access to the port pins is not inhibited. To eliminate the possibility of an unexpected write to a port pin when Idle is terminated by reset, the instruction following the one that invokes Idle should not be one that writes to a port pin or to external memory. Power-down Mode In the power-down mode, the oscillator is stopped, and the instruction that invokes power-down is the last instruction executed. The on-chip RAM and Special Function Registers retain their values until the power-down mode is terminated. The only exit from power-down is a hardware reset. Reset redefines the SFRs but does not change the on-chip RAM. The reset should not be activated before VCC is restored to its normal operating level and must be held active long enough to allow the oscillator to restart and stabilize. Program Memory Lock Bits On the chip are three lock bits which can be left unprogrammed (U) or can be programmed (P) to obtain the additional features listed in the table below. When lock bit 1 is programmed, the logic level at the EA pin is sampled and latched during reset. If the device is powered up without a reset, the latch initializes to a random value, and holds that value until reset is activated. It is necessary that the latched value of EA be in agreement with the current logic level at that pin in order for the device to function properly Port 0: Port 0 is an 8-bit open-drain bi-directional I/O port. As an output port, each pin can sink eight TTL inputs. When 1s are written to port 0 pins, the pins can be used as highimpedance inputs.Port 0 may also be configured to be the multiplexed loworder address/data bus during accesses to external program and data memory. In this mode P0 has internal pullups.Port 0 also receives the code bytes during Flash programming,and outputs the code bytes during programverification. External pullups are required during programverification. Port 1 37 沈阳理工大学学士学位论文 Port 1 is an 8-bit bi-directional I/O port with internal pullups.The Port 1 output buffers can sink/source four TTL inputs.When 1s are written to Port 1 pins they are pulled high by the internal pullups and can be used as inputs. As inputs,Port 1 pins that are externally being pulled low will source current (IIL) because of the internal pullups.Port 1 also receives the low-order address bytes during Flash programming and verification. Port 2 Port 2 is an 8-bit bi-directional I/O port with internal pullups.The Port 2 output buffers can sink/source four TTL inputs.When 1s are written to Port 2 pins they are pulled high by the internal pullups and can be used as inputs. As inputs,Port 2 pins that are externally being pulled low will source current, because of the internal pullups.Port 2 emits the high-order address byte during fetches from external program memory and during accesses to external data memory that use 16-bit addresses. In this application, it uses strong internal pullupswhen emitting 1s. During accesses to external data memory that use 8-bit addresses, Port 2 emits the contents of the P2 Special Function Register.Port 2 also receives the high-order address bits and some control signals during Flash programming and verification. Port 3 Port 3 is an 8-bit bi-directional I/O port with internal pullups.The Port 3 output buffers can sink/source four TTL inputs.When 1s are written to Port 3 pins they are pulled high by the internal pullups and can be used as inputs. As inputs,Port 3 pins that are externally being pulled low will source current (IIL) because of the pullups.Port 3 also serves the functions of various special features of the STC12C5A60S2 as listed below: Port 3 also receives some control signals for Flash programming and verification. RST Reset input. A high on this pin for two machine cycles while the oscillator is running resets the device. ALE/PROG 38 沈阳理工大学学士学位论文 Address Latch Enable output pulse for latching the low byte of the address during accesses to external memory. This pin is also the program pulse input (PROG) during Flash programming.In normal operation ALE is emitted at a constant rate of 1/6 the oscillator frequency, and may be used for external timing or clocking purposes. Note, however, that one ALE pulse is skipped during each access to external Data Memory. If desired, ALE operation can be disabled by setting bit 0 of SFR location 8EH. With the bit set, ALE is active only during a MOVX or MOVC instruction. Otherwise, the pin is weakly pulled high. Setting the ALE-disable bit has no effect if the microcontroller is in external execution mode. PSEN Program Store Enable is the read strobe to external program memory.When the STC12C5A60S2 is executing code from external program memory, PSEN is activated twice each machine cycle, except that two PSEN activations are skipped during each access to external data memory. EA/VPP External Access Enable. EA must be strapped to GND in order to enable the device to fetch code from external program memory locations starting at 0000H up to FFFFH. Note, however, that if lock bit 1 is programmed, EA will be internally latched on reset.EA should be strapped to VCC for internal program executions.This pin also receives the 12-volt programming enable voltage(VPP) during Flash programming, for parts that require12-volt VPP. It is interesting to observe the progress that has been made in the past 15 years in the programmable controller area. The pioneer products of the late 1960s must have been confusing and frightening to a great number of people. For example, what happened to the hardwired and electromechanical devices that maintenance personnel were used to repairing with hand tools? They were replaced with „computers? disguised as electronics designed to replace relays. Even the programming tools were designed to appear as relay equivalent presentations. We have the opportunity now to examine the promise, in retrospect, that the programmable controller brought to manufacturing. 39 沈阳理工大学学士学位论文 附录 B 中文翻译 介绍可编程控制器 从一个简单的遗产,这显著的系统已经进化到不仅取代机电设备,而是为了解决日益增加的一系列控制问题在这两种过程和nonprocess行业。通过所有的适应症,这些微处理器巨人将继续为动力的新局面,到20世纪90年代的自动化的工厂。 在20世纪60年代,机电设备的议事日程的屁股远为控制问题越来越受到关注。这些设备,俗称继电器、正被利用着成千上万的制造过程和控制多个sequential-type stand-along机器。许多这些继电器被应用在交通行业,更确切的说,汽车工业。这些继电器使用他们数以百计的电线和连接到调用控制解决方案。接力的性能基本可靠——至少是一个单一的装置。但是共同申请继电器板呼吁300 - 500或更多的继电器、可靠性及维护和支持这些电池板相关的问题变得非常巨大的挑战。成本成为了另一个问题,尽管的低成本的圣火传递本身,面板安装成本可能会相当高。总成本包括采购部件、配线和安装的劳动力,可以范围从$ 30 ~ 50美元的传递。更糟的是,不断转变的需要,这个过程称为为复发性修改中的一个控制面板。用继电器,这是一个昂贵的前景所完成的,因为它是一个主要的电路重组的努力,在面板。除了这些改变是有时差,导致second-shift记录维护噩梦月之后。由此可知,这不是希有报废整个控制面板赞成一种新的以适当的部件装上了一个方式适合于新工艺。如果再加上不可预知的,潜在的高成本、维持这些系统在大批量汽车生产线,显然,是有什么东西需要,提高了控制的过程——使它更可靠、更容易解决,并更加适应变化控制的需要。 通用的应用领域 可编程控制器是用于广泛的控制应用程序的今天,其中许多是在经济上不可能仅仅几年前。这是真正的两个基本原因:1有成本效益,是成本为每I / O点)有明显的改进与价格下跌的微处理器及相关部件的能力,和2控制器,以解决复杂的计算和通信任务使得人们有可能使用它在一台专用电脑以前使用。 应用可编程控制器可分为好几种不同的方式来进行,包括一般及工业应用的类别。但重要的是要理解这个框架,控制器是目前理解和使用,以便充分发挥的现状和未来演变可以审查。它是通过对发电厂的应用程序控制器中可以看到他们的全部的光。在工业领域中的应用包括许多在这两种离散型制造和机械加工等。汽车工业 40 沈阳理工大学学士学位论文 的应用,可编程控制器的起源,不断为客户提供最大的基地的机会的。其他产业的发展,诸如食品加工和公用事业,提供当前的发展机会。 有五种通用的应用领域中,可编程控制器的使用。一个典型的安装将会使用一个或更多的这些综合控制系统的问题。五个地区被解释一般简要如下。 描述 这是一种低功耗、高性能STC12C5A60S2 CMOS 8位单片机与次方字节的闪光可编程只读存储器。该装置采用Atmel制造高密度的非挥发性记忆体的技术并兼容行业标准的pinout通过mcs—51汇编语言指令集。闪光的汉字,允许程序内存被编程in-system或由传统的非易失性存储器存储程序员。结合一个多才多艺的8位单片机上CPU的Flash芯片、Atmel是一个功能强大的单片机STC12C5A60S2单片机为核心,提供了一个解决方案highly-flexible许多嵌入式控制应用。 功能特点 标准的STC12C5A60S2将提供以下特点:次方字节的闪光,128字节的内存,32 I / O线,两个16位定时器/计数器,五向量二级中断体系结构,在全双工串行端口,样品的振荡器和时钟电路。此外, STC12C5A60S2与静态逻辑设计和操作减少到零频率支持两种软件可节电模式。停止的CPU空闲模式、定时器/计数器、串行端口和中断系统继续运行。Power-down节省RAM模式的内容但冻结该振荡器取消另外的芯片功能直到下一个硬件复位。 VCC:电压。 地上:地面。 XTAL1 内部反向振荡放大器的输入和内部时钟工作电路的输入。 XTAL2 内部反向振荡放大器的输出。 振荡器特性 XTAL1和XTAL2是输入和输出,分别反演放大器的可配置为使用作为一个单片振子,如图1所示。要么是石英晶体或陶瓷谐振器可能使用。驱动装置,从外部时钟源、XTAL2时就应该不相连的驱动XTAL1如图2。没有要求在责任周期的外部时钟信号,因为输入的内部时钟电路是通过一种divide-by-two触发器,但最小和最大电压高、低时间规格必须遵守。 41 沈阳理工大学学士学位论文 图1。振荡器连接图2。外部时钟驱动器配置 空闲模式下 在空闲模式下,中央处理器把自己睡;所有的微外设保持活跃。该模式调用的软件。片上的内容的公绵羊、所有的特殊功能寄存器不变在这个模式下。空闲模式可以终止任何使中断或由硬件复位。应该指出的是,闲时终止一个硬件复位,设备通常程序执行,从简历在它停止两封,机器周期之前,内部重置算法以控制。样品的硬件抑制进入内部RAM在这种情况下,但进入港口大头针空洞。消除这种可能性一个出乎意料的写信给一个港口销闲时被终止,由复位、指导证明那个中调用一个空闲不应该写端口销或外部存储器。 Power-down模式 在power-down模式下,振子是结束了,但这个指令;用它召唤“power-down是最后的指令执行。这片上的公绵羊、特殊功能寄存器值,直到power-down保留自己的方式终止。唯一的退出,是一家五金power-down重置。SFRs重置重新定义,但不改变样品的公羊。重置不应该被激活之前VCC回到正常操作水平,都必须保持活跃的时间还不够久,允许振荡器来重新启动和稳定。 程序记忆锁位 在芯片上的三个锁位可以离开 (U)或可编程(P)获得的额外功能列在下表。 当锁点,1是程序逻辑电平EA销样品并就搭在重置。如果这个装置是开机没有重置,门闩初始化一个随机值,认为直到重置价值被激活。加入是必要的值EA是一致的逻辑与当前水平销为设备正常运作。 端口0: 端口0是一个8位高电平双向I / O端口。作为一个输出端口,每个插脚陷八TTL的投入。当1是写给端口0可作为输入。端口0也可以被组态的多路复用地址/数据总线访问期间的外部程序和数据的记忆。在这种模式下并有内部端口0,也带走了Flash编程代码字节,并输出期间在代码字节。在外部被要求。 端口1 端口1是一个8位双向I / O端口与内部端口1输出缓冲能沉/源四TTL的投入。当1是写给端口1针将内部可作为输入。为输入变量,端口1针,勒夫将外部所牵引电流源(IIL)因内部。同样也收到了埠1阶地址字节在Flash编程和核实。 端口2 42 沈阳理工大学学士学位论文 端口2是一个8位双向I / O端口与内部。这个端口2输出缓冲能沉/源四TTL的投入。当1就写信给港口2针将内部高,可作为输入。为输入变量,港口2针,勒夫将外部所牵引电流源,端口2放出高阶地址字节在从外部程序存储器和彰显出外部数据存储器存取期间使用16位址。在这种应用中,它使用的内在排放1秒。外部数据存储器存取期间使用8位址, 端口2放出内容的P2特殊功能登记。端口2也得到了高阶的地址位和一些控制信号在Flash编程和核实。 端口3 端口3是一个8位双向I / O端口与内部。端口3输出缓冲能沉/源四TTL的投入。当1就写信给港口3针将内部高可作为输入。为输入变量, 端口3针,勒夫将外部所牵引电流源(IIL)因。端口服务功能的3也不同特色的STC12C5A60S2如下所列: 端口3也接受了一些控制信号为Flash编程和核实。 RST 复位输入。在这个密码高两机器周期的同时,该振荡器运行重置装置。 ALE / PROG 为使输出脉冲地址插销闭锁低字节地址的外部存储器存取期间。这个别针也是程序脉冲输入(PROG)在Flash编程。工作人员在正常操作发出六分之一以一种恒定的速率的振荡频率,并且可以被用于外部时间,或时钟的目的。但是注意,跳过一个淡色啤酒脉冲在每个使用外部数据存储器。 如果有需要的话,可以取消瓣膜手术的SFR通过设置点位置8EH 0。ALE的位元,只有在一个MOVX是活跃的或MOVC指导。否则,销弱拉高。设置ALE-disable一点没有任何效果,如果单片机为核心,在外部执行模式。 PSEN 阅读程序是商店,使闸门的外部程序的记忆。当STC12C5A60S2执行代码,从外部程序内存PSEN各两次机器周期被激活,除了两个PSEN激活被省略在每个使用外部数据存储器。 VPP EA 外部访问使。EA必须绑在地上为了使装置取代码从外部程序的内存位置0000H到FFFFH开始。但是注意,如果锁点1是程序、EA将内部加入了重置。EA 43 沈阳理工大学学士学位论文 应该被绑到内部程序VCC执行的。这个别针,也带走了12伏编程使电压(VPP)在Flash编程,因为require12-volt VPP部位。 有趣的是,要观察的进展,已经在过去的15年的可编程控制器的区域。先锋国际的60年代后期的产品一定是令人困惑的和令人恐惧的很多的人。例如,发生了什么事,多样和机电设备维修人员被用来修复手工具吗?他们被替换的计算机的伪装成电子设计来取代继电器。即使是编程工具被设计来出现,因为传递等价的报告。现在我们有机会来检查我们的承诺,现在回想起来,那可编程控制器带到制造。 44 沈阳理工大学学士学位论文 P18P17P16P15P14P13P12P11附录 C 电路图 S1+5VS2 S3 5.1kS4Rd1 1S52SXR1P183CO芯插座P38DR1S61VCC1323+5V10KPR145611774DX182IN4007U31SXBK78LX052VV10LEDX15OUTIN3DX2DX4GNDRX11IN4007IN4007+5VRES2CX4CX5LED12931041048DX36IN4007LED84-LED-1U5120OCVCC1110CGND219CO11D1Q318CO22D2Q417CO33D3Q5164D4Q6155D5Q7146D6Q8137D7Q9128D8Q74HC573 TJ2P311P3223SR2CO电阻排12U131394P10/AD0P002385P11/AD1P01+5V3376P12/AD2P024367P13/AD3P035358P14/AD4P04634P15/AD5P05733P16/AD6P06P11P01832电源开关P17/AD7P07P12P02P13P031321INT1P20P14P04+5V1222INT0P21P15P05+5VC122uf1523T1P22P16P06U41424T0P23P17P0712025OCVCCP24P18P081110C222uf1926Y1CGNDX1P251827X2P26P34P21219281D1QP27P33P22318312D2QEA/VPP36P23417403D3QVCCP35P24516104D4QRXDP256159115D5QRESETTXDP2671430电阻排6D6QALE/PP2781317297D7QRDPSEN+5VP2891216208D8QWRGND+5V74HC57389C51VCC1P31S19P32C3+10ufP38P37TXJ111P0112MHZ2P02R1P03P04CO410kP05CO5P06CO6P07CO7P08CO8 45 沈阳理工大学学士学位论文 附录 D 程序 #include #include #define uchar unsigned char #define uint unsigned int #define ufloat unsigned float #define LED_DUAN P0 //断码 #define LED_WEI P2 //位选 #define KEY_IO P1 //按键接口 //单片机I/O使用位定义 sbit DIAN=P0^5; //小数点位 sbit DQ=P3^7; //ds18b20的数据接口 sbit K_JR=P3^5; //==0开始加热 ==1停止 sbit K_JS=P3^6; //==0开始加水 ==1停止 //***********数组定义**************** uchar code wei_chose[]={0x01,0x04,0x02,0x08}; //数码管的位选 uchar code duan_ma[]={0xa0,0xbe,0x64,0x2c,0x3a,0x29,0x21,0xbc,0x20,0x28,0xe3,0xe1,0xff};// 数码管的段码值 //0 1 2 3 4 5 6 7 8 9 L C uchar data temp_data[2] = {0x00,0x00} ; //温度数据转换的临时储存空间 uchar code ditab[16] = {0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04, 0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09} ;//温度转换后的小数部分的查询值 uchar led_dis_temp[]={0,0,0,0}; //led显示测量的值的临时储存区 uchar led_adjust_wd[]={0,0,0,0}; //led显示调整温度值的临时储存区 46 沈阳理工大学学士学位论文 uchar led_adjust_sw[]={12,0,0,0}; //led显示调整水位值的临时储存区 //***********变量定义***************** uchar ad_value=200; //ad转换值的储存空间 uchar meun_n=0; //显示界面的转换 uchar dis_w=0; //数码管位对应数据的选择 uchar wd_value=0; //温度值的储存空间 uchar key_value=0; //按键程序组成键码的储存空间 uchar wd_compare=30; //温度比较值 uchar sw_compare=15; //水位比较值 uint t0_1=0; //延时累加控制地址 uchar key_wei=0; //调整值时的位移控制位 uchar key_zhi=0; //调整值时对应的闪烁位的输入值 //************位定义***************** bit AJ_FUN=0; //是否有正确的按键动作 bit presence=0; // DS18B20的上电正确判断位 bit BS_W=0; //没到达半秒取反一次 控制调整值时的闪烁位 bit JS_PBW=0; //加水的判断屏蔽位==0 时判断低水位 ==1时判断高水位 bit JZ_PUT=0; //是否有调整值输入判断位 ==0 无值输入 ==1 有值输入 //果错误跳出按键等待 ==0 正确 ==1错误 //**************************** /*************************** 函数名称: 函数功能: ***************************/ /*************************** 函数名称:delay(uint s) 函数功能:毫秒延时函数 ***************************/ 47 沈阳理工大学学士学位论文 void Delay(uint s) { while(s--){;} } /*************************** 函数名称:delay_ms(uint ms) 函数功能:毫秒延时函数 ***************************/ void delay_ms(uint ms) { uint ms_i; while(ms--) { for(ms_i=0;ms_i<600;ms_i++) { _nop_(); _nop_(); } } } /*初始化ds1820 */ /*******************************************************************/ Init_DS18B20(void) { DQ = 1 ; //DQ复位 Delay(40) ; //稍做延时 DQ = 0 ; //单片机将DQ拉低 Delay(540) ; //精确延时 大于 480us 48 沈阳理工大学学士学位论文 DQ = 1 ; //拉高总线 Delay(40) ; presence = DQ ; //如果=0则初始化成功 =1则初始化失败 Delay(100) ; DQ = 1 ; return(presence) ; //返回信号,0=presence,1= no presence } /* 读一个字节 */ /*******************************************************************/ ReadOneChar(void) { uchar r_i = 0 ; uchar dat = 0 ; for (r_i = 8 ; r_i > 0 ; r_i--) { DQ = 0 ; // 给脉冲信号 Delay(4); dat >>= 1 ; DQ = 1 ; // 给脉冲信号 Delay(4); if(DQ) dat |= 0x80 ; Delay(12) ; } 49 沈阳理工大学学士学位论文 return (dat) ; } /* 写一个字节 */ /*******************************************************************/ WriteOneChar(unsigned char dat) { uchar w_i = 0 ; ) for (w_i = 8 ; w_i > 0 ; w_i-- { DQ = 0 ; Delay(4); DQ = dat&0x01 ; Delay(20) ; DQ = 1 ; Delay(4); dat>>=1 ; } } /* 读取温度 */ /*******************************************************************/ get_temperature(void) { Init_DS18B20() ; Delay(6); WriteOneChar(0xCC) ; // 跳过读序号列号的操作 Delay(6); 50 沈阳理工大学学士学位论文 WriteOneChar(0x44) ; // 启动温度转换 Init_DS18B20() ; Delay(6); WriteOneChar(0xCC) ; //跳过读序号列号的操作 Delay(6); WriteOneChar(0xBE) ; //读取温度寄存器 temp_data[0] = ReadOneChar() ; //温度低8位 Delay(6); temp_data[1] = ReadOneChar() ; //温度高8位 wd_value=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4) ; } /*************************** 函数名称:get_ad_value() 函数功能:得到AD转换后的值 ***************************/ void get_ad_value() { ADC_CONTR|=0XEF; //开始AD转换 _nop_(); _nop_(); _nop_(); _nop_(); while(!(ADC_CONTR&0X10)){;} //等待转换完成 ADC_CONTR&=0XE7; //停止AD转换 ad_value=ADC_RES; // 储存转换值到指定空间 //if(ad_value>249)ad_value=250; 51 沈阳理工大学学士学位论文 } /*************************** 函数名称:dis_play() 函数功能:显示扫描程序 ***************************/ void dis_play() { //if(dis_w==4) if(meun_n<2) { LED_DUAN=0XFF; //消隐 LED_WEI=wei_chose[dis_w]; //位选 LED_DUAN=duan_ma[led_dis_temp[dis_w]]; //段选 if((meun_n==0)&&(dis_w==2))DIAN=0; //为显示温度值时点亮小数点 if((meun_n==1)&&(dis_w==1))DIAN=0; //为显示水位值则点亮小数点 get_ad_value(); get_temperature(); if(meun_n==1) { led_dis_temp[0]=ad_value/100; //将要显示的数据存到数据表中 led_dis_temp[1]=ad_value/10%10; led_dis_temp[2]=ad_value%10; led_dis_temp[3]=10; } else { led_dis_temp[3]= temp_data[0]&0x0f; led_dis_temp[3]=ditab[led_dis_temp[3]]; //查表得小数位的值 52 沈阳理工大学学士学位论文 wd_value=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4) ; led_dis_temp[2]=wd_value%10; //查表得小数位的值 led_dis_temp[1]=wd_value/10%10; //查表得小数位的值 led_dis_temp[0]=wd_value/100; //查表得小数位的值 } if(led_dis_temp[0]==0) {led_dis_temp[0]=12; //如果最高位为0则不显示 if(led_dis_temp[1]==0)led_dis_temp[1]=12; //如果最高位为0则不显示 } } if(meun_n==2) { led_adjust_wd[3]=11; LED_DUAN=0XFF; //消隐 LED_WEI=wei_chose[dis_w]; //位选 if((BS_W==0)&&(dis_w==key_wei))LED_DUAN=0xFF; else LED_DUAN=duan_ma[led_adjust_wd[dis_w]]; //段选 } if(meun_n==3) { led_adjust_sw[3]=10; LED_DUAN=0XFF; //消隐 LED_WEI=wei_chose[dis_w]; //位选 if((BS_W==0)&&(dis_w==key_wei))LED_DUAN=0xFF; else LED_DUAN=duan_ma[led_adjust_sw[dis_w]]; //段选 } dis_w++; if(dis_w==4)dis_w=0; 53 沈阳理工大学学士学位论文 } /*************************** 函数名称:key_deal() 函数功能:有调整值输入时的赋值程序 ***************************/ void key_deal() { JZ_PUT=0; if(meun_n==2) { led_adjust_wd[key_wei]=key_zhi; if(led_adjust_wd[0]>=1) { key_zhi=1; led_adjust_wd[0]=1; led_adjust_wd[1]=0; led_adjust_wd[2]=0; } wd_compare=led_adjust_wd[0]*100+led_adjust_wd[1]*10+led_adjust_wd[2]; } if(meun_n==3) { led_adjust_sw[key_wei]=key_zhi; led_adjust_sw[0]=12; if(led_adjust_sw[1]>=2) { //key_zhi=2; led_adjust_sw[1]=2; 54 沈阳理工大学学士学位论文 if(led_adjust_sw[2]>=5)key_zhi=5,led_adjust_sw[2]=5; } sw_compare=led_adjust_sw[1]*100+led_adjust_sw[2]*10; } } /*************************** 函数名称:aj_judge() 函数功能:按键扫面判断程序 ***************************/ void aj_judge() { if((KEY_IO&0X3F)!=0X3F) //有按键按下 { delay_ms(20); //按键去斗 KEY_IO|=0x3f; if((KEY_IO&0X3F)!=0X3F) //再次判断 { //有按键按下 //meun_n=1;; AJ_FUN=0; key_value=KEY_IO&0X3F; //组合按键值 key_value=~key_value; key_value&=0x3f; switch(key_value) //查询按键值 { case 0x04: if(meun_n<3)meun_n++; //界面加 55 沈阳理工大学学士学位论文 break; case 0x08: if(meun_n==0)meun_n=1; //如果为待机界面 else if(meun_n>0)meun_n--; //如果为其他界面 break; case 0x02: //调整值加1 if(key_zhi<9)JZ_PUT=1,key_zhi++; break; case 0x10: //调整值减1 if(key_zhi>0)JZ_PUT=1,key_zhi--; break; case 0x01: if(meun_n==2) { key_zhi=0; if(key_wei>0)key_wei--; } if(meun_n==3) { key_zhi=0; if(key_wei>1)key_wei--; } break; case 0x20: if(meun_n>1) { key_zhi=0; if(key_wei<2)key_wei++; } break; 56 沈阳理工大学学士学位论文 default: AJ_FUN=1; //meun_n=1;; break; } if((meun_n>1)&&(JZ_PUT==1))key_deal(); if(AJ_FUN==0)while((KEY_IO&0X3F)!=0X3F){;} //等待按键释放 } } } /*************************** 函数名称:value_compare() 函数功能:主函数 初始化 ***************************/ void value_compare() { if((JS_PBW==0)&&(ad_value<=100))K_JS=0,K_JR=1,JS_PBW=1; //停止加热开始加水 if((JS_PBW==1)&&(ad_value>=sw_compare))K_JS=1,JS_PBW=0; //停止加水 if(K_JS==1) //如果停止加水 则判断是否加热 { if(wd_value>=wd_compare)K_JR=1; if(wd_value<=(wd_compare-5)) K_JR=0; } } /*************************** 函数名称:main() 函数功能:主函数 初始化 ***************************/ 57 沈阳理工大学学士学位论文 main() { //uchar i,j; LED_DUAN=0xff; LED_WEI=0; KEY_IO=0XFF; key_wei=1; //meun_n=1;; P1ASF=0X80; //定义P1.7为AD模拟电压输入口 ADC_RES=0; //AD转换的数值寄存器清0 ADC_CONTR=0x80; //1000,0000 打开 A/D 转换电源 delay_ms(4); // 延时 TMOD=0X01; //定时器0 工作方式1 定时中断模式 EA=1; //开总中断 ET0=1; //允许定时器0中断 TH0=0X3C; //初始值 TL0=0XB0; TR0=1; //开定时器0 while(1) { //LED_DUAN=0x64; //LED_WEI=0x0f; //delay_ms(3000); //for(j=0;j<4;j++) aj_judge(); } } /*************************** 函数名称:timer0() 58 沈阳理工大学学士学位论文 函数功能:主函数 初始化 ***************************/ void timer0() interrupt 1 { TR0=0; TH0=0XfC; //初始值 TL0=0X18; t0_1++; if(t0_1==300)t0_1=0,BS_W=~BS_W; dis_play(); value_compare(); TR0=1; } 59
/
本文档为【基于单片机的全开电水热水器的设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
热门搜索

历史搜索

    清空历史搜索