《单片机水温自动控制系统设计说明_(2).doc》由会员分享,可在线阅读,更多相关《单片机水温自动控制系统设计说明_(2).doc(23页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、本科生毕业论文(设计)题目 单片机水温自动控制系统设计 姓名 王国亮 学号 2008145044 院系 电气信息与自动化学院 专业 自动化 指导教师 闫绍敏 职称 讲师 2012 年 5月 15日曲阜师大学教务处制目 录摘要2关键词2Abstract2Keyword2引言2第1章 系统设计方案与要求31.1 系统要求31.2 系统组成31.3 单片机选择31.4 温度控制31.5 系统方案选择4第2章 PID控制算法52.1 PID控制的发展52.2 PID控制理论52.3 PID控制算法6第3章 系统硬件设计83.1 系统模块关系83.2 主要单元电路的设计93.2.1温度采集部分设计93.
2、2.2加热控制部分103.2.3 报警电路部分123.2.4 显示部分设计123.2.5 按键部分设计133.3 系统总电路图设计13第4章 软件设计部分134.1主程序方案设计134.2 DS18B20温度处理方案154.3 按键处理方案154.4 报警处理方案16致17参考文献17附录程序17单片机水温自动控制系统设计自动化专业学生 王国亮 指导教师 闫绍敏摘要:水温控制在工业与日常生活中应用广泛,分类较多,不同水温控制系统的控制方法也不尽相同,本设计基于单片机控制的水温自动控制系统,介绍了系统在硬件和软件方面的设计思想,以AT89C52单片机为核心,采用了温度传感器DS18B20,以PI
3、D算法控制以与PID参数整定相结合的控制方法来实现的水温的自动控制系统,通过形成微型监控系统,使水温变化情况可以进行动态的显示,并能在一定的围由人工设定。关键词: AT89C52 DS18B20温度传感器 PID算法Single-chip microcomputer temperature automatic control system designStudent majoring in automationGuoliang WangTutor Shaomin YanAbstract:The water temperature control applies widely used in t
4、he industry and the daily life,there are lots of classifications, so the control methods are different, this design the water temperature autocontrol system which controls based on the monolithic integrated circuit, introduced the system in the hardware and the software aspects design concept, take
5、the AT89C52 monolithic integrated circuit as the core, has used temperature sensor DS18B20, the water temperature autocontrol system which by the PID algorithm control as well as the PID parameter installation, unifies the control method which realizes. By making the constitution miniature superviso
6、ry system, enables the water temperature change situation to be possible to carry on the dynamic demonstration, and can by establish artificially in certain scope.Keyword: AT89C52 ;DS18B20 temperature sensor ;PID algorithm引言:本系统的设计可以用于水温控制系统和电饭煲等各种电器电路中。它以单片机AT89C52为核心,通过数码管显示温度,使用温度转换芯片DS18B20实时采集温
7、度并通过数码管显示,并提供各种运行指示灯用来指示系统现在所处状态,如:温度设置、加热、停止加热等,整个系统通过四个按键来设置加热温度和控制运行模式。传统的温度采集电路相当复杂,需要经过温度采集、信号放大、滤波、AD转换等一系列工作才能得到温度的数字量,并且这种方式不仅电路复杂,元器件个数多,而且线性度和准确度都不理想,抗干扰能力弱。现在常用的温度传感器芯片不但功率消耗低、准确率高,而且比传统的温度传感器有更好的线性表现,最重要的一点是使用起来方便。自动控制系统总的发展趋势是高性能、数字化、集成化、智能化和网络化。智能温度控制系统的设计是为了满足市场对成本低、性能稳定、可远程监测、控制现场温度的
8、需求而做的课题,具有较为广阔的市场前景。第1章 系统设计方案与要求1.1系统要求 (1)可按键设定控制温度值,并用数码管显示,分辨率为0.1; (2)可以测量并显示水的实际温度。温度测量误差在0.5; (3)水温控制系统应具有全量程(1070)的升温、降温。 (4)在全量程任意设定一个温度值(例如起始温度+15),控制系统可以实现该给定温度的恒值自动控制。 (5)温度控制的静态误差0.2(在最小稳态时间)。1.2系统组成随着计算机与超大规模集成电路的迅速发展,以现代控制理论和计算机为基础,采用数字控制、显示、配额后执行器与控制阀构成的计算机控制系统,在过程控制过程中得到越来越广泛的应用。由于本
9、例是一个典型的检测、控制型应用系统,它要求系统完成从水温检测、信号处理、输入、运算到输出控制电炉加热功率以实现水温控制的全过程。因此,应以单片机为核心组成一个专用计算机控制系统,以满足检测、控制应用类型的功能要求。另外,单片机的使用也为实现水温的自动化控制以与提供完善的人机交互界面与多机通讯接口提供了可能,而这些功能在常规数字逻辑道路中往往是难以实现或无法实现的。所以,本例采用以单片机为核心的直接数字控制系统(DDC)。1.3 单片机选择AT89C52单片机是最常用的单片机,是一种低损耗、高性能、CMOS八位微处理器。AT89C52与MCS-51系列的单片机在指令系统和引脚上完全兼容,而且能使
10、系统具有许多MCS-51系列产品没有的功能,功能强、灵活性高而且价格低廉。AT89C52可构成真正的单片机最小应用系统,缩小系统体积,增加系统的可靠性,降低了系统成本。只要程序长度小于4K,四个I/O口全部提供给用户。系统运行中需要存放的中间变量较少,不必再扩充外部RAM。1.4 温度控制方案一:用热敏电阻:通过电阻的变化来获得电压的变化,起价格虽然便宜但是精度不是很高。对于一个精度要求高的系统不宜采用。方案二:用DS18B20:通过DS18B20温度传感器采集温度,价格较高精度高。(一)DS18B20芯片特点DS18B20是DALLAS半导体公司生产的,是一种单总线温度传感器,属于新一代适配
11、微处理器的智能温度传感器,有两种封装形式分别为3脚PR-35封装和16脚SSOP封装。本文采用的是3脚PR-35封装,其具有以下特点:(1)采用了单总线技术,传感器直接以二进制输出被测温度,可通过串行口线,也可与单片机通过I/O口连接;(2)测量温度围为:-55+125,测量精度高达+0.5;(3)含寄生电源,在两线方式下可通过数据线提供寄生电源,而不需要再单独供电(4)转换时间在分辨率为12位(即0.0625)时最大为750ms;(5)用户可分别对每个器件设定温度上下限;(6)DS18B20在使用时不需要任何外围元件,全部传感元件与转换电路集成在形如一只三极管的集成电路;(7)电源极性接反时
12、,芯片不会因发热而烧毁,但不能正常工作;(8)每个DSl8B20器件对应一个唯一的64位长的序号,该序号值存放ROM中,可通过序号匹配实现多点测温。如图1所示,DQ是数据线,用于和CPU连接传送串行数据,不需要外部件,不需要备份电源、可用数据线供电;GND是地线;Voo是3055V电源。由于DSl8820具有寄生电源的特性,所以在实际应用中,Vno常接地。图 1 DS18B20外形与引脚1.5 系统方案选择方案1:此方案是采用传统的二位模拟控制方法,选用模拟电路,用电位器设定给定值,采用上下限比较电路将反馈的温度值与给定的温度值比较后,决定加热或者不加热。由于采用模拟控制方式,系统受环境的影响
13、大,不能实现复杂的控制算法使控制精度做得较高,而且不能用液晶显示和键盘设定,如图2。数据采集信号放大温度预置比较器信号放大控制开关 图2 模拟控制框图方案2:采用单片机AT89C52为核心。使用温度传感器DS18B20采集温度变化信号,通过单片机处理后去控制温度,使其达到稳定。使用单片机具有编程灵活,控制简单的优点,使系统能简单的实现温度的控制与显示,并且通过软件编程能实现各种控制算法使系统还具有控制精度高的特点,如图3,因此选择方案2。电源单片机AT89C52数码管显示继电器温度传感器DS18B20报警按键指示灯 图3 单片机控制框图第2 章 PID控制算法2.1 PID控制的发展PID控制
14、是最早发展起来的控制策略之一,现今使用的PID控制器产生并发展于1915-1940年期间。尽管自1940年以来,许多先进的控制方法不断推出,但由于PID控制方法具有结构简单、鲁棒性好、可靠性高、参数易于整定,P、I、D控制规律各自成独立环节,可根据工业过程进行组合,而且其应用时期较长,控制工程师们已经积累了大量的PID控制器参数的调节经验。因此,PID控制器在工业控制中仍然得到广泛应用。据统计,有90%以上的工业控制器采用PID控制器。PID控制器的发展经历了液动式、气动式、电动式几个阶段,目前正由模拟控制器向着数字化、智能化控制器的方向发展。2.2 PID控制理论PID控制器是一种线性控制器
15、,它根据给定值厂r(t)与实际输出值y(t)构成控制偏差e(t): (2.1)将偏差的比例(Proportional)、积分(Integral)和微分(Derivative)通过线性组合构成控制量,对被控对象进行控制,因此称为PID控制。PID控制系统原理如图4所示。其控制规律: (2.2)或者写成传递函数的形式为: (2.3) 式中: :比例系数:积分时间常数:微分时间常数比例微分积分被控对象y(t)r(t) e(t) _+图4 PID 控制系统原理图PID控制器各校正环节的作用如下:1)比例环节即时成比例地反映控制系统的偏差信号,偏差一旦产生,控制器立即产生控制作用,以减少偏差;2)积分环
16、节主要用于消除静差,提高系统的无差度。积分作用的强弱取决于积分时间常数,越大,积分作用越弱,反之则越强;3)微分环节能够反映偏差信号的变化趋势(变化速率),并且能在偏差信号值变得太大之前,在系统中引入一个有效的早期修正信号,从而加快系统的动作速度,减少调节时间。2.3 PID控制算法由于计算机控制是一种采样控制系统,它只能根据采样时刻的偏差值计算控制量。因此,(2.2)式中的积分和微分项不能直接使用,需要进行离散化处理。现令为采样周期,以一系列的采样时刻点代表连续时间,以累加求和近似代替积分,以一阶后向差分近似代替微分,做如下的近似变换: (2.4)(2.5) (2.6)其中,为采样周期,为系
17、统第次采样时刻的偏差值,e()为系统第()次采样时刻的偏差值,为采样序号,=0,1,2,。将上面的(2.5)式和(2.6)式代入(2.2)式,则可以得到离散的PID表达式:(2.7)如果采样周期足够小,该算式可以很好的逼近模拟PID算式,因而使被控过程与连续控制过程十分接近。通常把式(2.7)称为PID的位置式控制算法。若在(2.7)式中,令:(称为积分系数)(称为微分系数)则 (2.8)式(2.8)即为离散化的位置式PID控制算法的编程表达式。可以看出,每次输出与过去的所有状态都有关,要想计算,不仅涉与和,且须将历次相加,计算复杂,浪费存。下面,推导计算较为简单的递推算式。为此,对(2.8)
18、式作如下的变动:考虑到第次采样时有 (2.9)使(2.8)式两边对应减去(2.9)式,得整理后得 (2.10)其中,(2.10)式就是PID位置式得递推形式。如果令 则 式中的、同(2.10)式中的一样。在计算机控制中,、都可以事先求出,实际控制时只须获得、三个有限的偏差值就可以求出控制增量。由于其控制输出对应执行机构的位置的增量,故(2.11)式通常被称为PID控制的增量式算式。增量式PID控制算法与位置式控制算法比较,有如下的一些优点: 1)位置式算法每次输出与整个过去状态有关,算式中要用到过去偏差的累加值,容易产生较大的累计误差。而增量式中只须计算增量,算式中不需 要累加,控制增量的确定
19、仅与最近几次偏差采样值有关,当存在计算误差或者精度不足时,对控制量的影响小,容易通过加权处理获得较好的控制效果;2)由于计算机只输出控制增量,所以误动作影响小,而且必要时可以用逻辑判断的方法去掉,对系统安全运行有利;3)容易实现手动一自动无扰动切换。入口输入并采样r(k),y(k)计算偏差e(k)=r(k) y(k)计算存以备输出参数序号调整 e(k-1) e(k-2) e(k) e(k-1)返回图 5 增量式PID控制算法程序流程图鉴于以上优点,本系统的控制算法即采用增量式的PID控制算法。第3章 系统硬件设计3.1 系统模块关系本系统通过循环查询执行,按键扫描也是用循环查询执行,由于本系统
20、对实时性要求不是很高,所以没有用中断方式来处理。各模块关系图如图6所示。3.2主要单元电路的设计3.2.1温度采集部分设计本系统采用半导体温度传感器作为敏感元件。传感器我们采用了DS18B20单总线可编程温度传感器,来实现对温度的采集和转换,直接输出数字量,可以直接和单片机进行通讯,大大简化了电路的复杂度。DS18B20应用广泛,性能可以满足题目的设计要求。DS18B20的测温电路如图7所示。测量结果直接输出数字温度信号,以“一线总线”串行传送给 CPU,同时可传送 CRC 校验码,具有极强的抗干扰纠错能力 ,该部分的温度采集电路流程如图6所示:单片机初始话模块执行器模块按键检测(是否有电平转
21、换)DS18B20与PID初始化DS18B20处理温度值,换算成BCD码接收并经数码管显示温度图6 系统硬件模块关系图图7 DS18B20接线图(1)DSI8B20的测温功能的实现:测温电路的实现是依靠单片机软件的编程上。 当DSI8B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的0,1字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式以0062 5LSB形式表示。温度值格式如表1所示,其中“S”为标志位,对应的温度计算:当符号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变换为原码,再计
22、算十进制值。DSI8B20完成温度转换后,就把测得的温度值与TH做比较,若TTH或T RoM操作命令 - 存储器操作命令- 处理数据 初始化 单总线上的所有处理均从初始化开始 ROM操作命令总线主机检测到DSl8B20的存在便可以发出ROM操作命令之一这些命令如表2所示表2 ROM操作命令表指令代码Read ROM(读ROM)33HMatch ROM(匹配ROM)55HSkip ROM(跳过ROMCCHSearch ROM(搜索ROM)F0HAlarm search(告警搜索)ECH存储器操作命令如表3所示表3 存储器操作命令表指令代码Write Scratchpad(写暂存存储器)4EHRe
23、ad Scratchpad(读暂存存储器)BEHCopy Scratchpad(复制暂存存储器)48HConvert Temperature(温度变换)44HRecall EPROM(重新调出)B8HRead Power supply(读电源)B4H(3)温度转换算法与分析由于DS18B20转换后的代码并不是实际的温度值,所以要进行计算转换。温度高字节 (MS Byte)高5位是用来保存温度的正负(标志为S的bit11bit15),高字节(MS Byte)低3位和低字节来保存温度值(bit0 bit10)。其中低字节(LS Byte)的低4位来保存温度的小数位(bit0 bit 3)。由于本程
24、序采用的是0.0625的精度,小数部分的值,可以用后四位代表的实际数值乘以0.0625,得到真正的数值,数值可能带几个小数位,所以采取小数舍入,保留一位小数即可。也就说,本系统的温度精确到了0.1度。算法核心:首先程序判断温度是否是零下,如果是,则DS18B20保存的是温度的补码值,需要对其低8位(LS Byte)取反加一变成原码。处理过后把DS18B20的温度Copy到单片机的RAM中,里面已经是温度值的Hex码了,然后转换Hex码到BCD码,分别把小数位,个位,十位的BCD码存入RAM中。3.2.2加热控制部分由于本系统要控制电热丝进行加热,所以功率较大,因此要借助功率驱动电路。在器件选择
25、上留足余量,增加安全性。加热部分采用继电器控制,电路简单可靠。其中,D2 4001二极管用于电感线圈的功率释放,电路如图8所示。当实测温度低于设定值时,由单片机输出高电平信号。三极管9014导通,继电器开始工作,继电器可以起到隔离高低电压的作用,继电器使交流部分导通对水加温。继电器线圈DC 5VD2 4001111Q19014K1 220vL N R6 3.6K加热电阻图8 继电器控制 当设定温度低于实测温度时,为了加快系统动态响应速度,我们在系统原基础上添加了设置了一个冷却电扇,加速对水温的降低,从而使系统整体性能得以提善。其中,D2 4001二极管用于继电器电感线圈的功率释放,Q2 901
26、4三极管作为开关使用,当三极管导通,使继电器工作,继电器使交流部分导通,风扇开始工作降温,其原理图如图9所示:继电器线圈DC 5VD24001Q19014K1 220vL N R6 3.6K冷却风扇图9 风扇控制3.2.3 报警电路部分由于蜂鸣器的工作电流一般比较大,以致于单片机的I/O 口是无法直接驱动的如图10,所以要利用放大电路来驱动,一般使用三极管来放大电流就可以。图10 报警器接线图3.2.4 显示部分设计显示部分使用四位七段数码管显示,由于采用共阳极显示,所以要加上拉电阻,采用74LS373进行数据锁存,如图11。共阳极码表TABLE: 0xc0,0xf9,0xa4,0xb0 0x
27、99,0x92,0x82,0xf8 0x80,0x90,0x88,0x83 0xc6,0xa1,0x86,0x8e74LS373 的输出端 O0O7 可直接与总线相连。 当三态允许控制端 OE 为低电平时,Q0Q7为正常逻辑状态,可用来驱动负载或总线。当 OE 为高电平时,Q0Q7 呈高阻态,即不驱动总线,也不为总线的负载,但锁存器部的逻辑操作不受影响。当锁存允许端 LE 为高电平时,Q 随数据 D 而变。当 LE 为低电平时,D 被锁存在已建立的数据电平。当 LE 端施密特触发器的输入滞后作用,使交流和直流噪声抗扰度被改善 400mV。 引出端符号:D0D7 数据输入端 OE 三态允许控制端
28、(低电平有效) LE 锁存允许端 Q0Q7 输出端 图11 数码管接线图3.2.5 按键部分设计此部分共使用四个按键,其中一个是复位键另外三个是温度(T0)设置按键。可以任意设置T0的值,数码管为温度显示部分显示T0、T1的值。通过软件控制可以预先设定温度值T0,此温度值为我们理想的温度值,使用延时程序消除抖动。若采集的实际水温T1小于此值则控制烧水器继续加温,且绿色指示灯亮红色指示灯灭。若T1达到T0则控制烧水器停止加温并且红色指示灯亮绿色指示灯灭蜂鸣器报警。由此而构成一个简单的水温测量与控制系统,如图12。图12 按键设计3.3系统总体线路设计 系统总的设计思想是提高静态控温精度,减小调节
29、时间和超调量。整个系统综合有如下几个特点:1.通过DS18B20集成温度传感器减少了A/D转换电路,简化了电路结构。2.在采集水温方面采用在DS18B20表面涂硅胶的方法,实现了把DS18B20放入水中采集温度。3.在电路设计中充分考虑了系统的可靠性和安全性。通过调试达到基本功能指标,动态性能也达到较好的要求。4.通过继电器实现运用小电流控制大电流。电路如图13所示:第4章 软件设计部分本系统采用的是循环查询方式,来显示和控制温度的。主要包括四段程序的设计:DS18B20读温度程序,数码管的驱动程序,按键处理程序,以与越限报警。4.1主程序方案设计系统的主程序流程图如图14所示,当有信号输入时
30、,主程序启动,根据部设定的条件逐步运行,达到设计目的。图13 总体线路设计主程序(main)PID初始化DS18B20的初始化按键设置目标温度DS18B20温度转换读取温度数码管显示信号传送与处理温度比较是否小于?控制继电器加热温度比较是否大于?控制风扇降温连续温度采样PID控制进行PID控制继电器间断控制加热,减少功率和超调YNYN图14 主程序流程图4.2 DS18B20温度处理方案 图15为DS18B20实现温度转换和温度数值读取流程图,用于系统的温度转换和温度数值的读取。DS18B2的读时序:(1)对于DS18B20的读时序分为读0时序和读1时序两个过程。(2) 对于DS18B20的读
31、时隙是从主机把单总线拉低之后,在15秒之就得释放单总线,以让DS18B20把数据传输到单总线上。DS18B20在完成一个读时序过程,至少需要60us才能完成。DS18B20的写时序:(1)对于DS18B20的写时序仍然分为写0时序和写1时序两个过程。(2)对于DS18B20写0时序和写1时序的要求不同,当要写0时序时,单总线要被拉低至少60us,保证DS18B20能够在15us到45us之间能够正确地采样IO总线上的“0”电平,当要写1时序时,单总线被拉低之后,在15us之就得释放单元总线。开始开始初始化DS18B20存在?ROM操作命令存储操作命令读取温度值返回是否 图15 温度采集转换流程
32、图4.3 按键处理方案此流程为按键处理模块,CPU通过检测数据线的状态(0或1)就能知道是否有按键闭合,按键管理程序的功能是检测是否有按键闭合,如果有按键闭合,消除抖动,根据电平转到相应的处理程序,按键流程图如图16所示。扫描代码段开始引脚电平是否为0延时引脚电平是否为0引脚电平是否为1扫描代码段完毕执行相应操作图16 按键处理流程图YesNoNoYesNo4.4 报警处理方案运行程序后,温度传感器DS18B20即可对环境进行温度采集,并送LED数码管显示。我们可以在程序里设定温度上限值,当采集到的外界温度高于当前所设定温度上限值时,程序就会进入报警子程序,触发蜂鸣器进行报警。其程序流程如图1
33、7所示:YN 进行温度比较 超过上限?P1.3取反,启动蜂鸣器不启动蜂鸣器,正常显示温度开始图17 报警子程序流程图致首先,感闫绍敏老师的指导建议,对我的论文改进起到很大的帮助。通过本次应用系统设计,在很大程度上提高了我们的独立思考能力和单片机的专业知识,也深刻了解写一篇应用系统的步骤和格式,我所设计的该系统主要根据目前节省能源的发展趋势,采用了自动化的结构形式,实现对水温的自动检测和控制。系统以AT89C52单片机为核心部件,单片机系统完成对水温信号的采集、处理、显示等功能; 并采用了PID算法,因而提高了控制的准确度。 参考文献:1 胡寿松.自动控制原理.科学,20012 顾德英.计算机控
34、制技术.邮电大学,2006 3 谭浩强. C语言程序设计教程.高等教育,20064 林立.单片机原理与应用-基于proteus和Keil C .电子工业,2009 5 马建伟.PID控制设计理论与方法.科学,20086 徐科军传感器与检测技术电子工业,20087 康华光. 电子技术基础-模拟部分.高等教育,20068 阎石. 数字电子技术基础.高等教育,20099 邱关源.电路.高等教育,200510 周润景基于PROTEUS 的电路与单片机系统设计与仿真航空航天大学,2006附录程序# include# include# includesbit DQ = P14; / 定义DS18B20 的
35、数据口sbit SET = P10; / 定义报警值的控制开关sbit BEEP = P13;unsigned char TAP10 = / 共阳极, 不带点 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,0x80, 0x90, ;unsigned char TAP210 = / 共阳极, 带点 0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x02, 0x78,0x00, 0x10, ;/ 定义一个存放转换后温度值的数组, 温度值为字符型(ASCII码),小数点后保留2位unsigned char str10 ;uns
36、igned char data con=0x00;/ 延时子程序, 延时( 10* D+ 3) usvoid delay_10us( unsigned char D) unsigned char i; for (i=0;iD;i+) _nop_( ) ; / 空操作, 一个指令周期 _nop_( ) ; /1ms延时函数delay1ms(int t)int i,j;for (i=0;it;i+)for (j=0;j120;j+);/ DS18B20 初始化 void INIT(void) DQ = 0; delay_10us(50) ; / 等待500 s DQ = 1; / 释放18B20
37、数据线。 delay_10us(9) ; / 等待90 s while ( ! DQ) ; / 等待18B20 准备好/ 读DS18B20 的程序unsigned char READ(void) unsigned char i,j; unsigned char D = 0; for ( i=0; i1; / 先读数据低位 DQ = 0; _nop_( ) ; DQ = 1; / 释放18B20 数据线 for ( j=1; j9; j+ ) _nop_( ) ; if(DQ) D += 0x80; / 如果数据线上是 1 , D 最高位为 1 , 否则为 0 delay_10us (6) ;
38、return D; / 返回值为D, 即读出的一个字节数据。 / 写DS18B20 的程序void WRITE( unsigned char D) unsigned char i; for ( i=0; i1; / 右移一位, 准备写下一位 / 显示程序( str 数组元素是ASCII码, 所以要减去48)void display(void) unsigned char i; unsigned char j=100; while( j- ) for ( i=0; i255; i+ ) P0 = TAPstr0-48 ; P2 = 0x01; P2 = 0x00; for ( i=0; i255
39、; i+ ) P0 = TAP2str1-48 ; P2 = 0x02;P2 = 0x00; for ( i=0; i255; i+ ) P0 = TAPstr3-48 ; P2 = 0x04; P2 = 0x00; for ( i=0; i255; i+ ) P0 = TAPstr4-48 ; P2 = 0x08; P2 = 0x00; /蜂鸣器控制void Alarm(unsigned char t) unsigned char i,j;for(i=0;i200;i+) BEEP= BEEP;for(j=0;j=2) con=0;if(con) / 报警值确定 if( P1_1=0) /d
40、elay1ms(10); /按键去抖 /while( P1_1=0); warning+; / 增加上限 else if( P1_2=0) /delay1ms(10); /按键去抖 /while( P1_2=0); warning-; / 减小上限 else warning+= 0; str 0 = warning / 10+ 48; str 1 = warning%10+ 48; str 3 = 48; str 4 = 48; display( ) ; delay_10us( 5) ; INIT( ) ; / 初始化DS18B20 WRITE( 0xCC) ; / 跳过ROM 配置 WRITE( 0x44) ; / 开始转