基于单片机的温度控制系统设计毕业论文


    职业学院毕业论文 题目:单片机温度控制系统研制 系 院:工程技术学院 学生姓名: 学 号: 专 业:机电一体化 年 级: 指导教师: 完成日期:X月X日 毕业设计(论文)任务书 设计(论文)题目 单片机温度控制系统研制 学生姓名 专业 机电一体化 指导教师姓名 下发日期 20XX 年 12 月 29 日 任务起止日期: 20XX年 12月 29 日至 20XX 年 5 月 15 日 设计(论文)的主要内容: 进 度 安 排 序号 设计(论文)工作任务 日 期 1 指导教师指导毕业生选题 2015.12.29—2016.3. 4 2 指导教师指导论文提纲 2016.3.4—2016.3.11 3 指导教师指导论文第一稿 2016.3.12—2016.3.31 4 指导教师指导论文第二稿 2016.4.1—2016.4.30 5 指导教师指导论文定稿 2016.5.1—2016.5.12 6 论文答辩 2014.5.13—2016.5.14 主要参考文献: [1] 张耀宗.机械加工实用手册编写组.机械工业出版社,2009 [2] 李军.数控机床参考点的设定间.制造技术与机床,2013 [3] 许镇宇.机械零件.北京:高等教育出版社,2012 [4] 孔庆复.计算机辅助设计与制造.哈尔滨:哈尔滨工业大学出版社,2011 [5] 雷宏,机械工程基础.哈尔滨:黑龙江出版社2012 [6] 王中发.实用机械设计。北京:北京理工大学出版社2013 [7] 唐宗军,机械制造基础。大连:机械工业出版社.2010 系负责人意见: 摘 要 温度是表征物体冷热程度的物理量,是工农业生产过程中一个很重要而普遍的参数。由于温度测量的普遍性,温度传感器的数量在各种传感器中居首位。温度控制的发展引入单片机后,可以降低对某些硬件电路的要求。基于单片机的温度控制系统,可以实现对温度的精确控制。 本文以温室为研究对象,以AT89C51单片机为核心所实现的温度控制系统具有自动完成数据采集、数据处理、数据转换控制、键盘终端处理及显示的功能。当实际温度低于设定值,PTC进行加热,反之PTC就停止加热。实际温度超上限或者低下限时,系统自动报警。温度控制采用的是双位控制,简单易行,在精度要求不是特别高的温室,可行度很高。 最后对系统进行调试并在PROTEUS里仿真,结果表明该系统原理可行。又在一个小空间进行试验,误差在1℃左右,结果符合预期。运行稳定、控制效果好、性价比高。 关键词:单片机,温度控制,DS18B20,温室 目 录 摘 要 I Abstract I 目 录 II 第一章 绪论 1 1.1课题研究背景及意义 1 1.2国内外研究现状 1 1.2.1国外研究现状 1 1.2.2国内研究现状 1 1.2.3总的发展阶段 2 1.3课题研究的内容 2 第二章 硬件系统总体方案设计 3 2.1硬件系统总体设计方案一 3 2.2硬件系统总体设计方案二 4 2.3硬件系统的方案选择 4 第三章 控制系统硬件设计 6 3.1单片机 6 3.2 数字温度计DS18B20 9 3.2.1 DS18S20数字温度计的主要特性 9 3.3 4X4键盘 9 3.4数码管 10 3.5光电耦合器 12 3.6 双向晶闸管 13 3.7 PTC加热器 14 3.8 反相器7406 15 3.9双四输入与门74LS21 16 3.9蜂鸣器 16 第四章 控制系统软件设计 17 4.1 主程序模块设计 17 4.1.1主程序流程图 17 4.2温度采集模块程序设计 18 4.2.1 DS18B20的时序 18 4.2.3 读温度子程序流程图 20 4.3温度设定模块程序设计 21 4.3.1中断服务子程序 21 4.3.2 键盘扫描子程序 21 4.4温度显示模块设计 23 4.4.1设定值显示子程序 23 4.4.2 实际值显示子程序 24 4.5温度控制模块设计 25 4.5.1双位控制算法设计 25 4.5.2温度控制子程序流程图 25 4.6报警模块程序设计 26 第五章 结果分析 27 5.1 PROTEUS仿真 27 5.1.1 键盘设定温度仿真 27 5.1.2 温度采集仿真 28 5.1.3 整体仿真 28 5.2实际运行结果 29 第六章 总结与展望 31 6.1总结 31 6.2展望 31 致 谢 32 附录程序 33 参考文献 42 第一章 绪论 1.1课题研究背景及意义 温度是表征物体冷热程度的物理量,是工农业生产过程中一个很重要而普遍的参数。温度的测量及控制对保证产品质量、提高生产效率、节约能源、生产安全、促进国民经济的发展起到非常重要的作用。由于温度测量的普遍性,温度传感器的数量在各种传感器中居首位。而且随着科学技术和生产的不断发展,温度传感器的种类还是在不断增加丰富来满足生产生活中的需要。在单片机温度测量系统中的关键是测量温度、控制温度和保持温度,温度测量是工业对象中主要的被控参数之一。 温度控制采用单片机设计的全数字仪表,是常规仪表的的升级产品。温度控制的发展引入单片机后,可以降低对某些硬件电路的要求,但依然需要重视测试电路本身的重要性,尤其是直接获取被测信号的传感器部分,仍应给以充分的重视,有时提高整台仪器的性能的关键仍然在于测试电路尤其是传感器的改进。现在传感器也正在受着微电子技术的影响,不断发展变化。传感器正朝着小型、固态、多功能和集成化的方向发展。 基于单片机的温度控制系统,可以实现对温度的精确控制,使得在某些场合下人们对温度高低的要求得以实现。对人们的生产和生活影响巨大,比如,在我国的北方,冬天温度极低,但引入温室大棚后,冬天的时候人们也能吃到新鲜的蔬菜;钢铁厂里炼铁,对温度的要求更高,这就使得温度控制变得极为有意义,而在我们的日常生活中,空调让冬天不冷夏天不热,确实让我们感受到温度控制对我们生活质量的提高也有着极大的作用。总之,现代工业设计,工程建设及日常生活中温度控制都起着重要的作用。 1.2国内外研究现状 1.2.1国外研究现状 国外对温度控制技术研究较早,始于20世纪70年代。先是采用模拟式的组合仪表,采集现场信息并进行指示、记录和控制。80年代末出现了分布式控制系统。目前正开发和研制计算机数据采集控制系统的多因子综合控制系统。990年代中期,智能温控仪问世,它是微电子技术、计算机技术和自动测试技术的结晶。目前,国际上已开发出多种智能温控器系列产品。智能温控器内部都包含温度传感器、A/D转换器、信号处理器和接口电路。有的产品还有多路选择器、中央控制器(CPU)、随机存储器(RAM)和只读存储器(ROM)。现在世界各国的温度测控技术发展很快,一些国家在实现自动化的基础上正向着完全自动化、无人化的方向发展。 1.2.2国内研究现状 我国对于温度测控技术的研究较晚,始于20世纪80年代。我国工程技术人员在吸收发达国 家温度测控技术的基础上,才掌握了温度室内微机控制技术,该技术仅限于对温度的单项环境因子的控制。我国温度测控设施计算机应用,在总体上正从消化吸收、简单应用阶段向实用化、综合性应用阶段过渡和发展。在技术上,以单片机控制的单参数单回路系统居多,尚无真正意义上的多参数综合控制系统,与发达国家相比,存在较大差距。我国温度测量控制现状还远远没有达到工厂化的程度,生产实际中仍然有许多问题困扰着我们,存在着装备配套能力差,产业化程度低,环境控制水平落后,软硬件资源不能共享和可靠性差等缺点。 1.2.3总的发展阶段 总的来说,温控器被广泛应用于工农业生产、科学研究和生活等领域,数量日渐上升。近百年来,温控器的发展大致经历了三个阶段:1.模拟温度控制器;2.集成温度控制器;3.能温度控制器,目前,国际上新型温控器正从模拟式向数字式、由集成化向智能化、网络化的方向发展。 1.3课题研究的内容 本文所要研究的课题是基于单片机的温度控制系统的设计,控制对象为温室,主要目标是实现温度的设定值显示、实际值实时测量及显示,温度超上限和低下限危险报警。单片机连接的温度调节装置由软件与硬件电路配合来实现温度实时控制,显示可由软件控制并在数码管中显示。比较采集到温度与设定值及上下限的大小,然后做出相应的反应,控制执行机构是否降温或升温,判断警报与否。 第二章 硬件系统总体方案设计 本次毕业设计以 51系列单片机为核心对温度进行控制,使被控对象的温度稳定在某一指定数值上,允许有1℃的误差(不包括元件本身的制造引起的误差),键盘输入设定温度值,LED数码管显示温度值(实际的或设定的)。基于上述要求,提出以下两种方案,下文是对两种方案的具体论述。 2.1硬件系统总体设计方案一 方案一如图2-1所示,此方案选用DS18B20芯片进行温度采集及模拟量与数字量之间的转换,并直接输出数字量,无需信号放大,且只占用一根口线,然后将其送数码管显示。4X4矩阵式键盘,首先要对其进行键盘扫描,判断是否有键按下,如有键按下,要判断是那个键按下,确定键值,然后对其进行输入,把最后设定的温度值送给数码管进行显示。如果对一个温度值已经设定完毕后,无需再按任何键即有效,如果温度值设定得不合理,可对温度进行重新设定,温度的上下限可由软件编程设定,这样就完成了对温度的总体设置。对于数码管显示模块,采用了动态显示的方法,在程序的设计中也相应的采用动态显示方法对其进行编写。首先把设定的(或采集到)数据的十进制数进行字节拆分,分别求出要显示个位数、十位数、百位数(显示实际温度时,还要求出十分位),然后将其送至数码管显示。显示设定值还是实际值,可由按键进行切换。对于温度控制模块,首先是把采集的数据和设定的温度上下限进行比较,如低于下限值或高于上限值,蜂鸣器警报,再把实际温度和设定的温度比较,决定加热与否以及加热时间的控制。 单片机软件编程灵活、自由度大,可用软件编程实现各种控制算法和逻辑控制,不需要向外扩展存储器,可使系统整体结构更为简单。信号的传递路线短,可以提高系统精度。 DS18B20 单 片 机 键盘设定温度 双向可控硅 光电耦合器 加热装置 报 警 数 码 管 显 示 图2-1 方案一框图 2.2硬件系统总体设计方案二 方案二如图2-2所示,采用 AT89C51作为控制核心,以使用最为普遍的器件 ADC0809作模数转换,控制上使用电阻丝进行加热。此方案简易可行,器件的价格便宜,且 ADC0809是 8位的模数转换,测温范围是 0-800℃,误差为 0.5%,即分辨率为 1/200,而 ADC0809的分辨率为 1/256,故能满足本题目的精度要求。系统要有温度设定部分,由于 8051的接口不够的问题,所以对其进行接口扩展,采用最常用的 8255并行接口芯片对其扩展,采用 4×4矩阵式键盘接在 8255的 A口和 B口,键盘中有 0到 15之间十六个数字键,对温度的显示采用三个数码管对其进行显示,分别是百位、十位、个位。且系统设置报警装置,使用户能够实时知道温度是否在所设定所的范围内。控制电路部分采用MOC3041控制可控硅的通断以实现对温室温度的控制。 AD590 放大电路 单 片 机 模数转换 键盘设定温度 82555A 双向可控硅 光电耦合器 数码管显示 加热装置 报 警 图2-2 方案二框图 2.3硬件系统的方案选择 两种方案的区别在于温度的采集部分,由上可知,DS18B20相对于AD590在此系统的优势相当明显,节约单片机的I/O口线,数据传送路径短,精确度高,节约成本,故选用方案一。此方案以单片机为该系统的控制核心。温度的检测部分使用了DS18B20、AT89C51单片机及数码管的硬件电路完成对室温的实时检测与显示,通过4×4键盘设定温室的温度,比较温度的设定值与实测值的大小,然后由单片机发出信号,控制光电耦合器和双向可控硅导通与否,由此控制PTC加热器的通断,实现对温室温度的恒温控制。因为温室的温度波动比较小,故不必采用软件滤波对温度进行平滑控制。报警部分采用一个3V的有源蜂鸣器,发出危险警报。此单片机温度控制系统具有微型化、低功耗、高性能、易配微处理器等优点,可以进行多点测温,DS18B20可以直接将温度转化成串行数字信号供微机处理,而且每片 DS18B20都有唯一的产品号,可以一并存入其ROM中,以便在构成大型温度测控系统时在单线上连接多个DS18B20芯片,当然一个I/O口能挂接多少片DS18B20,因单片机的不同而异。从DS18B20读出或写入DS18B20信息仅需要一根口线,其读写及温度变换功率来源于数据总线,该总线本身也可以向所连接的DS18B20供电,不需要外部电源,同时DS18B20能提供9-12位温度读数,出厂默认是12位,无需任何外围硬件即可方便地构成温度检测系统。 单片机具体实现的功能如下: 1、连续测量温室的温度值,控制数码管显示温室的实际温度; 2、控制键盘设定温室的温度值,并用数码管显示。设定范围为室温至125℃;实现温室的恒温控制,比如设定值为50℃,则应使实际值与50℃相接近。 第三章 控制系统硬件设计 基于上章的分析,我选择了方案一,方案一的原理图如图3-1所示。本章主要介绍介绍控制系统中所使用到的各种元器件。 图3-1 系统原理图 3.1单片机 将运算器、控制器、存储器和各种输入/输出接口等计算机的主要部件集成在一块芯片上,就能得到一个单芯片的微型计算机。它虽然只是一个芯片,但在组成和功能上已经具有了计算机系统的特点,因此称之为单片微型计算机(Single-ChipMicrocomputer),简称单片机。因为其体积小、功耗低、价格低廉、抗干扰能力强且可靠性高,适合应用于工业过程控制、智能仪器仪表和测控系统的前端装置。本次毕业设计所采用的是AT89C51。以下简述本次毕业设计所用到的与其相关的知识。 1、主要特性: (1)与MCS-51兼容 (2)4K字节可编程闪烁存储器,寿命为1000次写/擦循环,数据可保留时间为10年 (3)全静态工作:0Hz-24Hz (4)三级程序存储器锁定 (5)128X8位内部RAM (6)4个I/O口,共32根可编程口线 (7)两个16位定时器/计数器 (8)5个中断源 (9)可编程串行通道 (10)低功耗的闲置和掉电模式 (11)片内振荡器和时钟电路 2、管脚说明: AT89C51的管脚布置如图3-2所示 VCC:供电电压。 GND:接地。 P0口: P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的低八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。 P1口: P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为低八位地址接收。 P2口: P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 P3口: P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口,如下所示:P3口管脚备选功能 P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 /INT0(外部中断0) P3.3 /INT1(外部中断1) P3.4 T0(记时器0外部输入) P3.5 T1(记时器1外部输入) P3.6 /WR(外部数据存储器写选通) P3.7 /RD(外部数据存储器读选通) P3口同时为闪烁编程和编程校验接收一些控制信号。 RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低8位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。微处理器在外部执行状态ALE禁止,置位无效。 PSEN:外部程序存储器的选通信号。在由外部程序存储器取指令期间,每个机器周期两次PSEN有效。但在访问外部数据存储器时,这两次有效的PSEN信号将不出现 EA/VPP:当EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,EA将内部锁定为RESET;当EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。 图3-2 AT89C51管脚 3.2 数字温度计DS18B20 在传统的模拟信号远距离传送的测量系统中,需要很好的解决引线误差补偿问题、多点切换误差问题和放大电路的零点误差问题等技术。另外考虑到一般的测量现场的电磁环境非常的恶劣,各种干扰信号较强,模拟信号很容易受到干扰而产生测量误差,影响测量精度。因此,在温度测量系统中,采用抗干扰能力较强的新型数字温度传感器是解决这些问题的最有效的方案。在实际的温度测量过程中被广泛应用,同时也取得了良好的测量效果。 3.2.1 DS18S20数字温度计的主要特性 1、DS18S20的适应电压范围更宽,其范围为:3.0-5.5V,而且它能够直接由数据线获取电源(寄生电源),无需外部工作电源。 2、DS18S20提供了9-12位摄氏温度测量,具有非易失性、上下触发门限用户可编程的报警功能。 3、DS18S20通过1-Wire总线与中央微处理器通信,仅需要单根数据线(或地线)。同时,在使用过程中,它不需要任何的外围的元件,全部的传感元件和转换电路集成在形状如一只三极管的集成电路内。 4、DS18S20具有-55°C至+125°C的工作温度范围,在-10°C至+85°C温度范围内精度为±0.5°C。 5、每片DS18B20具有唯一的64位序列码,这些序列码允许多片DS18B20在同一条1-Wire总线上工作,因而,可方便地使用单个微处理器控制分布在大范围内的多片DS18S20器件。 6、DS18S20的测量结果直接输出数字温度信号,以“一线总线”串行传送给CPU,同时还可以传送给CRC校验码,它具有极强的抗干扰纠错的能力。 7、DS18S20具有负载特性,当电源极性接反时,芯片不会因发热而烧毁,但是不能正常的工作。 3.3 4×4键盘 用于计算机系统的键盘通常有两类:一类是编码键盘,即键盘上闭合键的识别由专用硬件来实现:另一类是非编码键盘,即键盘上闭合键的识别由软件来完成。本次毕业设计采用的是4×4矩阵键盘,矩阵键盘由行线与列线组成,按键位于行列线的交叉点上。如图3-3所示,一个4×4的行列结构可以构成一个含有16个按键的键盘,显然,在按键数量较多时,矩阵键盘较之独立式键盘要节省很多的I/O口线。 本次毕业设计中键盘的设计思路如下: 对P1赋值使P1=0xff,然后令第一行即P1.0等于零,如果第一行有按键按下,则P1.4至P1.7的值会发生变化:如果第一个按键按下,则P1.4等于0;如果第二个按键按下,则P1.5等于0;如果第三个按键按下,则P1.6等于0;如果第四个按键按下,则P1.7等于0。按此规律,直至第四行扫描完成。 图3-3为键盘的原理图 在此系统中,键盘用于设定温度值,只是CPU的工作内容之一。CPU对键盘的响应取决于键盘的工作方式,键盘的工作方式应根据实际运用系统中CPU的工作状况而定,其选择的原则是既要保证CPU能及时响应按键操作,又不要过多占用CPU的工作时间。通常,键盘的工作方式有3种,即编程扫描、定时扫描和中断扫描,本次毕业设计采用中断扫描。采用编程扫描或定时扫描,无论是否有键按下,CPU都要定时扫描,而按键按下不是经常发生的事件,这样CPU对键盘会时常进行空扫描。为进一步提高CPU的工作效率,故选用中断扫描,其工作过程如下:当无键按下,CPU处理自己的工作,当键盘上有键按下时才产生一个外部中断请求,CPU响应键盘中断请求,在中断服务子程序中扫描并判别键盘上闭合的键号,求出输入的数值。CPU对键盘上闭合键的键号进行确定,可以根据行线和列线的状态确定;也可以预先在程序存储器中放入键盘键值表,本次毕业设计采用前者。 3.4数码管 在单片机应用系统中通常使用的是七段LED,这种显示器的结构如图2-1所示,共有8个发光二极管,其中7个发光二极管七段字形“8”,一个发光二极管构成小数点。本次毕业设计用的是四位共阴极数码管,数码管的发光二极管阴极接地,当某个发光二极管的阳极为高电平,即逻辑“1”时,发光二极管点亮。 如图3-4所示,P0口接一个5V的上拉电阻,P0.0-P0.7依次与数码管的A-DP相接,构成数码管的段选,P2.0-P2.3依次与1-4相接,构成数码管的位选。 图3-4 数码管显示原理图 LED显示器工作原理:点亮显示器有静态和动态两种方法。所谓静态显示,就是当显示某一字符时,相应的发光二极管恒定的导通或截止,如上图中七段显示器的a、b、c、d、e、f导通,g截止,则显示“0”。这种显示方式每一位显示器都需要有一个8位输出口控制,其优点是显示稳定,无闪烁,缺点是占用口线多,适用于显示位数较少的场合。当显示位数较多时,一般采用动态显示方法。所谓动态显示就是一位一位的轮流点亮各位显示器,对于每一位显示器来说每隔一段时间点亮一次。由于循环显示的频率高较高时,利用人眼的暂留特性,看不出闪烁现象,显示器的点亮既跟点亮时的导通电流有关,也跟点亮时间和间隔时间有关,调整电流和时间的参数,可实现亮度较高较稳定的显示。若显示的位数不大于8位,则控制显示器的公共电极只需一个I/O口控制各位显示器,所显示的字形也只需一个I/O口。 LED数码管分为共阳极和共阴极,不同的共极方式,显示同样的字符,数码管的段选是不同的,如下表1为七段共阴极LED字型码。 表1 七段共阴极LED段字型码 显示字符 dp G f e d c b a 共阴极 0 0 0 1 1 1 1 1 1 3FH 1 0 0 0 0 0 1 1 0 06H 2 0 1 0 1 1 0 1 1 5BH 3 0 1 0 0 1 1 1 1 4FH 4 0 1 1 0 0 1 1 0 66H 5 0 1 1 0 1 1 0 1 6DH 6 0 1 1 1 1 1 0 1 7DH 7 0 0 0 0 0 1 1 1 07H 8 0 1 1 1 1 1 1 1 7FH 9 0 1 1 0 1 1 1 1 6FH 3.5光电耦合器 光电隔离器件从大的方面来看,可粗略的分为光耦合器及应用光耦合器或其他电子器件制成或应用光耦合器制成的器件。 光耦合器因可实现输入与输出电位上的严格隔离,所以在电力电子设备中晶闸管的门极控制与全控型器件的驱动及信号传输实现输入输出的隔离等方面都得到了广泛的应用,光电耦合器虽种类较多,内部结构有所不同,其速度也有差别,但其基本特性和参数定义却有共同点。在光电耦合器内部,由于发光二极管和光敏管之间的耦合电容很小,所以共模输入电压通过极间耦合电容对电流Ic的影响很小,因而共模抑制比很高。 光电耦合器中光敏管的集电极电流与发光二极管的注入电流之比称之为电流传输比。对于微小变量输出电流与注入电流之比叫微变电流传输。对于线性度比较好的光耦合器,以上两者近似相等。 光耦合器的发光二极管和光敏晶体管之间额隔离电阻(绝缘电阻)较大 ,隔离电压为500~4000V,有的可达10KV,隔离电容小于2pF。光耦合器与晶体管一样,可以线性工作,也可开关状态工作。在电源的驱动电路中,光耦合器一般用来传送脉冲信号,所以光耦合器工作在开关状态。在高频工作时,应考虑光耦合器的响应时间。发光二极管电阻Ri的大小影响光耦合器的响应时间,Ri越小,光耦合器响应的时间越短,所以,在实际应用中,在光耦合器允许的集电极电流范围内,尽量减小负载电阻,以提高光耦合器的响应速度。 MOC3041是直流输入双向晶闸管输出的光耦合器。该器件有输入、输出两部分组成,它的输入端有两个引脚,输入极是一个砷化镓红外发光二极管,工作时该二极管发出足够的红外光,触发输出部分,它的输出端也有两个引脚组成,输出极为具有过零触发的光控双向晶闸管,当红外发光二极管中通过5~15mA的正向电流时,发出红外光,输出极的双向晶闸管的光敏基极受到红外光的照射,而触发双向晶闸管,使输出端电压接近0时导通,即输入与输出端有光耦合,器件导通后,其输出端电压降至很低,当电流小于双向晶闸管维持电流 100μA时,双向晶闸管关断。如图3-5所示,单片机的P3.0通过7406反相器接在MOC3041的阴极(管脚2),当P3.0口置1时,MOC3041的管脚2被置零,又5/330=0.015A,即MOC的触发电流小于但约等于15Am,MOC3041的红外发光二级管发出足够的红光,触发输出部分。当P3.0置0时,MOC3041的管脚2被置1,处于高电平,此时,MOC3041的红外发光二极管处于截至状态,输出部分不被触发。 MOC3041相关参数如下: (1)、隔离电压:7500V ac (2)、输出类型:过零检测 (3)、输入电流:60mA (4)、输出电压:400V (5)、针脚数:6 (7)、光电耦合器类型:三端双向可控驱动器 (8)、关态电压:400V (9)、功耗:250mW (10)、工作温度范围:-40°C至+85°C (11)、正向电压Vf最大:1.5V (12)、电压, Vf典型值:1.25V (13)、触发电流, If最大:15mA 3.6 双向晶闸管 在温度控制系统中,主电路一般使用晶闸管组成开关电路,通过控制晶闸管的导通时间来控制加热时间,因此本系统中,主电路采用了双向晶闸管,在交流电压的正半周期使其沿某方向导通,在负半周期则逆向导通。 主要参数的选取: 负载为220V,120W的PTC加热器 负载电流有效值为 负载电流峰值为× 因为当双向晶闸管全开时,单方向的电流为交流半个周期的电流,所以 而流过双向晶闸管的电流的平均值 晶闸管额定电压的选择:晶闸管的额定电压应为正常工作峰值电压的2-3倍。 ××所以取U=600V。 晶闸管额定电流的选择:晶闸管通态平均电流为实际正常平均值的1.5-2.0倍。 =2.0×=2.0×0.49=0.98A 所以晶闸管的额定电流可取8A。根据计算的数据选择双向晶闸管的型号为BTA08-600C。 主要参数为: 通态电流IT(RMS)=8A 浪涌电流ITSM=80A 正向耐压VDRM>600V 反向耐压VRRM>600V 触发电流IGT<25mA 通态压降VTM<1.55V 晶闸管的过流,过压保护采用了一般的阻容保护电路,其参数为: =50×0.1×(×220)×=0.0484w 图3-5 光电耦合器控制可控硅原理图 3.7 PTC加热器 加热装置是对温室进行加热,使温度稳定在设定的温度值。本系统采用PTC加热器进行加热。PTC是Positive Temperature Coefficient 的缩写,意思是正的温度系数,泛指正温度系数很大的半导体材料或元器件。通常我们提到的PTC是指正温度系数热敏电阻,简称PTC热敏电阻。图3-6是其电阻随温度变化的曲线,PTC热敏电阻是一种典型具有温度敏感性的半导体电阻,超过一定的温度(居里温度)时,它的电阻值随着温度的升高呈阶跃性的增高。 陶瓷材料通常用作高电阻的优良绝缘体,而陶瓷PTC热敏电阻是以钛酸钡为基,掺杂其它的多晶陶瓷材料制造的,具有较低的电阻及半导特性。通过有目的的掺杂一种化学价较高的材料作为晶体的点阵元来达到的:在晶格中钡离子或钛酸盐离子的一部分被较高价的离子所替代,因而得到了一定数量产生导电性的自由电子。对于PTC热敏电阻效应,也就是电阻值阶跃增高的原因,在于材料组织是由许多小的微晶构成的,在晶粒的界面上,即所谓的晶粒边界(晶界)上形成势垒,阻碍电子越界进入到相邻区域中去,因此而产生高的电阻,这种效应在温度低时被抵消:在晶界上高的介电常数和自发的极化强度在低温时阻碍了势垒的形成并使电子可以自由地流动。而这种效应在高温时,介电常数和极化强度大幅度地降低,导致势垒及电阻大幅度地增高,呈现出强烈的PTC效应。 图3-6 PTC电阻温度曲线 PTC型陶瓷加热器采用PTC陶瓷发热组件与波纹铝条经高温胶粘组成。该类型PTC加热器有热电阻小、换热效率高的优点,是一种自动恒温、省电的电加热器。它的显著特点有加热器本体的设计加热温度在200摄氏度以下的多档次,任何情况下本体不发红且有保护隔离层,任何应用场合均不需要石棉等隔热材料进行降温处理,可放心使用不存在对人体烫伤和引发火灾的问题。比较电热管和电阻丝加热产品,本产品是靠材料自身的特性,根据环境温度的改变来调节自身的热功率输出,所以它能将加热器的电能消耗优化控制在最小,同时高发热效率的材料也大幅提升了电能的利用效率。本次毕业设计我所选用的PTC加热器的主要参数有电压:220V,功率120w,长40mm,宽40mm,厚7mm。属于小功率类型,用其加热时恒温发热、无明火、热转换率高、受电源电压影响小。 3.8 反相器7406 在本系统中,两次运用了7406反向器,一次是在单片机的P3.0口与MOC3041的管脚2之间,作用是使P3.0被置1时,MOC3041的管脚2被置0,且与真实的0更接近,MOC3041的光敏二级 管导通;当P3.0被置0时,MOC3041的管脚被置1,且更接近5V,使MOC3041的光敏二级管真正能够处于截至状态。另一处是与蜂鸣器的阴极相接,作用和上述的类似。我所采用的型号是SN7406N,14管脚,6路独立反向驱动,,VCC的范围为4.75-5.25V。 图3-7 反相器7406管脚 3.9双四输入与门74LS21 74LS21是双输入四与门,Y=ABCD,我所使用的型号是SN74LS21N,14管脚,VCC的范围为4.75-5.25V,推荐使用5V。在此系统中,按键未按下时,P3.2始终为高电平,当有键按下时,通过74LS21的作用,输出低电平,使P3.2的高电平变为低电平,触发外部中断0,在中断程序里扫描键盘,并计算输入的温度的设定值。使用中断的好处是使CPU在有键按下时才扫描键,提高了CPU的效率。 图3-8 四输入与门74LS21管脚 3.9蜂鸣器 本次毕业设计的警报部分是通过一个有源的3V蜂鸣器来实现的,当实际温度超上限或低下限时进行危险报警,其长脚为正极,短脚为负极,正极与5V电压相接,负极通过一个7406与P3.1相接。 第四章 控制系统软件设计 为了实现系统的温度检测和控制,并能够实时显示,整个系统由如下几个主要模块组成,主程序模块、温度采集模块、温度设定模块、温度显示模块,报警模块,温度控制模块等几个模块组成。本章将对如上所叙述的几个模块分别进行介绍,并阐述程序的编写思路和所实现的功能。 4.1 主程序模块设计 主程序的主要设计思想是围绕题目基本要求而展开的,系统按键设定温度产生外部中断0,转入中断服务程序,在中断服务程序中获取设定的温度值,之后在主程序进行数据存储、调用数码管显示、报警控制、温度控制等子程序模块。所以主程序主要是对系统的初始化和调用各子程序模块。 4.1.1主程序流程图 图4-1为主程序流程图 图4-1 主程序流程图 4.2温度采集模块程序设计 温度的采集是数字温度计DS18B20通过单片机进行严格的时序控制来完成的,在空间不是很大的范围内,采用一片DS18B20进行单点测温即可实现对温度的较为精确的控制。 4.2.1 DS18B20的时序 DS18B20的时序可分为三个部分:初始化时序、写时序和读时序。只有遵守严格的时序,DS18B20才能进行温度的采集。 4.2.2.1 初始化时序 DS18B20的所有通信都是由复位脉冲组成的初始化序列开始。该初始化序列由主机发出,后跟由DS18B20发出的存在脉冲(presence pulse)。图4-2阐述了这一点,当发出应答复位脉冲的存在脉冲后,DS18B20通知主机它在总线上并且准备好操作了。在初始化步骤中,总线上的主机通过拉低单总线至少480μs来产生复位脉冲。然后总线主机释放总线并进入接收模式。当总线释放后,5kΩ的上拉电阻把单总线上的低电平拉回高电平。当DS18B20检测到上升沿后等待15到60μs,然后以拉低总线60-240μS的方式发出存在脉冲,主机将总线拉低最短480μS,之后释放总线。由于5kΩ上拉电阻的作用,总线恢复到高电平。至此,初始化和存在时序完毕。 4.2.2.2写时序 如图4-3所示,所有的写时隙必须至少有60μs的持续时间。相邻两个写时隙必须要有最少1μs的恢复时间。所有的写时隙(写0和写1)都由拉低总线产生。为产生写1时隙,在拉低总线后主机必须在15μs内释放总线(拉低的电平要持续至少1us)。由于上拉电阻的作用,总线电平恢复为高电平,直到完成写时隙。为产生写0时隙,在拉低总线后主机持续拉低总线即可,直到写时隙完成后释放总线(持续时间60-120μs)。写时隙产生后,DS18B20会在产生后的15到60μs的时间内采样总线,以此来确定写0还是写1。 4.2.2.3读时序 如图4-4所示,DS18B20只有在主机发出读时隙时才能发送数据到主机。因此,主机必须在BE(读存储器) 命令,B4(读电源)命令后立即产生读时隙以使DS18B20提供相应的数据。另外,在44(温度转换)命令,B8(recall)命令后也要产生读时隙。 所有的读时隙必须至少有60μs的持续时间。相邻两个读时隙必须要有最少1μs的恢复时间。所有的读时隙都由拉低总线,持续至少1μs后再释放总线(由于上拉电阻的作用,总线恢复为高电平)产生。DS18B20输出的数据在下降沿产生1后5μs内有效。因此,释放总线和主机采样总线等动作要在15μs内完成。 图4-2 DS18B20复位时序图 图4-3 DS18B20写时序图 图4-4 DS18B20读时序图 4.2.3 读温度子程序流程图 读温度子程序是在单片机的控制下,形成严格的时序,完成温度的转换并作数据的相应处理。温度转换命令子程序主要是发温度转换开始命令,本次毕业设计采用12位分辨率,转换所需的时间约为750ms。因为是单点测温,不需要CRC校验。 图4-5为读温度子程序流程图 图4-5 读温度子程序流程图 4.3温度设定模块程序设计 温度设定模块是用来设定温度的,通过4X4键盘输入想要控制的温度值。本次毕业设计通过中断进行扫描。 4.3.1中断服务子程序 系统中中断采用的是外部中断0,外部中断0的初始化子程序在主程序开始时即被调用,当键盘上有键按下时,即产生一个外部中断0,执行中断子程序,获取输入的设定值,之后中断回。 图4-6为中断服务子程序的流程图 图4-6 中断服务子程序流程图 4.3.2 键盘扫描子程序 键盘的扫描是中断扫描,若有键按下,则从第一行开始扫描,直到确定按键的行与列,确定键值,并返回键值。 图4-7为键盘扫描子程序流程图 图4-7 键盘扫描子程序流程图 4.4温度显示模块设计 温度显示模块要显示的温度有设定值与实际值,通过P3.5的电平的高低来控制,而P3.5电平的高低由与其相连的开关的通断来控制。 4.4.1设定值显示子程序 设定的数值范围为自然状态下室温-125℃且为整数,所以四位七段的数码管的左数第一位的位选信号始终被置零,P0口进行段选,P2口的低四位依次进行千、百、十、个位的数码管的位选。 图4-8为设定值显示子程序的流程图 图4-8 设定值显示子程序 4.4.2 实际值显示子程序 实际值是一个温室自然状态下的室温-125℃之间的数,其带有一位小数,四位八段的数码管从左至右依次是百位、十位、个位、十分位。数码管的段选口还是P0口,P2口的低四位依次是百位、十位、各位、十分位数码管的位选口线。 图4-9为实际值显示子程序的流程图。 图4-9 实际值显示子程序流程图 4.5温度控制模块设计 温度控制模块简单的说就是要实现温度的控制,实际温度高于设定值,降温;实际温度低于设定值,加热。系统中加热的装置为PTC加热器。 4.5.1双位控制算法设计 温室环境是一个复杂分布式参数系统,由于其本身的复杂性和外界大气候较强的影响,要使自控系统将其控制到一定的指标上存在一定的难度,但由于温室内作物对于各种参数变化不是很敏感,因此,没有必要将各种参数进行精确控制,只要控制在一段适宜的范围内即可,又考虑到本智能终端的通用性,本次毕业设计采用实现起来比较简单的双位控制算法。双位控制又称为继电器接触控制,理想的双位控制规律的数学表达式为: 双位控制规律是测量值大于(或小于)给定值时,控制器的输出为最大(或最小)值,即系统只有两个输出值,在此系统中,P3.0就相当于一个双位控制器。其只有“1”和“0”这两种状态。执行机构也只有“开"和“关"两个极限工作位置。给定温度的设定值,当被控温室的温度低于设定值时,P3.0置1,PTC加热器工作,而当温室内的温度高于设定值时,P3.0置0,关闭PTC加热器,从而实现温度的控制。双位控制对象特性好、负荷变化较小、过程滞后小、允许被控制参数在一定的范围内波动,可以适用于温室系统的控制。 4.5.2温度控制子程序流程图 图4-10为温度控制子程序流程图 图4-10 温度控制子程序流程图 4.6报警模块程序设计 报警模块的工作很简单,就是判断实际温度超上限或低下限报警。 图4-11为报警控制子程序流程图 图4-11报警控制子程序流程图 第五章 结果分析 5.1 PROTEUS仿真 总体电路原理图设计好后,在KEIL3里用C语言编出相应的程序,程序调试在没有问题后,接着就对程序进行仿真,总体思路是:由局部到整体。首先进行键盘设定温度值并用数码管显示的仿真,再进行DS18B20采集温度并用数码管显示的仿真,这两个关键部分完成后,就进行总体程序的仿真。 5.1.1 键盘设定温度仿真 将4×4键盘的扫描程序编好后,在PROTEUS里进行仿真,发现当我按下某个按键时,数码管的百位,十位,各位显示的都是那个键的值,比如我按下3的时候,这三个位的数码管都是3,思考了许久,我初步判断原因可能是是按键按下后,因为键盘一直处于按下的状态,而按键扫描程序扫描按键的速度非常快,以至于我按下一次,键盘扫描了好些次,如此想后,我就设定一个标志位,按键按下置1,键抬起置0,但效果依旧不佳;最后,我在扫描每行键的最后都加上一个判断按键是否释放的程序,如释放,再读取键值,如此之后,就能正确输入按键的值,比如,我要输入123,就只需要依次按下1、2、3。 如图5-1所示,键盘设定初值32℃并用数码管显示 图5-1 键盘设定温度32℃仿真 5.1.2 温度采集仿真 根据DS18B20的时序图编好程序并在KEIL3里检查好语法没有错误后,链接到PROTEUS里进行仿真。开始在PROTEUS里设定改变温度的步长为1℃,在软件里也就相应的将采集到的温度设置为整数,上下限与这个整数相差为一度。这样会使误差加大,之后将仿真的步长改为0.1℃,程序也做出相应的的修改,使实际温度保留一位小数。仿真能够获取实际温度,这个实际温度可从DS18B20的仿真模型中设置。如图5-2所示,PROTEUS仿真温度采集,获取当前的环境温度为28.7℃。 图5-2 温度采集仿真 5.1.3 整体仿真 因为实际温度保留一位小数,在仿真的时候,就出现了一个错误,比如,我设定的温度为28摄氏度时,在正确的情况下,蜂鸣器会在实际温度小于27℃和大于29℃报警,但是仿真出来的结果是小于27℃时,蜂鸣器报警,但是当温度大于29℃时蜂鸣器并未报警,直至实际大于30℃时蜂鸣器才会报警。仔细检查程序后,我发现在读温度子程序模块中,我读取的是实际温度的10倍并取整,然后在我将其与实际值比较之前,又让其除以10,所得值赋给一个整形数,这样就出现了这样种情况,比如,我最初测得的实际值是27.8℃,10倍变为278℃,这是为了方便显示,为了判断是否报警,我要将其与设定值比较,又设定值是个整形数,因此,将此数缩小10倍,赋给一个整形数后实际温度就变为27℃。如此实际温度就当于自减了1℃,故要到实际值为30℃时才能报警。实际温度比设定小1℃能报警,又是因为,只有实际值比设定值小1℃才会报警,实际温度等于设定的下限并不会报警,因此,(27.0-27.9)℃赋值给整形数始终是27℃,只有当实际温度小于 27℃时,实际值才会小于下限(设定值28-1),蜂鸣器才会警报。找出问题的所在后,我将设定值扩大10倍,再与实际值的10倍比较,这样就很好的解决了这个问题。仿真总体完毕。 由上可知,在仿真调试过程中,我遇到了很大的麻烦。在仿真的过程中,有时会感觉程序和硬件都没有一点问题,但是就是不能实现系统所要实现的功能,因为它不允许软件和硬件有一点问题,哪怕是细小的一点问题都不允许。举一个最简单的例子,就拿数码管显示程序的调试仿真来说,PROTEUS 里单片机的I/O口可以直接驱动动态显示的数码管,但在实际中却是不可以的。 因为在PROTEUS中加热装置和实际出入大,所以在PROTEUS里进行加热仿真就是成功也没有太大的实际意义,所以我只进行了系统中两个重要部分的软件仿真,以及这两部分合起来的一个总体仿真。 5.2实际运行结果 仿真结果符合预期后,我就着手实物的制作,将所用到的元件焊接在电路板后,就开始测试系统性能。第一次因为焊接技术不过关,数码管显示时好时坏,为了求得个良好的结果,我又重新将元件焊接在另一块板子上,积累了上次焊接的经验后,第二次的焊接效果比之前好了很多,数码管显示正常。由于是动态显示,数码管的亮度不是很高。 加热装置我选择的是PTC加热器,其功率为120W,很小,只能在比较小的空间内才能进行温度控制。在实际的试验中,DS18B20在以此加热器为圆心,以半径20CM为圆,高度不超过15CM圆柱范围内,控制效果良好,误差较小。以下简述实际试验的一些情况。 首先,给单片机上电后,设定温度为29℃,这个值就是我的期望值了,与此同时,软件中相应的把系统能容忍的温度上下限分别定为30℃和28℃,按下温度的切换键,显示当前温度为27.6℃,低于温控系统要求的下限,产生报警。因为实际温度小于设定温度,PTC加热,一小段时间后,警报解除,说明温度已进入温度控制系统的上下限之间,又过了一段时间(时间长短由DS18B20离PTC加热器的距离而变,但当系统稳定后,时间的差异性变小),实际温度达到29℃,PTC关断,其余温使温度继续上升,但没有触发警报,一段时间后,温度又降到29度,比29℃稍低一点,PTC就会加热,因为PTC的加热很快,冷却较慢,实际温度在PTC关断后,下降超过设定值的幅度很小,即使再小,PTC也会进行加热,如此循环,经过多次长时间的试验,实际温度28.8℃ #include typedef unsigned char uchar ; typedef unsigned int uint ; #define uint unsigned int #define uchar unsigned char sbit DATA = P3^7; //DS18B20接入口 sbit P10=P1^0; sbit P11=P1^1; sbit P12=P1^2; sbit P13=P1^3; sbit P30=P3^0; sbit beep=P3^1; sbit P35=P3^5; uint upper,lower,count=0,settemp=0; uchar bai,shi,ge,fen; uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; /*延时子函数子程序μs级*/ void delayo(uint numo) { while(numo--) ; } /*************DS18b20温度传感器函数*********************/ Init_DS18B20(void) //初始化DS18B20 { uchar x=0; DATA = 1; //但总线复位 delayo(10); //延时60μs左右 DATA = 0; //拉低总线 delayo(80); //延时大于480μs DATA = 1; //拉高总线 delayo(20); x=DATA; //稍延时后,若x=0则初始化成功 ,若x=1则初始化失败 delayo(30); } //读一个字节 ReadOneChar(void) { uchar i=0; uchar dat = 0; for (i=8;i>0;i--) { DATA = 0; // 发脉冲信号 dat>>=1; DATA = 1; // 发脉冲信号 if(DATA) dat|=0x80; delayo(8); } return(dat); } //写一个字节 WriteOneChar(uchar dat) { uchar i=0; for (i=8; i>0; i--) { DATA = 0; DATA = dat&0x01; delayo(10); DATA = 1; dat>>=1; } delayo(8); } //读取温度10倍 uint ReadTemperature(void) { uchar a=0; uchar b=0; int t=0; uint tt=0; Init_DS18B20(); WriteOneChar(0xCC); // 跳过读序号列号的操作 WriteOneChar(0x44); // 启动温度转换 Init_DS18B20(); WriteOneChar(0xCC); //跳过读序号列号的操作 WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器)前两个就是温度 a=ReadOneChar();//读取温度低位 b=ReadOneChar();//读取温度高位 t=b; tt=(t*256+a)*0.625;//读数结果扩大十倍 return(tt); } void displayreal(uint aa) //显示实际温度 { P0=0x00; P2=0xfb; //显示小数点 P0=0X80; delayo(250); P0=0x00; P2=0xfe; bai=aa/1000;//显示百位 P0=table[bai]; delayo(250); P0=0x00; P2=0xfd; shi=aa/100%10;//显示十位 P0=table[shi]; delayo(250); P0=0x00; P2=0xfb; ge=aa/10%10;//显示个位 P0=table[ge]; delayo(250); P0=0x00; P2=0xf7; fen=aa%10;//显示十分位 P0=table[fen]; delayo(250); } //*****************延时子程序ms级*************************** void delay(uint i) { uint j; for(;i>0;i--) for(j=0;j<125;j++); } //**************蜂鸣器警报程序*********************** void buzzer(uint aa,uint bb,uint cc) { if(aa>bb||aayy) //实际值大于设定值 P30=0; //停止加热 else //实际值小于设定值 P30=1; //加热 } //**************矩阵键盘扫描子程序*********************** uint keyscan() { uchar temp,keynum; P1=0xff; //P1口输出高电平 P10=0;//**************扫描第一行********************** temp=P1; //读取P1口状态 temp&=0xf0; //读取有或无键按下时temp的状态 if(temp!=0xf0) //判断是否有键按下 { delay(10); //有键按下时去抖 temp=P1; //读取P1口状态 temp&=0xf0; //读取有无键按下时temp的状态 if(temp!=0xf0) //再次确认是否有键按下 { temp=P1; //有键按下,读P1口状态 temp&=0xf0; //取按键按下时的数据 switch(temp) //确定键值 { case 0xe0:keynum=0;break; case 0xd0:keynum=1;break; case 0xb0:keynum=2;break; case 0x70:keynum=3;break; } while(temp!=0xf0) //等待按键释放 { temp=P1; //按键未释放读取P1口状态 temp&=0xf0; //为while判断提供判断数据 } } } P1=0xff; P11=0;//**************扫描第二行********************** temp=P1; temp&=0xf0; if(temp!=0xf0) { delay(10); temp=P1; temp&=0xf0; if(temp!=0xf0) { temp=P1; temp&=0xf0; switch(temp) { case 0xe0:keynum=4;break; case 0xd0:keynum=5;break; case 0xb0:keynum=6;break; case 0x70:keynum=7;break; } while(temp!=0xf0) { temp=P1; temp&=0xf0; } } } P1=0xff; P12=0;//**************扫描第三行********************** temp=P1; temp&=0xf0; if(temp!=0xf0) { delay(10); temp=P1; temp&=0xf0; if(temp!=0xf0) { temp=P1; temp&=0xf0; switch(temp) { case 0xe0:keynum=8;break; case 0xd0:keynum=9;break; case 0xb0:keynum=10;break; case 0x70:keynum=11;break; } while(temp!=0xf0) { temp=P1; temp&=0xf0; } } } P1=0xff; P13=0;//**************扫描第四行********************** temp=P1; temp&=0xf0; if(temp!=0xf0) { delay(10); temp=P1; temp&=0xf0; if(temp!=0xf0) { temp=P1; temp&=0xf0; switch(temp) { case 0xe0:keynum=12;break; case 0xd0:keynum=13;break; case 0xb0:keynum=14;break; case 0x70:keynum=15;break; } while(temp!=0xf0) { temp=P1; temp&=0xf0; } } } return keynum; //返回键值 } //********************显示设定值子程序************************* void Displayset(uint num) { uint ge,shi,bai; P2=0xff; //显示百位 bai=num%1000/100; P0=table[bai]; P2=0xfd; delay(5); P2=0xff; //显示十位 shi=num%100/10; P0=table[shi]; P2=0xfb; delay(5); P2=0xff; //显示个位 ge=num%10; P0=table[ge]; P2=0xf7; delay(5); P2=0xff; } void Init(void) { EA=1;//**************开总中断 EX0=1;//*************开外部中断0 IT0=0;//*************设置中断为低电平触发方式 } //*********************主程序*************************** void main(void) { uint gettemp,settempten; Init(); while(1) { gettemp=ReadTemperature();//读实际温度的10倍 settempten=settemp*10; //得设定温度的10倍 upper=settempten+10;//设定温度上限为设定值+1 lower=settempten-10;//设定温度下限为设定值-1 if(P35==1) //判断显示设定值还是实际值 { count=keyscan(); //调用扫描键盘子程序 Displayset(settemp); //显示设定值 } else displayreal(gettemp);//显示实际值 control(gettemp,settempten); //调用温度控制子程序 buzzer(gettemp,upper,lower);//调用报警控制子程序 } } //*********************END****************************** //*********************中断子程序************************ void Init0() interrupt 0 { count=keyscan(); //调用扫描键盘子程序 settemp=settemp*10+count; //得设定温度值 if(settemp>125) //判断温度设置是否合理 settemp=settemp%10; //不合理取其除以10的余数 }//********** 参考文献 [1]汪贵平.新编单片机原理及应用[M].北京:机械工业出版社,2009. [2]俞欣滢,曾志强,孙仪彬. 基于单片机的温度控制系统设计[J].电气应用,2009,28(20). [3]丁敏. 基于单片机的温度控制系统设计[J].科技信息,2011(20). [4]王哲,李莹. 基于单片机的温度控制系统设计[J].机械研究与应用,2010,23(04). [5]张玉峰. 基于单片机的蔬菜大棚温度控制系统设计[J].农机化研究,2010,32(03). [6]林祝亮,张长江,朱更军. 基于PID算法的家用热水器恒温控制系统设计[J].仪器仪表学报,2006,27(03). [7]周黎英,赵国树,孙仪彬. 模糊PID控制算法在恒速升温系统的应用[J].仪器仪表学报,2008,29(02). [8]夏志华. 基于单片机的温度控制的研究与实现[J].煤炭技术,2013,32(02). [9]陈慧. 基于单片机的温度控制系统的软件设计[J].宁夏机械,2009(20). [10]胡景华,童淑敏,毕玉革,武佩. 基于PROTEUS的温室温度自动控制系统的设计与仿真[J].中国农机化,2012(20). [11]王海宁. 基于单片机的温度控制系统的研究 [D]. 合肥:合肥工业大学,2008. [12]路桂明. 基于模糊PID控制的电锅炉温度控制系统的研究[D]. 哈尔滨:哈尔滨理工大学,2007. [13]陈忠华.基于单片机的温度控制系统的设计与实现 [D]. 大连:大连理工大学,2006. [14]李海霞.基于AT89C52单片机的温度控制系统的设计 [D]. 内蒙古:内蒙古大学,1998. [15]韩毓.基于单片机的蔬菜大棚温度控制系统 [D]. 青岛:中国海洋大学,2009. [16]万丹梅. 基于单片机的温度控制电路设计[J].中国高新技术企业,2010(22). [17]杨丙聪,许忠仁,刘晓峰. 基于AT89S52单片机的智能温度控制器的设计[J].测控技术,2007,26(10). [18]张艳艳. 基于PID算法和89C52单片机的温度控系统[J].现代电子技术,2009(21). [19]张普光. 基于单片机的温度控制器设计与研究 [D]. 西安:西安电子科技大学,2008. [20]李晓伟,郑小兵,周磊,李建军. 基于单片机的精密温控系统设计[J].微计算机信息,2007,23(32). [21]姜荣. 基于单片机的时间温度控制系统的设计与开发[J].甘肃联合大学学报:自然科学版,2009(04). [22]张菁. 单片机控制系统方案的研究[J].上海交通大学学报2007(01). [23]赵晓光. 单片机温度控制系统方案的研究[J].科技传播,2013(03). [24]孙凯. 基于单片机的智能温室控制系统的设计[J]. 自动化技术与应用. 2008(08) [25]罗云松,李丹. 基于单片机AT89C51的温度控制系统的设计[J]. 中国科技信息. 2009(12) [26]王超.基于单片机的温度控制系统设计[J].装备制造技术.2009(12). [27]季宝杰,邹彩虹,王永田. 基于单片机的温室自动控制系统设计[J].计算机测量与控制 .2007(01). [28]方赟,虎恩典,薛永风. 基于模糊PID和单片机的温度控制系统设计[J].机械制造与自动化.2011,40(02) [29]谭杰,胡真瑞. 浅谈单片机温度控制系统[J].科技致富向导.2011(11). [30]Yongxian,SongJuanli,MaXianjin,ZhangYuanFeng. Design of Wireless Sensor Network-Based Greenhouse Environment Monitoring and Automatic Control System[J].Journal of Networks.2012(05). [31]龙辉. 可控硅的特性、检测和典型应用[J]. 益阳职业技术学院学报. 2006(03). [32]徐长军,王峰,苏艳岩,张西华. 双向可控硅的设计及应用[J]. 电子产品世界. 2008(12). [33]于新潮. 双向可控硅过零触发电路的设计[J]. 包头职业技术学院学报. 2009(01). [34]何安琴,陈世明. 可控硅控制器在电加热系统中的应用[J]. 自动化与仪器仪表. 2009(03). [35]傅永涛. 可控硅控制电路的设计保护[J]. 中国高新技术企业. 2008(09). [36]郭津,葛良安,毛昭祺,马皓.用于传统双向可控硅调光器的LED驱动方案比较[J].照明工程学报. 2011(04). [37]王永利. 光电耦合器的工作原理及检测[J]. 家电维修技术. 2010(08). [38]易小月,张斌,李文启. 光电耦合器件的研究[J]. 才智. 2009(29). [39]何晖. PTC电加热在空调器上的应用[J]. 河南机电高等专科学校学报. 2010(01). 本文档由香当网(https://www.xiangdang.net)用户上传

    下载文档到电脑,查找使用更方便

    文档的实际排版效果,会与网站的显示效果略有不同!!

    需要 10 香币 [ 分享文档获得香币 ] 2 人已下载

    下载文档