资源描述
编号: 200600802079 毕业设计题 目 红外快速检测人体温度装置的设计与研制 指导教师 王春玲 学生姓名 秦军红 学 号 200600802079 专 业 电子信息工程 教学单位 物理系 (盖章) 二O一O年 六月 一日目 录摘要及关键词引言1. 设计思路与原理方框图1.1设计思路1.2系统方框图及测量原理2. 器件选择2.1红外器件的选择2.2 LM358放大器件2.3温度传感器DS18B202.4 A/D转换器TLC5492.5 AT89C51单片机2.6显示器件LM016L3.电路设计3.1复位电路设计3.2上下限温度控制电路3.3报警电路3.4显示电路3.5 P7187红外传感电路4. 系统的调试仿真5.源程序参考文献致谢 红外快速检测人体温度装置的设计与研制 秦军红(德州学院物理系,山东德州253023)摘 要 系统由红外热释传感器、温度传感器DS18B20、高精度放大器、A/D转换器TLC549、AT89C51单片机、译码显示模块与报警电路等部分构成,实现非接触式红外快速测温,它能够在较短的时间内准确测量出人体的温度,而在测得温度超出某一范围时即启用报警电路进行超标报警。文中提出了具体设计方案,讨论了红外非接触式体温计的基本原理,进行了可行性论证。给出了电路图和程序流程图并附有源程序。由于利用了单片机及数字控制系统的优点,系统的各方面性能得到了显著的提高。具有温度分辨率高、响应速度快、不扰动被测目标温度分布场、测量精度高和稳定性好等优点;同时也有测量值受被测物体发射率、反射热源、气氛干扰影响的弱点。关 键 词 红外热释传感器;温度传感器;快速检测;非接触测量;A/D转换器;单片机;译码显示;超标报警Abstract This system by infrared pyroelectric sensor, temperature sensor DS18B20, high accuracy amplifier,A/D switch TLC549, AT89C51 microcomputer master control part constitution ,decoding demonstration module and warning circuit . Realized the non-contact type infrared clinical thermometerIt can be accurate in shorter time to measure a temperature of human body, but at measure the temperature outrun some one scope be in use to report to the police electric circuit to carry on a super mark to report to the police namely. In the article discussed the infrared non- contact type clinical thermometer basic principle, proposed the concrete design proposal, and has carried on the feasible proof. And we have produced the circuit diagram and the program flow diagram and attach the source program. Follow-on trend of abroad digitize was at present complied with in the design of this system, and the exploit singly merit of piece machine and numerical control system makes the each side function of system get the notable raise. With a temperature high resolution, fast response, non-disturbance measured target temperature distribution field, high accuracy and stability and good; also have measured values by the measured object emissivity, reflective heat, the atmosphere disturbances weaknesses.Key words Pyroelectric Infrared Sensors, temperature sensor,fast check,non contact measurement, A/D switch,single chip computer, decoding demonstration, excess warning 引言目前,国内传统的体温测量是用医用玻璃液体温度计(俗称体温表)、医用电子接触式温度计(常用热敏电阻作为它的感温元件等插入人体内部(舌下、肛门)或置于腋下,通过与人体接触使温度计测出人的体温。但这些体温计的缺点是测量的速度慢(约2分钟以上)。玻璃水银温度计还易碎,在使用时容易因消毒不彻底而引起交叉感染。红外快速检测人体温度装置,有效地避免国内传统的体温测量的缺点,能够在机场、海关、车站、宾馆、商场、影院、写字楼、学校等人流量较大的公共场所,快速,准确,没有交叉感染地测出人体温度。在2003年全国防“非典”斗争中,中科院上海技术物理研究所在863计划高技术成果的基础上对红外技术应用于非接触式测温进行了深入研究,在短时间内开发成功了“非接触式红外测温仪”,打开了国内“非接触式测量”的新篇章,但由于这种装置受一定因素影响,测量结果还有待进一步进行校正。 在国外,非接触式红外测温仪已经非常先进了,自1999年就有许多国家致力于这方面的开发研究,到现在为止很多国家的产品已经达到国际先进水平,并已广泛应用于各个领域。比如:美国早在2001年就颁布了有关红外测温仪的计量标准,美国雷泰公司生产的ST系列红外测温仪已达到世界领先水平。由于红外测温仪测量温度范围宽,除了用于人体温度检测外,还可用于电器的红外测温、供暖的红外测温、运输/汽车维修时的红外测温等各个领域。因此,它具有广泛的开发前景! 这里设计的红外快速检测人体温度装置,由红外热释传感器、温度传感器DS18B20、高精度放大器、A/D转换器TLC549、AT89C51单片机、译码显示模块与报警电路等部分构成,从原理上进行设计计算,并进行初步的制作与调试。1. 设计思路与原理方框图1.1 设计思路本设计中采用的热释电红外传感器是PerkinElmer Optoelectronics的P7187。温度传感器是美国DALLAS半导体公司最新推出的DS18B20。单片机是TI公司的带有LCD驱动的低功耗单片机,可以直接与LCD屏相连而不需要另外的驱动电路,它最多可以显示96段。ADC采用的是AD公司带有恒定电流源的高精度的16位-AD,它为两路输入,一路与热电堆相连,另一路与热敏电阻相连。恒定电流源可以用于补偿电路中驱动热敏电阻。利用红外传感器对被测目标时的热辐射进行采集,通过转换电路将红外传感器采集到的光信号转换成电信号,再将电信号通过放大电路,A/D转换等单元电路处理后送到单片机中,最后单片机将带有数据信息的电信号进行分析处理,将电信号转变成与之相对应大小的温度值并将结果送到LCD进行显示。1.2 系统方框图及测量原理 1.2.1 系统方框图根据设计要求,建立总的系统设计框架。总体框架图如1.2-11.2-1红外测温装置袭击框架 1.2.2 测量原理自然界一切温度高于绝对零度(-273.15)的物体,由于分子的热运动,都在不停地向周围空间辐射包括红外波段在内的电磁波,其辐射能量与物体本身的温度关系符合辐射定律。 E=(T4-T04) (公式一)公式一中:E为辐射出射度,表现物体辐射能力的强弱,单位是Wm3;为斯蒂芬彼尔兹曼常数,5.6710-8W(m2K4);为物体的辐射率;T为物体的温度,单位K;T0为物体周围的环境温度,单位K。物体的温度越高,辐射功率就越大。相反,物体辐射功率越大,其温度也越高,利用这个公式,我们就可以知道所测量物体的温度。人体主要辐射波长在910m的红红外线,通过对人体量的测量,便能准确的测量人体表面温度。由于该波长范围内的光线不被空气所吸收,因而能更准确的测量人体表面温度。红外测温最大的优点是测量速度快,并由于它只吸收人体对外发射的红外辐射,没有任何化学、生物因素作用于人体,所以可以安全放心使用。红外快速检测人体温度装置是利用红外传感器对被测目标时的热辐射进行采集,通过转换电路将红外传感器采集到的光信号转换成电信号,再将电信号通过放大电路,A/D转换等单元电路处理后送到单片机中,最后单片机将带有数据信息的电信号进行分析处理,将电信号转变成与之相对应大小的温度值显示输出。当人体靠近红外探测器的有效范围后,人体释放的电磁波或红外辐射会被红外热释传感器所吸收,从而引起红外热释传感器输出电压的变化。但因其输出电压信号特别小,所以要经过一定的放大处理。然后经过A/D转换等电路处理后送入单片机,单片机将传送过来的数据信号分析处理,并将起转换为相应大小的温度值显示输出。当显示的温度低于所设置的温度(TTL)就会启动报警电路声光报警;当显示的温度高于所设置的最高温度(TTH),也会启动声光电路报警。图1.2-2是红外测温的系统原理图。 1.2-2系统原理图2 器件选择2.1 红外器件的选择 2.1.1 热释电效应当一些晶体受热时,在晶体两端将会产生数量相等而符号相反的电荷,这种由于热变化产生的电极化现象,被称为热释电效应。通常,晶体自发极化所产生的束缚电荷被来自空气中附着在晶体表面的自由电子所中和,其自发极化电性不能表现出来。某些晶体(如:PZT,LiTaO3,PVFZ等)的表面接受了红外线的辐射能量,其表面产生温度变化,随着温度的上升或下降,这些物质表面上就会产生电荷的变化。图2.1.1-1为热释电晶体表面电荷随温度变化的移动情况。 图 2.1.1-1 热释电效应图 可见,当红外线照射热释电元件时,其内部极化作用发生很大的变化,其变化部分作为电荷释放出,从外部取出该电荷就变成传感器的输出电压。由此可见,热释电传感器只有在温度变化时才有输出电压。 2.1.2 P7187热释电红外传感器热释电红外传感器利用的正是热释电效应,是一种温度敏感传感器。它由陶瓷氧化物或压电晶体元件组成,元件两个表面做成电极,当传感器监测范围内温度有T的变化时,热释电效应会在两个电极上会产生电荷Q,即在两电极之间产生一微弱电压V。传感器主要有外壳、滤光片、热释电元件PZT、场效应管FET等组成。其中,滤光片设置在窗口处,组成红外线通过的窗口。滤光片为6mm多层膜干涉滤光片,对太阳光和荧光灯光的短波长(约5mm以下)可很好滤除。热释电元件PZT将波长在8mm12mm之间的红外信号的微弱变化转变为电信号,为了只对人体的红外辐射敏感,在它的辐射照面通常覆盖有特殊的菲涅耳滤光片,使环境的干扰受到明显的抑制作用。P7187热释电红外探测器是由热释电红外传感器、菲涅耳透镜及电子电路组成的一种光电检测装置。他能无接触地检测人体运动时辐射出的红外线并转换成电信号输出。人体的体温约为3 7,辐射最多红外线的波长是10m左右,而P7187对720m范围波长比较灵敏,他采用了2个热释电元件PZT板,PZT板表面吸收红外线,并在受光面的内外各自安装取出电荷的一对电极,能敏感的捕捉到被测物体或光源,具有很高的灵敏度。这2个受光电极反向串联,可有效地防止背景波动以及干扰光照射时的误动作(一是环境变化引起的误动作,二是使用光调制器时的误动作)对传感器的影响,当2个受光电极同时受到红外线照射时,输出电压相互抵消而无输出,只有当人体移动时才有电压的输出,输出电压比较精确的反映了人体移动的情况。图2.1.2-1为组成结构图和P7187等效电路图。 图2.1.2-1 P7187热释电红外传感器结构图与等效电路图2.2 LM358放大器件(1)LM358 内部包括有两个独立的、高增益、内部频率补偿的双运算放大器,适合于电源电压范围很宽的单电源使用,也适用于双电源工作模式,在推荐的工作条件下,电源电流与电源电压无关。它的使用范围包括传感放大器、直流增益模块和其他所有可用单电源供电的使用运算放大器的场合。(2)LM358参数特性 内部频率补偿; 内部频率补偿; 直流电压增益高(约100dB); 单位增益频带宽(约1MHz); 电源电压范围宽:单电源(330V);双电源(1.5 一15V); 低功耗电流,适合于电池供电; 低输入偏流; 低输入失调电压和失调电流; 共模输入电压范围宽,包括接地; 差模输入电压范围宽,等于电源电压范围; 输出电压摆幅大(0 至Vcc-1.5V);2.3 温度传感器DS18B20 2.3.1 DS18B20性能特点DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现912位的数字值读数方式。DS18B20的性能特点如下:独特的单线接口仅需要一个端口引脚进行通信;多个DS18B20可以并联在惟一的三线上,实现多点组网功能;无须外部器件;可通过数据线供电,电压范围为3.05.5;零待机功耗;温度以或位数字;用户可定义报警设置;报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作; 2.3.2 DS18B20内部结构DS18B20采用3脚PR35封装或8脚SOIC封装,其内部结构框图如图2.3.2-1图2.3.2-1DS18B20其内部结构框图64位ROM的结构开始8位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后8位是前面56位的CRC检验码,这也是多个DS18B20可以采用一线进行通信的原因。温度报警触发器TH和TL,可通过软件写入户报警上下限。DS18B20温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的EERAM。高速暂存RAM的结构为8字节的存储器,结构如图3所示。头2个字节包含测得的温度信息,第3和第4字节TH和TL的拷贝,是易失的,每次上电复位时被刷新。第5个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。DS18B20工作时寄存器中的分辨率转换为相应精度的温度数值。该字节各位的定义如图2.3.2-2所示。低5位一直为1,TM是工作模式位,用于设置DS18B20在工作模式还是在测试模式,DS18B20出厂时该位被设置为0,用户要去改动,R1和R0决定温度转换的精度位数,来设置分辨率。 图2.3.2-2 DS18B20的字节定义由图2.3.2-3可见,DS18B20温度转换的时间比较长,而且分辨率越高,所需要的温度数据转换时间越长。因此,在实际应用中要将分辨率和转换时间权衡考虑。R1R0分辨率/位温度最大转向时间/ms00993.750110187.510113751112750图2.3.2-3高速暂存RAM的第6、7、8字节保留未用,表现为全逻辑1。第9字节读出前面所有8字节的CRC码,可用来检验数据,从而保证通信数据的正确性。当DS18B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1、2字节。单片机可以通过单线接口读出该数据,读数据时低位在先,高位在后,数据格式以0.0625LSB形式表示。当符号位S0时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;当符号位S1时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制数值。图2.3.2-4是一部分温度值对应的二进制温度数据。 DS18B20完成温度转换后,就把测得的温度值与RAM中的TH、TL字节内容作比较。若TTH或TTL,则将该器件内的报警标志位置位,并对主机发出的报警搜索命令作出响应。因此,可用多只DS18B20同时测量温度并进行报警搜索。在64位ROM的最高有效字节中存储有循环冗余检验码(CRC)。主机ROM的前56位来计算CRC值,并和存入DS18B20的CRC值作比较,以判断主机收到的ROM数据是否正确。DS18B20的测温原理是这这样的,器件中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1;高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为减法计数据2的脉冲输入。器件中还有一个计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将0所对应的一个基数分别置入减法计数器1、温度寄存器中,计数器1和温度寄存器被预置在0所对应的一个基数值。减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器的预置值减到0时,温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器计数到0时,停止温度寄存器的累加,此时温度寄存器中的数值就是所测温度值。其输出用于修正减法计数器的预置值,只要计数器门仍未关闭就重复上述过程,直到温度寄存器值大致被测温度值。 图2.3.2-4 一部分温度对应表另外,由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作按协议进行。操作协议为:初使化DS18B20(发复位脉冲)发ROM功能命令发存储器操作命令处理数据。2.4 A/D 转换器TLC549 2.4.1TLC549 的性能参数TLC549是采用IinCMOSTM技术并以开关电容逐次逼近原理工作的8为串行A/D芯片,可与通用微处理器、控制器通过I/O、CLOCK CS、DATA OUT三条口线进行串行接口。TLC549既有4MHz的片内系统时钟和软、硬件控制电路,转换时间最长为17s,允许最高转换速度达40000次/s。总失调误差最大为0.5LSB,典型功耗为6mW。TLC549采用差分参考电压高阻输入,抗干扰,可按比例量程校准转换范围,由于其VREF-接地时,(VREF+)-(VREF-)1V,故可用于较小信号的采样,此外该芯片还单电源36V的供电范围。总之,TLC549具有控制口线少,时序简单,转换速度快,低功耗,价格便宜等特点,故我们选用TLC549作为A/D转换器件使用。TLC549的内部框图和引脚名称如图2.4.1-1图2.4.1-1 TLC549内部框图 2.4.2 TLC549的工作原理TLC549带有片内系统时钟,该时钟与I/O CLOCK是独立工作的,无需特殊速度和相位匹配。当CS为高时,数据DATA OUT端处于高阻态,此时I/O CLOCK不起作用。这种CS控制作用允许在同时使用TLC549时,共用I/O CLOCK,以减少A/D使用时的I/O控制端口。2.5 AT89C51 AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROMFalsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。AT89C51的管脚如图2.5-12.5-1 AT89C51的管脚图1主要特性与MCS-51 兼容4K字节可编程闪烁存储器寿命:1000写/擦循环数据保留时间:10年全静态工作:0Hz-24Hz三级程序存储器锁定128*8位内部RAM32可编程I/O线两个16位定时器/计数器5个中断源可编程串行通道低功耗的闲置和掉电模式片内振荡器和时钟电路 2.6 显示器件LM016L LM016L是双行显示的液晶显示器。在温度显示方面观察较方便,相比较于LED数码管其连接电路简单而且观察方便。3 电路设计 根据设计要求,系统整体硬件电路包括:红外信号采集部分,环境温度采集部分,复位部分,键盘输入部分,显示部分,报警部分等电路组成。3.1 复位电路设计当在AT89C51单片机的RST引脚引入高电平并保持两个机器周期时,单片机内部就执行复位操作。若该引脚一直保持高电平,单片机就处于循环复位状态。我们采用的是上电与按键均有效的电路。按健复位电路是上电手动复位,使用比较方便,在程序跑飞时,可以手动复位,这样就不用在重起单片机电源,就可以实现复位。复位电路如下图3.1-13.1-1复位电路3.2 上下限温度控制电路如图3.2-1该电路由四个点动式开关构成,分别送入单片机的P1.4、P1.5、P1.6、P1.7口。开始时P1.4、P1.5、P1.6、P1.7口的电位都处于高电位,此时显示屏显示当前温度,当按下控制P1.5的开关立即就会显示上限温度和下限温度。如果发现设置的温度上限过低,再点击控制P1.5的开关就会将温度上限所设置的温度降低,点击P1.7确定。如果觉得上限温度设置的过低,此时按下控制P1.4的开关,点击控制P1.5的开关就可将温度上限所设置的温度升高,同样点击P1.7确定。上述是对温度上限的设置。当需要设置温度下限的时候,我们同样需要点击控制P1.5的开关,在显示温度上限和下限时点击控制P1.6的开关就可调节温度下限,点击控制P1.4的开关就可以在升温降温间转换,设置好以后按确定按钮回到当前温度显示状态。 3.2-1上下限温度控制3.3 报警电路如图3.3-1发声器由P3.7口输出,当温度传感器或红外传感器所探测的温度低于或高于所设置的温度上下限,扬声器就会发出连续的报警声。图3.3-1报警电路3.4 显示电路图3.3.4-1是LM016L与单片机的连接电路图。LM016L是双行显示的液晶显示器。在温度显示方面观察较方便,相比较于LED数码管其连接电路简单而且观察方便。 图3.4-1显示电路3.5 P7187红外传感电路 如图3.5-1是红外热释传感器的工作电路图,该电路有放大和滤波功能。4 系统调试仿真仿真步骤:(1) 在PROTUES中按照设计原理及设计框架搭图。(2) 利用QTH软件惊醒程序调试,生成 XX.HEX文件。(3) 在PROTUES图中加载XX.HEX。(4) 观察现象。(5) 在电路图中调节滑动变阻器RV1改变红外放大电压大小,观察输出信号大小,使其信号不要超出ICL549的基准电压,以免烧坏A/D转换器ICL549。调试注意事项:(1) 调节RV1大小时注意使其信号不要超出ICL549的基准电压,以免烧坏A/D转换器ICL549。(2) 在不超过红外传感器温度上限和下限的情况下调试。51 5 源程序TEMP_ZH DATA 24H TEMPL DATA 25H TEMPH DATA 26H TEMP_TH DATA 27H TEMP_TL DATA 28H TEMPHC DATA 29H TEMPLC DATA 2AH k0 EQU P1.0 K1 EQU P1.4 K2 EQU P1.5 K3 EQU P1.6 K4 EQU P1.7 DATE_SDO P2.5 DATE_CS P2.6 DATE_CLK P2.7 BEEP EQU P3.7 LCD_X EQU 2FH LCD_RS EQU P2.0 LCD_RW EQU P2.1 LCD_EN EQU P2.2 flag1 equ 20H.0 KEY_UD EQU 20H.1 date_line equ p3.3 ORG 0000H JMP MAINMAIN: MOV SP,#60H MOV A,#00H MOV R0,#20H MOV R1,#10HCLEAR: MOV R0,A INC R0 DJNZ R1,CLEAR CALL SET_LCD CALL RE_18B20START: CALL RESET JNB FLAG1,START1 CALL MENU_OK CALL READ_E2 CALL TEMP_BJ JMP START2START1: CALL MENU_ERROR CALL TEMP_BJ JMP $START2: CALL RESET JNB FLAG1,START1 MOV A,#0CCH CALL WRITE MOV A,#44H CALL WRITE CALL RESET MOV A,#0CCH CALL WRITE MOV A,#0BEH CALL WRITE CALL READ call CONVTEMP Call DISPBCD CALL CONV CALL TEMP_COMP CALL PROC_KEY SJMP START2PROC_KEY:JB K1,PROC_K1 CALL BEEP_BL JNB K1,$ MOV DPTR,#M_ALAX1 MOV A,#1 CALL LCD_PRINT CALL LOOK_ALARM JB K3,$ CALL BEEP_BL JMP PROC_K2PROC_K1: JB K2,PROC_END CALL BEEP_BL JNB K2,$ MOV DPTR,#RESET_A1 MOV A,#1 CALL LCD_PRINT CALL SET_ALARM CALL RE_18B20 CALL WRITE_E2PROC_K2:CALL MENU_OK CALL TEMP_BJPROC_END:RETSET_ALARM: CALL RESET_ALARM CALL LOOK_ALARMAS0: JB K1,AS00 CALL BEEP_BL JNB K1,$ CPL 20H.1 AS00: JB 20H.1,ASZ01 JMP ASJ01 ASZ01: JB K2,ASZ02 CALL BEEP_BL INC TEMP_TH MOV A,TEMP_TH CJNE A,#120,ASZ011 MOV TEMP_TH,#0ASZ011: CALL LOOK_ALARM MOV R5,#10 CALL DELAY JMP ASZ01ASZ02: JB K3,ASZ03 CALL BEEP_BL INC TEMP_TL MOV A,TEMP_TL CJNE A,#99,ASZ021 MOV TEMP_TL,#00HASZ021: CALL LOOK_ALARM MOV R5,#10 CALL DELAY JMP ASZ02ASZ03: JB K4,AS0 CALL BEEP_BL JNB K4,$ RETASJ01: JB K2,ASJ02 CALL BEEP_BL DEC TEMP_TH MOV A,TEMP_TH CJNE A,#0FFH,ASJ011 JMP ASJ022ASJ011: CALL LOOK_ALARM MOV R5,#10 CALL DELAY JMP AS0ASJ02: JB K3,ASJ03 CALL BEEP_BL DEC TEMP_TL MOV A,TEMP_TL CJNE A,#0FFH,ASJ021 JMP ASJ022ASJ021: CALL LOOK_ALARM MOV R5,#10 CALL DELAY JMP AS0ASJ022: CPL 20H.1 JMP ASZ01ASJ03: JMP ASZ03 RETRESET_ALARM:MOV DPTR,#RESET_A1 MOV A,#1 CALL LCD_PRINT RETRESET_A1:DB RESET ALERT CODETEMP_COMP: MOV A,TEMP_TH SUBB A,TEMP_ZH JC CHULI1 MOV A,TEMP_ZH SUBB A,TEMP_TL JC CHULI2 MOV DPTR,#BJ5 CALL TEMP_BJ3 RET CHULI1: MOV DPTR,#BJ3 CALL TEMP_BJ3 CALL BEEP_BL RET CHULI2: MOV DPTR,#BJ4 CALL TEMP_BJ3 CALL BEEP_BL RETTEMP_BJ3: MOV A,#0CEH CALL WCOM MOV R1,#0 MOV R0,#2BBJJ3: MOV A,R1 MOVC A,A+DPTR CALL WDATA INC R1 DJNZ R0,BBJJ3 RETBJ3:DB HBJ4:DB LBJ5:DB !TEMP_BJ: MOV A,#0CBH CALL WCOM MOV DPTR,#BJ1 MOV R1,#0 MOV R0,#2BBJJ1: MOV A,R1 MOVC A,A+DPTR CALL WDATA INC R1 DJNZ R0,BBJJ1 RETBJ1:DB 00H,CMENU_OK: MOV DPTR,#M_OK1 MOV A,#1 CALL LCD_PRINT MOV DPTR,#M_OK2 MOV A,#2 CALL LCD_PRINT RETM_OK1: DB DS18B20 OK ,0M_OK2:DB TEMP: ,0MENU_ERROR:MOV DPTR,#M_ERROR1 MOV A,#1 CALL LCD_PRINT MOV DPTR,#M_ERROR2 MOV A,#2 CALL LCD_PRINT RETM_ERROR1: DB DS18B20 ERROR ,0M_ERROR2:DB TEMP: - ,0RESET: setb date_line nop clr date_line mov r0,#6bh mov r1,#04htsr1: djnz r0,$ mov r0,#6bh djnz r1,tsr1 setb date_line nop nop nop mov r0,#32htsr2: jnb date_line,tsr3 djnz r0,tsr2 jmp tsr4 tsr3: setb flag1 jmp tsr5tsr4: clr flag1 jmp tsr7tsr5: mov r0,#06bhtsr6: djnz r0,$ tsr7: setb date_line retRE_18B20:JB FLAG1,RE_18B20A RETRE_18B20A:CALL RESET MOV A,#0CCH LCALL WRITE MOV A,#4EH LCALL WRITE MOV A,TEMP_TH LCALL WRITE MOV A,TEMP_TL LCALL WRITE MOV A,#7FH LCALL WRITE RETWRITE_E2:CALL RESET MOV A,#0CCH LCALL WRITE MOV A,#48H LCALL WRITE RETREAD_E2:CALL RESET MOV A,#0CCH LCALL WRITE MOV A,#0B8H CALL WRITE RETSTORE_DATA:MOV A,#40H CALL WCOM MOV R2,#08H MOV DPTR,#D_DATA MOV R3,#00HS_DATA: MOV A,R3 MOVC A,A+DPTR CALL WDATA DJNZ R2,S_DATA RETD_DATA:DB 0CH,12H,12H,0CH,00H,00H,00H,00Hwrite: mov r2,#8 CLR Cwr1:clr date_line mov r3,#07 djnz r3,$ rrc a mov date_line,c mov r3,#3CH djnz r3,$ setb date_line nop djnz r2,wr1 setb date_line retread: mov r4,#4 mov r1,#TEMPL re00: mov r2,#8re01: clr cy setb date_line nop nop clr date_line nop nop nop setb date_line mov r3,#09 djnz r3,$ mov c,date_line mov r3,#3CH djnz r3,$ rrc a djnz r2,re01 mov r1,a inc r1 djnz r4,re00 retCONVTEMP: MOV A,TEMPH ANL A,#80H JZ TEMPC1 CLR C MOV A,TEMPL CPL A ADD A,#01H MOV TEMPL,A MOV A,TEMPH CPL A ADDC A,#00H MOV TEMPH,A SJMP TEMPC11TEMPC1: MOV TEMPHC,#0AHTEMPC11: MOV A,TEMPHC SWAP A MOV TEMPHC,A MOV A,TEMPL ANL A,#0FH MOV DPTR,#TEMPDOTTAB MOVC A,A+DPTR MOV TEMPLC,A MOV A,TEMPL ANL A,#0F0H SWAP A MOV TEMPL,A MOV A,TEMPH ANL A,#0FH SWAP A ORL A,TEMPL MOV TEMP_ZH,A LCALL HEX2BCD1 MOV TEMPL,A ANL A,#0F0H SWAP A ORL A,TEMPHC MOV TEMPHC,A MOV A,TEMPL ANL A,#0FH SWAP A ORL A,TEMPLC MOV TEMPLC,A MOV A,R4 JZ TEMPC12 ANL A,#0FH SWAP A MOV R4,A MOV A,TEMPHC ANL A,#0FH ORL A,R4 MOV TEMPHC,ATEMPC12: RETHEX2BCD1: MOV B,#064H DIV AB MOV R4,A MOV A,#0AH XCH A,B DIV AB SWAP A ORL A,B RETTEMPDOTTAB:DB 00H,00H,01H,01H,02H,03H,03H,04H DB 05H,05H,06H,06H,07H,08H,08H,09HLOOK_ALARM: MOV DPTR,#M_ALAX2 MOV A,#2 CALL LCD_PRINT MOV A,#0C6H CALL TEMP_BJ1 MOV A,TEMP_TH MOV LCD_X,#3 CALL SHOW_DIG2H MOV A,#0CEH CALL TEMP_BJ1 MOV A,TEMP_TL MOV LCD_X,#12 CALL SHOW_DIG2L RETM_ALAX1: DB LOOK ALERT CODE,0M_ALAX2: DB TH: TL: ,0TEMP_BJ1:CALL WCOM MOV DPTR,#
展开阅读全文