毕业设计(论文)基于单片机的温度控制器设计.doc
ANYANG INSTITUTE OF TECHNOLOGY专 科 毕 业 设 计基于单片机的温度控制器设计系(院)名称: 电子信息与电气工程学院 专 业 班 级: 09级电气自动化1班 学 生 姓 名: 学 号: 指导教师姓名: 指导教师职称: 讲师 2012年5月目录摘 要1引 言2第一章 课题思想与方案选择31.1 课题来源及发展31.2 课题思路31.3 方案分析41.4 方案选择5第二章 硬件系统设计72.1 硬件设计概述72.2 硬件设计框图72.3 系统总体结构与原理82.4 单片机简要介绍82.5 单片机最小系统92.5.1 单片机最小系统连接原理图102.6 温度采集电路设计112.6.1 传感器说明112.6.2 传感器的选用112.7 温度显示电路122.7.1 LED数码显示管122.8 按键接口电路132.9 报警电路设计142.10 继电器和受控电路152.11 锅炉系统15第3章 软件设计213.1 程序设计语言与软件开发环境213.1.1 程序设计语言的选用213.1.2 程序流程图21结论34致谢35参考文献36摘 要本论文简要介绍了基于单片机AT89S51和测温传感器DS18B20构成的智能温度显示和报警及控制的装置。该系统的主要功能是通过软硬件结合,实现温度传感器对温度进行采集并进行模数转换,然后传给单片机进行处理,从而通过数码管实现温度的实时动态显示,同时根据用户设定温度限值,通过发光二极管发光报警,实现继电器动作,控制后续电路。整个系统结构紧凑、简单可靠、操作灵活、功能强、性能价格比高,较好地满足了人民日常生活监测、现代农业生产和科研的需要。关键词:温度 传感器 二极管 继电器引言 人类时刻生活在环境的包围下,温度的变化也时刻影响着我们的生活和作业,温度的检测、控制如今已应用于诸多行业,随着电子工业的发展,由于数字仪表反应快、操作简单、工作环境恶劣的特点,其使用性在不间断的提高,市场上出现越来越多的温度显示和检测仪。低功耗高精度的便携式数字式温度显示仪使用方便,工作稳定,具有广泛的应用前景。温度作为一个不可或缺的重要参数,在社会各个领域都显得尤为重要,且要求温度检测越来越精确化和智能化。目前能够独立工作的温度检测和显示系统已经应用于诸多领域,如金属冶炼、冰箱制冷、空调技术、温室大棚等,在最初那种人工目测检测中,不仅浪费人工,还存在很大的误差。因此,研究温度的测量方法和装置也有重要的意义。日常生活中的方方面面都深受环境因素的影响,而温度又是各个因素中最为重要的一个,因此做好温度的监测和控制对于人们日常生活,以及工农业生产有着至关重要的意义,温度是重要的环境条件,也是最基本的环境条件,它与人们的生产生活息息相关,温度的状况决定了许多工农业产品的质量与产量。因此,对于温度的检测十分必要。做好环境温度状况的实时检测与显示,可以给后续针对环境温度状况的调节提供依据,进而更好地服务于工农业生产和人们日常生活。目前,国际上新型温度传感器正从模拟转向数字式,从集成化转向智能化。本论文将介绍智能集成传感器DS18B20的结构特点及应用,并以此为传感器与单片机为控制器构成的温度测量的工作原理做了详细的介绍。该产品适用于人民的日常生活和工、农业生产等,课题基于51单片机,采用温度传感器进行温度数据采集,并与单片机进行数据交换,最后通过LCD显示屏进行数据显示,同时报警功能使其拥有了更广泛的应用领域。第一章 课题思想与方案选择1.1课题来源及发展温度是一种基本的环境参数,也是科学技术中最基本的物理量之一,物理、化学、生物等学科都离不开温度。在工业生产和实验研究中,像电力、化工、石油、冶金、航空航天、机械制造、粮食存储、酒类生产等领域内,温度常常是表征对象和过程状态的最重要的参数之一。人类日常生产生活与之息息相关,在工农业生产过程中需要实时测量温度,避免不必要的损失。某些生产过程更需要实时测量温湿度并加以调控,以保证正常的生产和合格的工艺要求。因此,研究环境温度的测量方法和测量装置具有重要的意义。科学技术的发展日新月异,科技的进步在推动社会进步的同时也带动了测量技术的发展。随着宇航、核能、冶金、材料、低温、微电子学和生物医学等方面的发展,对温度测量、控制的精度和范围提出了越来越高的要求,尤其是对温度的测量非但要准确,而且需读取数值更直观更方便,从而促进了温度测量和控制技术的迅速发展。在温度测量中,我们常采用温度传感器来检测温度,信号处理由单片机进行分析,并由数码管显示检测到的环境温度信号,不仅具有系统控制简单方便、可扩展性强、灵活性大等优点,而且,还具有很高的温度的检测精度与准确度。因此,本论文以51单片机为主控制器,以数字式温度传感器DS18B20为传感元件通过按键模块来实现温度上下限值的设定及温度的报警功能。测温范围在-55125,误差在±0.5以内本设计是具有结构简单、可靠性高、成本低、测温范围广、体积小、功耗低、精度高、显示直观等特点。由于所设计的系统将具有电路简单、采集温度精度高等许多优点,所有可广泛应用在不同场合,有很强的实际应用意义。该设计也是我对大学所学到的东西做的一个综合应用,同时将增强我的动手能力和提出问题,分析问题,解决问题的能力,可以巩固自己的专业知识,为以后的进一步工作学习打下扎实的基础。1.2 课题思路本设计以51单片机传感器为核心部件,根据实际需要选择合适的主芯片和显示器,达到优化整体结构,提高温度检测精度,同时使系统具有测温范围广、体积小、功耗低、精度高、显示直观的优点,并保证系统结构简洁。主要由电源电路、传感器所在的信号采集电路、时钟电路、复位电路、按键控制电路、报警电路、数码管显示电路、实时时钟电路构成。系统通过温湿度传感器电路对环境中的温湿度信号进行准确的采集,并将采集到数据交于单片机进行处理与分析。在单片机进行数据处理与分析的同时,数码管显示电路被检测到的数据。若信号采集电路检测到的检测值超过人为的设定值时,则有单片机发送报警指令,此时,报警电路进行警示报警,以引起相关检测人员的注意,从而实现对环境温度状况的检测、显示、报警;同时受单片机控制的继电器电路将会被导通或切段,从而起到控制的作用。1.3 方案分析本设计电路条理清晰,外围元件稀少,主要以单片机为核心信号处理部件,传感器电路作为信号采集电路,继而将信号交与单片机处理,有数码管显示温度值,并判断是否超出设定值。所谓传感器,就是感受被测环境温度并按一定的规律转换成电路信号的器件或装置,即把被测的非电量信号转换成为电信号输出的电子元件,通常由敏感元件和转换元件组成,信号检测效果的好坏是检测系统设计成败的关键因素,传感器的选择不仅决定了电路的设计同时也决定了信号检测的效果,为此,本次系统设计根据传感器的选用设计以下两种方案:方案一:由于本设计是测温电路,可以使用热敏电阻之类的器件,利用其感温效应,将被测由温度变化引起的电压或电流变化采集过来,经放大电路后,送入数模转换器电路进行数模转换,然后就可以用单片机进行数据的处理,同时在显示电路上,可以将被测温度显示出来。这种设计需要用到数模转换电路,测温电路比较显得较为复杂。其设计基本框图如下: 数模转换电路显示电路放大电路感温电路图1-1方案一电路结构框图方案二:进而考虑到使用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这也容易想到,选择一个适合的传感器,可以很容易很直接读取被测温度值,继而进行转换,达到满足设计要求,这样不仅简化了电路,也能提高测量精度。基本框图如下所示:报警显示单片机温度传感器检测目标 图1-2方案二电路结构框图1.4 方案选择温度检测的传统方法是使用热敏元件类组成的传感器,那么一个温度量要经过感温元件、测量电路、放大电路、模数转换电路之后才能得到相应的数字量,这样须考虑的线路环节较多,相应测温装置中元器件数量也较多,随之影响产品的可靠性和体积。其采集到的信号通过数模电路进行信号转换,送至51单片机进行数据的分析处理。该传感器电路进行信号采集时不仅需要配备热敏电阻温度感受元件,还要配备相应的数模转换电路,电路因此变得复杂。随着信息科学与微电子技术,特别是微型计算机与通信技术的发展,传感器逐渐与微处理器相结合,产生了智能式传感器。智能化传感器是借助于半导技术将传感器部分与信号调节电路、接口电路和微处理器制作在同一块芯片上,即构成大规模集成电路的智能化传感器,因此,把被测温度这一非电模拟量转换成数字信号,将其处理过程的多个环节集成在单片机内部,是解决传统温度检测方法弊病的理想途径。目前 ,典型的温度测控系统是由模拟式温度传感器、数模转换电路和单片机组成。自动化程度和可靠性较高 ,使用方便 ,得到了广泛应用。但是由于模拟式温度传感器输出为模拟信号 ,必须经过数模转换环节获得数字信号后才能与单片机等微处理器接口 ,使得硬件电路结构复杂 ,成本较高。而以 DS18B20为代表的新型单总线智能数字式温度传感器集温度测量和数模转换于一体 ,直接输出数字量 ,与单片机接口几乎不需要外围元件 ,使得硬件电路结构简单,具有微型化的优点 ,特别适合做便携式数字温度计的温度传感器。由于采取高集成度设计,数字式传感器在可靠性、抗干扰能力以及器件微小化方面与模拟传感器相比,都有明显的优点,具有较强的推广应用价值。所以本设计选用美国DALLAS公司最新推出的DS18B20数字式温度传感器。这样不仅简化了电路结构,而且电路抗干扰能力强,精度更高。通过两方案之间的比较,本课题选择第二种方案进行设计。第二章 硬件系统设计2.1 硬件设计概述本设计采用AT89C51系列单片机作为核心处理部件,以数字式温度传感器DS18B20作为环境温度采集电路的主要部件,使用软件制作并印制PCB板。工作时DS18B20将采集到的环境温度信号送给AT89C51单片机,单片机对信号进行分析与处理,而后在数码管上显示出所测定到的环境温度,通过按键模块来实现温度上下限值的设定及温度的报警功能。当检测值超过设定值时,发光二级管发光实现报警功能,同时继电器动作,其测温范围在-55125,误差在±0.5以内图2-1 DS18b20传感器 图2-2 AT89C2051单片机图2-3 4100F继电器 2.2 硬件设计框图该系统主要部分由温度传感器、单片机系统、报警系统、按键调节、数码显示系统加热和降温电路组成。其基本功能是:以数字式温度传感器DS18B20为传感元件,由温度传感器测量当前温度,将非电量的温度值转换为电量输出并将结果送入单片机。然后,通过AT89S51单片机芯片对送入的测量温度读数进行计算和转换,并将此结果送入显示模块。最后,以LED数码管作为显示器件实时动态显示温度(十进制)。精确度为1。继电器的工作电路同步于报警系统。本系统的总体框图如下2-4 图所示:单片机检测目标温度传感器显 示报 警图2-4 系统总体设计框图2.3 系统总体结构与原理 本电路主要由DS18B20温度传感器芯片通用显示模块和AT89C51单片机芯片组成。其中,DS18B20温度传感器芯片采用与单片机相连,它独立地完成温度测量结果送到单片机的工作。本系统测温范围在-55125,误差在±0.5以内。当温度超出所设上下温度报警值时,发光二级管发光提示用户,达到报警的目的;同时继电器切换电路,使得后续电路有相应的运作。2.4 单片机简要介绍单片机是单片微型计算机(Single Chip Microcomputer)的简称。它把组成微型计算机的各个功能部件:中央处理器CPU、随机存储器RAM、只读存储器ROM、I/O接口电路、定时/计数器以及串行通信接口等部件同时集成在同一块芯片中,构成一个完整的微型计算机系统,以小体积低功耗和高效能实现复杂的电路功能。AT89C51 提供以下标准功能:4k 字节Flash 闪速存储器,128字节内部RAM,32 个I/O 口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。同时具有空闲和掉电两种工作模式,可以用软件进行选择的低功耗工作方式,以实现微控制器完善的控制功能。随着科学技术的发展,在线可编程(ISP)单片机已经应用于实际生产,如STT89C58、AT89S51、AT89S52芯片,都具有在线可编程功能,ISP 技术的优势是不需要编程器就可以进行单片机的实验和开发,单片机芯片可以直接焊接到电路板上,调试结束即成成品,免去了调试时由于频繁地插入取出芯片对芯片和电路板带来的不便,给电路调试和程序输入带来了很大的方便。本文中用到的的AT89C51单片机各引脚图如下2-5所示: 图2-5 AT89C51的引脚图2.5单片机最小系统单片机最小系统,也称单片机最小应用系统,是指用最少的元件组成的单片机可以工作的系统。对于51单片机而言,最小系统应该包括:供电电路、时钟电路、复位电路等。时钟电路是计算机的心脏,他控制着计算机的工作节奏AT89C51单片允许的时钟频率的典型值是12MHZ,本设计采用12MHZ,单片机时钟电路如图2-7所示: 图2-7 单片机时钟电路电路 计算机在启动运行时都需要复位,是中央处理器CPU和系统中的其他部件都处于一个确定的初始状态,并从这个状态开始工作,单片机复位引脚是RST,当振荡器起振后,该引脚上出现连个周期的高电平,使器件复位,只要RST保持高电平,单片机就保持复位,单片机复位有两种方式:上电复位,人工复位。 图2-8 上电复位电路图 图2-9人工复位电路图2.5.1单片机最小系统连接原理图本设计中单片机AT89C51的最小系统连接原理图如下图2-8所示: 图2-10 单片机最小系统原理图2.6温度采集电路设计2.6.1 传感器说明随着数字电子技术的不断发展,传统工业所使用的一些模拟信号设备正在不断升级传统的温度检测系统多数采用热敏电阻作为传感器,这种方式需要设计专门的模拟接口电路,并且要将采集的温度模拟信号转换为数字信号,单片机才能处理。相对而言成本高、设计复杂、精度低。目前,很多温度检测系统已采用单总线数字式温度传感器进行处理,由于采用了数字式设备,接口电路较简洁,而且可以直接得到温度的数字量给单片机处理,在温度采集电路中,对传感器的基本要求主要有:反应灵敏、精确度高、工作可靠、抗干扰能力强、工作环境适应性强、能量转换效率要高等。为保证测量的准确性和稳定性,温度传感器都是非密封性的,应尽量避免在酸性、碱性及含有机溶剂的环境中使用,也应避免在粉尘较大的环境中使用。为正确反映被测空间的湿度,还应避免将传感器安放在离物体太近或空气不流通的地方。有的温湿度传感器对供电电源要求比较高,否则将影响测量精度甚至出现传感器之间相互干扰,无法工作等现象,使用时应提供合适的、符合要求的供电电源与适配的电路元件。2.6.2 传感器的选用本设计DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,是一线式数字式温度计芯片,体积更小、适用电压更宽、更经济。它具有结构简单,不需外接元件,线路简单,体积小的特点。与传统的热敏电阻等测温元件相比,它能直接读出被测温度,由于采用了数字式设备,接口电路较简洁,而且可以直接得到温度的数字量给单片机处理,使整体设计更简化、方便,且适用性与准确度也有了相应的提高。 DS18B20的管脚排列如下: 引脚定义: (1)GND为电源地; (2)DQ为数字信号输入/输出端;(3)VDD为外接供电电源输入端。 上图2-11为DS18B20外形图其主要特点如下:(1)单线接口方式,仅一条线即可实现单片机与DS18B20的信息传递;(2) 全部传感元件及转换电路集成在形如一只三极管的集成电路内;(3)可通过USB数据线直接供电,电压范围为3.05.5;(4) 零待机功耗更节能同时避免发热引起的寿命衰减; (5) 用户进行可定义报警设置,报警搜索命令识别并标志超过程序限定温度的器件;(6)负电压特性,电源极性接反时,虽不能正常工作,但不会因发热而烧毁。2.7温度显示电路2.7.1 LED数码显示管LED七段数码显示器由8个发光二极管组成显示字段,根据内部发光二极管的连接形式不同,LED有共阴极和共阳极两种。共阴极LED数码显示器内部所有发光二极管阴极连接在一起,形成公共阴极,一般接地(或低电平)。当某个发光二极管的阳极为高电平时,发光二极管点亮。共阳极LED数码显示器内部所有发光二极管阳极连接在一起,形成公共阳极,一般接电源正极(或高电平)。当某个发光二极管的阴极接低电平时,该发光二极管点亮。为了显示数字或符号,要为LED显示器提供代码,因为这些代码与要显示的字形相对应,因此称之为字形码。LED七段数码显示器共有8个发光二极管,需要一个8位端口去控制,因此提供给LED的字形码也是8位的。组成一个“8”字形字符的7段,再加上1个小数点位,共计8段,因此提供给LED数码显示器的显示段码为1个字节。各段码位的对应关系如下:段码位D7D6D5D4D3D2D1D0显示段dpgfedcba表2-12 字形码的各位与数码管的对应关系LED数码显示器显示十六进制数和空白字符与P的显示段码如下表2-2所示:字型共阳极段码共阴极段码字型共阳极段码共阴极段码0C0H3FH990H6FH1F9H06HA88H77H2A4H5BHb83H7CH3B0H4FHCC6H39H499H66HdA1H5EH592H6DHE86H79H682H7DHF84H71H7F8H07H H89H76H880H7FHP8CH73H表2-13 八段LED显示字形代码表2.8 按键接口电路 电路中运用了3个独立式按键,实现温度上下限的设定,并保存用户设定的温度限制值。按钮的说明: 接通电源后,数码管只显示“ºC”符号,无温度值;按下AN3后,数码管先显示上次存贮下来的设定温度(报警控制)值,然后再显示环境温度值,并随环境温度的变化而变化;再按一下AN3,温度数字闪烁,这时用户可以使用另外两个键进行温度值设定;按AN1或AN2:按AN1为报警温度值变大,最大为125ºC;按AN2为报警温度值变小 ,最小为-55ºC;调好后再按一下AN3,调好的报警温度值即被存贮,数码管又显示环境温度。当温度达到存贮的报警值时,电路发出报警信号和动作。按键与单片机的电路连接如图2-10所示:图2-14 按键与单片机的电路图2.9 报警电路设计当传感器测定的温度值超出用户设定值时,单片机引发二极管发光对用户进行报警提示,以便监测人员注意,并做出相应温度调整。报警二极管发光电路与单片机的连接如下图2-11所示: 图2-15 报警二极管发光电路与单片机的连接图2.10 继电器和受控电路随着环境温度的升高,逐渐的达到用户设定值时,发光二级管发光报警,同时继电器切换导通方向,使得原本加热的电路变为吹风降温电路,很快当温度降到原本设定值以下时,继电器又被切换导通方向,吹风降温电路又转为加热电路,由此保实现锅炉系统的恒温保持功能。本文中用到的继电器工作原理图如下图所示: 图2-16继电器内部电路2.11锅炉系统受单片机控制,在外接电源的条件下,继电器的工作实现了锅炉系统重复着加热与降温的活动,以此保证了锅炉内部的恒温效果。降温电路设计如下所示: 图2-17 降温电路降温电路较为简易,使用风扇加快气体流动进行散热,电机固定在整体下部,涡轮风扇在锅体内部,防止被阻转或造成人身伤害。加热电路设计如下所示: 图2-18 加热电路加热电路位于被加热液体锅炉内部,由电热丝及其附属物构成,电热丝固定在耐高温材料上,并在此连接引线,由于锅体材料缘故,附属物在此起到了固定电热丝,同时防止电热丝烧坏液体容器的作用,加热电路的设计保证了热能量转化的利用比率,同时也能有效防止发生局部过热而引起短路或元件烧毁甚至火灾等事件。传感器与锅炉系统: 图2-19 传感器与锅炉控制系统电路板: 图2-20温度控制系统电路板系统试验情景: 图 2-21 实验情况成品: 图2-19 成品图温度控制系统的总体电路原理如图2-20所示:图2-20 控制系统电路原理第3章 软件设计3.1 程序设计语言与软件开发环境3.1.1 程序设计语言的选用 由于单片机的种种优点和特性,其应用领域也极其广泛,因此涉及到程序的编写问题,单片机的编程语言很多,大致分为三类:机器语言、汇编语言、高级语言,机器语言由于繁琐,容易出错,一般用户已经抛弃这种方法,而汇编语言和高级语言已成为单片机程序输入的主要工具。汇编语言是一种用文字助记符来表示机器指令的一种符号语言,是最接近机器码的一种语言。其主要特点是占用资源少,程序执行效率高,由于它一条指令就对应一条机器码,每一步的执行动作都很清楚,并且程序大小和堆栈调用情况都容易控制,因此调试起来比较方便。但不同类型的单片机其汇编语言有差异,不易于移植,因为它们的指令系统是有差别的。C语言是单片机的一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具备汇编语言的功能,C语言具有功能丰富的库函数,运算速度快,编译效率高,有良好的可移植性,而且可以实现直接对系统硬件的控制。此外C语言程序具有完整的程序模块结构,从而为软件开发中采用模块化程序设计方法提供了有力的保障,相比于汇编语言,C程序语言有如下特点:(1)程序有规范的结构,可分为不同的函数,善了程序的可读性;(2)程序调试时间显著缩短,从而提高了调试效率;提供的库函数包含许多标准子程序,更易于程序编写;具有较强的数据处理能力,可以将已编写好的程序植入新程序;具有方便的模块化编程能力。对于单片机编程还有basic语言和PL/M语言,前者是易于入门的初学编程语言。后者语言可读性好,可靠性高,但不支持复杂的算术运算,本文也采用C编程语言对单片机进行程序输入,使电路实现预期的功能。3.1.2 程序流程图温度控制器V1.5显示为三个共阳极LED温度传感器用单总线DS18B20CPU为2051,四个按键,分别为UP,DOWN,SET温度调节上限为125度,下限为-55度只能用于单只18B20#include <AT89X051.H>#include <intrins.h>#define Key_UP P3_0 /上调温度#define Key_DOWN P3_1 /下调温度#define Key_SET P1_7 /设定键(温度设定,长按开电源)#define RelayOutPort P3_5 /继电器输出#define LEDPort P1 /LED控制口#define LEDOneC P3_2 /LED DS1控制(百位)#define LEDTwoC P3_3 /LED DS2控制(十位)#define LEDThreeC P3_4 /LED DS3控制(个位)#define TMPortP3_7/DS1820 DataPortunsigned char code LEDDis=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF,0xBF; /0-9的LED笔划,0xFF为空,0xF7为负号static unsigned char bdata StateREG;/可位寻址的状态寄存器sbit DS1820ON = StateREG0; /DS1820是否存在sbit SetTF = StateREG1; /是否是在温度设置状态sbit KeySETDown = StateREG2; /是否已按过SET键标识sbit PowTF = StateREG3; /电源电源标识sbit KeyTF = StateREG4;/键盘是否允许/sbit KeySETDowning = StateREG5;/SET是否正在按下static unsigned char bdata TLV _at_ 0x0029; /温度变量高低位static unsigned char bdata THV _at_ 0x0028;static signed char TMV; /转换后的温度值static unsigned char KeyV,TempKeyV; /键值static signed char TMRomV _at_ 0x0027; /高温限制static signed char TMSetV _at_ 0x0026; /温度设定值static unsigned char KSDNum; /SET键连按时的采集次数static unsigned char IntNum,IntNum2,IntNum3; /中断发生次数,IntNum用于SET长按检测,IntNum2用于设定状态时LED闪烁static signed char LED_One,LED_Two,LED_Three; /LED的显示位 LED_One为十位,LED_Two为个位static unsigned char Sign; /负号标识void main(void)void InitDS1820(void); /定义函数void ROMDS1820(void);void TMVDS1820(void);void TMRDS1820(void);void TMWDS1820(void);void TMREDS1820(void);void TMERDS1820(void);void ReadDS1820(void);void WriteDS1820(void);void Delay_510(void);void Delay_110(void);void Delay_10ms(void);void Delay_4s(void);void V2ToV(void);StateREG = 0; /初始化变量SetTF = 1;PowTF = 1;/关电源THV = 0;TLV = 0;TMV = 0;KeyV = 0;TempKeyV = 0;KSDNum = 0;IntNum = 0;IntNum2 = 0;IntNum3 = 0;LED_One = 0;LED_Two= 0;InitDS1820(); /初始化ROMDS1820(); /跳过ROMTMERDS1820(); /E2PRAM中温度上限值调入RAMInitDS1820(); /初始化ROMDS1820(); /跳过ROMTMRDS1820(); /读出温度指令ReadDS1820(); /读出温度值和上限值TMSetV = TMRomV; /拷贝保存在DS18B20ROM里的上限值到TMSetVEA = 1;/允许CPU中断ET0 = 1; /定时器0中断打开TMOD = 0x1;/设定时器0为模式1,16位模式TH0=0xB1;TL0=0xDF;/设定时值为20000us(20ms)TR0 = 1;/开始定时while(1);/定时器0中断外理中键扫描和显示void KeyAndDis_Time0(void) interrupt 1 using 2 TH0=0xB1;TL0=0xDF;/设定时值为20000us(20ms)LEDPort = 0xFF; if (!Key_UP) KeyV = 1; if (!Key_DOWN) KeyV = 2; if (!Key_SET) KeyV = 3;/KeySETDowning = 0; /清除 if (KeyV != 0) /有键按下 Delay_10ms(); /延时防抖 按下10ms再测 if (!Key_UP) TempKeyV = 1; if (!Key_DOWN) TempKeyV = 2; if (!Key_SET) TempKeyV = 3; if (KeyV = TempKeyV) /两次值相等为确定接下了键 if (KeyV = 3) /按下SET键,如在SET状态就退出,否则进入 /KeySETDowning = 1; /表明SET正在按下 PowTF = 0; /电源标识开if (!KeyTF) if (SetTF) SetTF = 0; /标识位标识退出设定InitDS1820(); /初始化 ROMDS1820(); /跳过ROM TMWDS1820(); /写温度上限指令WriteDS1820(); /写温度上限到DS18B20ROMWriteDS1820(); /写温度上限到DS18B20ROMWriteDS1820(); /写温度上限到DS18B20ROMInitDS1820(); /初始化 ROMDS1820(); /跳过ROM TMREDS1820(); /温度上限值COPY回E2PRAM else SetTF = 1; if (!KeySETDown) /没有第一次按下SET时,KeySETDown标识置1 KeySETDown = 1; else KSDNum = KSDNum + 1; /前一秒内有按过SET则开始计数 if (SetTF) /在SET状态下 if (KeyV = 1) && (!KeyTF) TMSetV = TMSetV + 1; /上调温度 if (KeyV = 2) && (!KeyTF) TMSetV = TMSetV - 1; /下调温度