资源描述
广东工业大学华立学院本科毕业设计(论文)恒温箱单片机控制系统设计论文题目恒温箱单片机控制系统设计系 部 机械电气学部 专 业 自动化 班 级 06自动化2班 学 号 学生姓名 指导教师 年 月摘 要 温度控制是工业控制中主要的被控参数之一,特别是在冶金、化工、建材、食品、机械、石油等工业中,具有举足重轻的作用。随着电子技术和微型计算机的迅速发展,微机测量和控制技术得到了迅速的发展和广泛的应用。温度控制在工业生产中运用的非常广泛,其控制过程中存在着很大的时滞性和很强的干扰。恒温箱控制系统,其关键技术为保持箱内温度的恒定, 单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。目前,一个学习与应用单片机的高潮在全社会大规模地兴起。学习单片机的最有效方法就是理论与实践并重,本文采用AT89C52单片机和DS18B20数字温度传感器测量恒温箱的温度,并和设定温度比较。根据比较的结果,采用PID算法控制PWM信号的输出,控制加热设备的动作,从而达到稳定地控制温度的目的。关键词:恒温箱 数字温度传感器 PWM信号单片机AbstractTemperature Control is one of main Charged with parameters at Industrial Control. Especially in metallurgy, chemical, building materials, food, machinery, petroleum and other industries has held the role of foot heavy-light. As the rapid development of electronic technology and micro-computer. Micro-computer measurement and control technology has been rapid development of and wide range of applications.Temperature control is used widely in industry production,with large lag and big disturb. About the thermostat control system, its key technology is to control a constant temperature inside, SCM has a small volume, strong function, low cost, wide application scope etc. It can be said,Intelligent control and automatic control of the microcontroller core is SCM,These days,A culmination of study and application of SCM the rise of a large scale in the whole society. The most effective way to learn SCM is both theoretical and practical, this paper uses AT89C52 SCM and DS18B20 digital temperature sensor to measure the temperature of the incubator, then compared with the set temperature . According to the results of this comparison, the PID algorithm to control the output PWM signal ,then control the action heating equipment, so as to achieve stable temperature control purposes.Keywords:Incubator Digital temperature sensor PWM signalSignal chip Microcomputer目 录1 前言12 设计的基础依据与研究意义23 系统综合设计43.1 本设计将实现的要求43.2 系统方案的选择与论证43.3 系统硬件结构图54 系统各单元硬件的设计64.1 单片机主控制模块的设计64.2 温度采集模块设计74.2.1数字温控芯片DS18B20介绍74.2.2 DS18B20引脚功能、接法74.2.3 DS18B20的特性指标74.2.4 DS18B20的数字温度对照表74.3 显示模块设计84.4 独立键盘设计模块84.5 加热电路94.5.1 系统加热原理框图94.5.2 加热电路图94.6 报警电路模块设计105 PID控制算法与PWM信号115.1 PID控温原理115.2 PID算法115.3 PWM信号126系统软件设计(程序见附录3)156.1主程序流程框图156.2 子程序流程图157 指标调试197.1硬件调试197.2软件测试19小结20展望21参考文献22致谢23附录一:系统总原理图24附录二:元器件清单25附录三:系统程序清单261 前言现代工业,自动控制系统越来越朝着智能化的方向发展,其中温度的控制占有非常重要的地位。单片机系统的开发应用给现代工业测控领域带来了一次新的技术革命,自动化、智能化均离不开单片机的应用。随着传感器技术的显著的进步,其应用领域越来越广泛,对其要求越来越高,需求越来越迫切。传感器技术已成为衡量一个国家科学技术发展水平的重要标志之一。由于传感器能将各种物理量、化学量和生物量等信号转变为电信号,使得人们可以利用计算机实现自动测量、信息处理和自动控制,但是它们都不同程度地存在温漂和非线性等影响因素。传感器主要用于测量和控制系统,它的性能好坏直接影响系统的性能。恒温箱主要是用来控制温度,它为农业研究、生物技术测试提供所需要的各种环境模拟条件,因此可广泛适用于药物、纺织、食品加工等无菌试验、稳定性检查以及工业产品的原料性能、产品包装、产品寿命等测试。恒温箱供科研机关及医院作细菌培养之用;也可以作育种、发酵以及大型养殖孵化等用途。恒温箱有着广泛的用途,其关键技术为控制温度的恒定,本文用51系列单片机和数字温度传感器DS18B20来实现恒温箱的温度测量控制功能。2设计的基础依据与研究意义单片微型计算机是随着超大规模集成电路技术的发展而诞生的,由于它具有体积小、功能强、性价比高等特点,所以广泛应用于电子仪表、家用电器、节能装置、军事装置、机器人、工业控制等诸多领域,使产品小型化、智能化,既提高了产品的功能和质量,又降低了成本,简化了设计。本文主要介绍单片机在温度控制中的应用。 在现代化的工业生产中,电流、电压、温度、压力、流量、流速和开关量都是常用的主要被控参数。例如:在冶金工业、化工生产、电力工程、造纸行业、机械制造和食品加工等诸多领域中,人们都需要对各类加热炉、热处理炉、反应炉和锅炉中的温度进行检测和控制。采用MCS-51系列单片机来对温度进行控制,不仅具有控制方便、组态简单和灵活性大等优点,而且可以大幅度提高被控温度的技术指标,从而能够大大提高产品的质量和数量。因此,单片机对温度的控制问题是一个工业生产中经常会遇到的问题。在人类的生活环境中,温度扮演着极其重要的角色。温度是工业生产中常见的工艺参数之一,任何物理变化和化学反应过程都与温度密切相关,因此温度控制是生产自动化的重要任务。对于不同生产情况和工艺要求下的温度控制,所采用的加热方式,燃料,控制方案也有所不同。无论你生活在哪里,从事什么工作,无时无刻不在与温度打着交道。自18世纪工业革命以来,工业发展对是否能掌握温度有着绝对的联系。在冶金、钢铁、石化、水泥、玻璃、医药等等行业,可以说几乎80%的工业部门都不得不考虑着温度的因素。 本文所要研究的课题是恒温箱单片机控制系统的设计,介绍了对恒温箱温度的显示、控制及报警,实现了温度的实时显示及控制。箱温控制部分,提出了用DS18S20、AT89C51单片机及LED的硬件电路完成对箱温的实时检测及显示,利用DS18S20与单片机连接由软件与硬件电路配合来实现对加热电阻丝的实时控制及超出设定的上下限温度的报警系统。 恒温箱温度控制部分,采用一套PID闭环负反馈控制系统,由DS18S20检测箱内温度,用中值滤波的方法取一个值存入程序存取器内部一个单元作为最后检测信号,并在LED中显示。控制器是用AT89C51单片机,用PID算法对检测信号和设定值的差值进行调节后输出PWN脉冲信号给执行机构,去调节电热丝的加热功率,从而控制箱内温度。 它具有微型化、低功耗、高性能、抗干扰能力强、易配微处理器等优点,特别适合于构成多点温度测控系统,可直接将温度转化成串行数字信号供微机处理,而且每片DS18S20都有唯一的产品号并可存入其ROM中,以便在构成大型温度测控系统时在单线上挂接任意多个DS18S20芯片。从DS18S20读出或写入,DS18S20信息仅需要一根口线,其读写及温度变换功率来源于数据总线,该总线本身也可以向所挂接的DS18S20供电,而无需额外电源。DS18S20能提供九位温度读数,它无需任何外围硬件即可方便地构成温度检测系统。本设计应用性比较强,设计系统可以作为生物培养液温度监控系统,如果稍微改装可以做热水器温度调节系统、实验室温度监控系统等等。课题主要任务是完成环境温度检测,利用单片机实现对温度的自控调节。设计后的系统具有操作方便,控制灵活等优点。3 系统综合设计3.1本设计将实现的要求(1)利用单片机AT89C2051实现对温度的控制,实现保持恒温箱温度范围:常温110。(2)可预置恒温箱温度,温度控制误差小于1。(3)预置时显示设定温度,恒温时显示实时温度,采用PID控制算法显示精确到0.1。(4)温度超出预置温度5时发出声音报警。(5)人机对话部分由键盘、显示和报警三部分组成,实现对温度的显示、报警。3.2 系统方案的选择与论证方案一: 按键控制设定恒温箱温度,热电偶对温度进行采样,采样温度经AD转换与设定温度进行对比,当采样温度小于设定温度时启动加热电路,温差的数字量经DA转换控制加热电路以不同功率进行加热,当采样温度大于设定温度时,关闭加热电路。用LED数码管显示采样温度与设定温度。方案二:通过按键设定温度,按键功能分别实现温度加一和温度减一,再设按键3 用于切换数码管显示采样温度T与设定的温度S。用数字传感器DS18B20对温度进行采样,由单片机对比采样温度与设定温度进行比较:当S-T10时,驱动加热设备以最高功率输出;当S-T10时,采用PID算法控制单片机输出PWM信号,控制加热设备以适合的功率进行加热。由4位共阳LED数码管对温度进行显示。由于热敏电阻的可靠性差,测量温度准确率低,而且必须经过专门的接口电路转换数字信号后才能由单片机处理。本设计中我们选用了美国达拉斯(Dallas)公司的单线数字温度传感器芯片DS18B20作为温度传感器,与传统的热敏电阻不同,DS18B20可直接将温度转换为串行数字信号,供单片机处理,它具有微型化、低功耗、抗干扰能力强等优点,且DS18B20采用单总线技术,信息经过单线接口送入DS18B20或送出,从微处理器到DS18B20仅需连接一条信号线和地线。所以本设计采用DS18B20温度传感器进行温度采集。方案二中,采用PID算法控制输出PWM信号,使加热设备以不同的功率进行加热,当温度达到我们要设定的温度时,加热电路以小功率进行加热,此时加热量平衡于消耗的热量,从而到达保温的效果。综上所述,方案二比方案一更具优越性,控制系统更加稳定、精确。所以本次设计我们将启用方案二进行综合设计。3.3系统硬件结构框图单片机 按键电路数字温度传感器电源LED数码管显示报警电路加热电路 图3.1 系统硬件结构框图4 系统各单元硬件的设计由总体硬件结构框图,本设计主要由以下几部分功能模块组成:温度采集电路,键盘控制电路,蜂鸣器报警电路,数码管显示电路和加热电路等部分。主要是通过对数字温度传感器对温度进行采集后,与键盘电路输入的温度值进行比较,通过程序控制输出PWM信号,控制加热设备进行加热,由数码管显示电路进行温度显示,如果发生异常的时候发出警报。4.1单片机主控制模块的设计的设计图4.1 单片机控制模块电路本次设计采用宏晶科技公司生产的STC89C52单片机作为主控芯片,配以RC上电及开关复位电路和12MHZ震荡电路,使系统稳定运行。P0口作为数码管显示模块数据传输总线,P1.4作为温度采集模块数据线,P2.0作为PWM信号输出口控制加热电路,P2.3控制蜂鸣器报警电路,对系统的控制通过分别接在P1.0P1.2的独立键盘实现。每个单片机系统里都有晶振,全称是叫晶体震荡器,在单片机系统里晶振的作用非常大,他结合单片机内部的电路,产生单片机所必须的时钟频率,单片机的一切指令的执行都是建立在这个基础上的,晶振的提供的时钟频率越高,那单片机的运行速度也就越快。4.2 温度采集模块设计4.2.1 数字温控芯片DS18B20介绍(图4.2)模拟温度信号容易受到干扰而产生测量误差,影响测量精度。因此,在本设计的温度测量系统中,采用抗干扰能力强的新型数字温度传感器DS18B20,它具有体积更小、精度更高、适用电压更宽、采用一线总线等优点,在实际应用中取得了良好的测温效果。 4.2.2 DS18B20引脚功能、接法 DS18B20只有3个引脚,分别是电源端,接地端和一 个数字信号输入/输出端。4.2.3 DS18B20的特性指标电源要求 35V温度精度 0.5温度范围 -55125测温速率 750ms 图4.2 DS18B20引脚接法4.2.4 DS18B20的数字温度对照表 DS18B20采用2个字节的温度数据存储部分,低字节的低4位为小数部分,高字节的低4位与低字节的高4位组成温度的整数部分,高字节的高4位为符号位,实现采样温度精度为0.0625。如25.5对应的二进制量位0000 0001 1001 1000 ;35.125对应的二进制量位为0000 0010 0011 0010。表4-1 DS18B20的数字温度对照表TemperatureDigital output(Binary)Digital output(Hex)+1250000 0111 1101 000007D0h+850000 0101 0101 00000550h+25.06250000 0001 1001 00010191h+10.1250000 0000 1010 0010 00A2h+0.50000 0000 0000 10000008h00000 0000 0000 00000000h-0.51111 1111 1111 1000FFF8h-10.1251111 1111 0101 1110FF5Eh-25.06251111 1110 0110 1111FE6Fh-551111 1100 1001 0000FC90h4.3 显示模块设计 图4.3 显示模块电路如图4.3为本设计的显示电路,采用的是4位共阳数码管,单片机对采集温度信号进行处理后,通过4位共阳数码管,由单片机P0口输出段选信号,P2.4P2.7输出位选信号,通过程序控制单片机管脚输出,对温度进行显示。4.4 独立键盘设计模块(图4.4)图4.4 独立键盘电路该电路除了复位按键之外,还设有3个独立按键,分别是:温度上调键,温度下调键和切换显示键。实现功能如下:温度上调键:设定温度加1;温度下调键:设定温度减1;切换显示键:对传感器采样温度与设定温度进行切换。4.5 加热电路4.5.1 系统加热原理框图图4.5 系统加热原理框图上图为系统的加热原理框图,由单片机P2.0口控制PWM输出,通过驱动二极管控制晶闸管的导通角,控制电热丝加热,这段时间DS18B20不断地采集温度,反馈到单片机控制P2.0口的输出。所以,这是一个闭环控制系统。4.5.2加热电路图 图4.6 加热电路图220V交流电经过单相电桥整流电路,在单向可控硅SCR的A、B端加以正向电压,当单片机输出口P2.0输出低电平时,光耦PC817的发光二极管发光,二极管导通,SCR的触发极G有电流通过,此时,AB端电流导通,电热丝发热;当单向电桥电压过零时,SCR的AB端不导通。所以,只要控制P2.0口输出PWM信号的占空比就可以控制可控硅的导通角,就可以控制电热丝两端的平均电压。当单片机输出的PWM信号正好平衡于电阻丝加热消耗的热量,系统达到动态平衡。可控硅导通角的控制原理:A端为阳极,B端为阴极,G为触发极。当AB端的电压大于可控硅最低导通电压,且G极有触发电流通过时,AB 端导通,否则不导通。4.6 报警电路模块设计图4.7 蜂鸣器报警电路由于蜂鸣器的电流较大,一般在100mA左右,需要三极管驱动,本设计蜂鸣接p2.3,采用的是有源的直流蜂鸣器,内部集成了振荡器,使用时只需给I/O口一个低电平即可发声。在本设计中,当保温过程中,温差大于5时,通过蜂鸣器进行报警,以防止设备出现故障导致意外。5 PID控制算法与PWM信号5.1 PID控温原理 通过输入通道将温度传感器DS18B20采集到的恒温箱的当前温度转变为数字量并输入到单片机中,单片机求出当前的温度值与设定值的偏差,并根据该偏差进行PID运算,最后根据PID运算的结果控制单片机输出PWM信号,经过光电隔离和二极管启动盘驱动控制晶闸管整流电路,控制恒温箱加热。加热过程分为两个阶段,单片机对设定温度S与采样温度T进行比较:当S-T10时,驱动加热设备以最高功率输出,在这个过程中,不断测温,直到S-T10 ?输出最大值输出最大有效脉冲采用PID算法输出相应PWM计算e(n)=设定温度-采集温度开始 结束 图6.2 PWM输出PID算法控制子程序set_pwm():PWM输出PID算法控制子程序。通过比较,判断是否采用PID算法控制程序输出值,由输出值通过定时器控制PWM的占空比。开始 初始化mode=1延时2msKey按下?Mode=1Mode +Mode= =3?Key按下?按键松开?延时2msK1按下?设定温度+1Mode= =2?K1按下?按键松开?结束延时2msK2按下?设定温度-1Mode= =2?K2按下?按键松开?结束 图6.3 按键设定温度子程序流程图switch (mode) :按键功能子程序。Key为显示切换按键,当mode=1时为实时温度显示模式,当mode=2时为设定温度模式,K1、K2分别为设定温度加1、减1按键。初始化时,模式mode的值为1。开始初始化DS18B20发起Skip Rom 命令应答脉冲发起Convent T 命令读取第1、2字节即 温度数据发起Read Scratchpad命令初始化DS18B20延时1S,等待温度转换完成答应脉冲开始调用e(k),e(k-1),e(k-2)U=A*e(k)+B*e(k-1)+C*e(k-2)e(k-2)= e(k-1)e(k-1)= e(k)e(k)=下一个采集到的温度U(k-1)= U(k)U(k)=U(k-1)+U结束计算e(k)图6.4 DS18B20温度读取子程序流程图 图6.5 PID算法程序流程图(说明1:Skip Rom 为跳过DS18B20 ROM检测命令,Convent T为温度转换命令,Read Scratchpad 为读取DS18B20暂存器字节命令。说明2:PID算法流程图 结合12页 第5.3节进行编写) (程序见附录3)。7 指标调试7.1硬件调试硬件调试是利用基本测试仪器(万用表、示波器等),检查硬件中存在的故障。硬件调试可分为静态调试与动态调试两步进行。静态调试是在系统未工作时的一种硬件检测。第一步:目测。检查外部的各种元件或者是电路是否有断点。第二步:用万用表测试。先用万用表复核目测中有疑问的连接点,再检测各种电源线与地线之间是否有短路现象。第三步:加电检测。给板加电,检测所有插座或是器件的电源端是否符合要求的值。动态调试是在系统工作的情况下发现和排除用户系统硬件中存在的器件内部故障、器件连接逻辑错误等的一种硬件检查。动态调试的一般方法是由近及远、由分到合。由分到合是指首先按逻辑功能将用户系统硬件电路分为若干块,当调试电路时,与该元件无关的器件全部从用户系统中去掉,这样可以将故障范围限定在某个局部的电路上。当各块电路无故障后,将各电路逐块加入系统中,在对各块电路功能及各电路间可能存在的相互联系进行调试。由分到合的调试报告完成。由近及远是将信号流经的各器件按照距离单片机的逻辑距离进行由近及远的分层,然后分层调试。调试时,仍采用去掉无关元件的方法,逐层调试下去,就会定位故障元件了。7.2软件测试软件调试是通过对程序的编写、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除纠正的过程。本次设计软件的调试可以说是相当的波折的,例如算术的加减还要考虑变化量的定义类型,占几个字节;加减的过程中有无借位问题等,否则都有可能会导致无法达到演示效果。有时候一条语句的错误往往要花上好长一段时间的程序调试过程,但每次调试成功后都能得到收获,获得进步。小结本作品设计主要是基于STC89C52单片机实现对恒温箱的温度等进行检测和控制,并实现恒温箱对设定温度的恒定。主要由主控器51系列单片机STC89C51、数字温度传感器DS18B20、LED数码管显示模块、蜂鸣电路、独立按键和复位电路和加热电路等部分构成。此次在软件上是花费时间最多的,首先面临的第一个问题是选择实现那些功能和如何实现;第二个问题是程序相对比较复杂,整个程序调试比较复杂,通过这次设计,得到了一次用专业知识、专业技能分析和解决问题全面系统的锻炼。使我们在单片机的基本原理、单片机应用系统开发过程,以及在常用编程设计思路技巧(特别是C语言)的掌握方面都能向前迈了一大步。展望随着社会的发展,工业温度控制系统对恒温精度与稳定度的要求越来越高,智能型温控设备受到人们的重视,通讯的网络化、智能化、集成化、标准化是当代温控系统的发展趋势。本设计中的温度控制系统如果加上串口通信,采用RS232标准有线通讯协议方式,与计算机进行通信,采用先进的现场总线技术、无线数传技术、红外遥控、遥测技术等,这可大大提高系统对新环境的适应能力,提高其兼容性。另外为提高温控系统的信息管理、可靠性管理和经济管理水平,在一定条件下,本温控系统还应扩大其内存容量,对温度采样的实时趋势或历史趋势进行显示,对故障发生的具体时间及原因进行显示,对重要历史数据进行详细记录并可查询,为温度调度、系统规划等提供重要依据。本设计应用性比较强,稍微改装可以作为加热电炉温度控制系统,生物培养液温度监控系统、热水器温度调节系统、实验室温度监控系统等等。参考文献1叶庆银等,小型恒温箱恒温性能的理论及实验研究,制冷与空调,2007年04期2焦峰超,基于51单片机的小型温度测量系统,宿州学院学报,2008年02期 3杜运东等,基于单片机的电热恒温箱控制系统,信息技术与信息化,2008年04期4冯伟,基于51单片机的时间温度显示系统,现代显示,2008 年12期5王金喜等,恒温箱在热电偶温度测量中的应用与研制,电力学报,2008年05期6张敏等,小型制冷恒温箱的研制及试验研究,制冷与空调,2006年06期7马志兵,基于51单片机的简易晶体管输出特性图示仪原理与设计,电子元器件应用,2006年05期8黄正贵,校准恒温箱温度偏差和测量结果的不确定度分析,计量与测试技术,2006年09期9乐建波著,温度控制系统,化学工业出版社,2007年出版 10Junior High,How to Express the Temperature,Reading and Compositi-on,2009年04期11胡燕瑜,Intelligent temperature control system of quench furnace 中国有色金属学会会刊(英文版), 2004年04期12William Elkins,Personal temperature control system, Sep 8, 198713Roselle Gibbs,Portable temperature control system,Feb 16, 1999致谢经过几个月的努力,毕业设计基本完成了。在毕业设计的实践中,虽然过程中遇到的困难很多,但我从中学到了很多有用的知识,也积累了宝贵的经验。首先要向我的指导老师 邵翠平老师 致以最诚挚的谢意。邵老师学识渊博、治学严谨、认真负责、平易近人,在专业和精神上都给予了我莫大的支持和帮助。同时,我要感谢系里领导、老师的关心和大力支持,正是由于他们的传道、授业,让我学到了专业知识,并从他们身上学到了如何求知治学、如何为人处事。我也要感谢我的母校广东工业大学华立学院,对我四年来的教育和关心,是她提供了良好的学习和生活环境,让我的大学生活丰富多姿,使我明确了以后的方向,树立了良好的价值观,在这里学到的一切都使我终身受益。另外,衷心感谢四年来的同窗好友,是你们的鼎力相助使我最终完成了设计,是你们的关心使我充满信心地走到最后,在此献上我真诚的谢意。再次衷心感谢所有关心和帮助过我的老师和同学,谢谢你们! 附录一:系统总原理图 (绘图软件:protel99)附录二:元器件清单器件名称型号数量(个)数字传感器DS18B2015V电源1光电隔离器PC8171电热丝1按键6脚按键4电阻、电容、导线若干单向可控硅MCR100-81四位共阳LED数码管1三极管85505个发光二极管若干蜂鸣器1个24M晶振1个附录三:系统程序清单/DS18B20的读写程序,数据脚P1.4 /温度传感器DS18B20汇编程序,采用器件默认的12位转化 /最大转化时间750微秒,显示温度从-55度到+125度 /显示精度为0.1度,显示采用4位LED共阳显示测温值 /P0口为段码输入,P2.4P2.7为位选 /*/#include reg51.h#include intrins.h /_nop_();延时函数用#define Disdata P0 /段码输出口#define discan P2 /扫描口#define uchar unsigned char#define uint unsigned intsbit DQ=P14; /温度输入口sbit DIN=P07; /LED小数点控制uint h; uint temp;/DS18B20采集到的实时温度uchar mode=1;char code_ge;/温度设定值uchar ut2=0,0;/ PID算法,误差调节量uchar st3=10,10,10;/PID算法,前3次的误差存放uchar code_data3=0,0,0;/PID算法,前3次采集到的温度存放uchar zliang;PID算法,增量uchar data_tp;/温度传递的中间变量uchar pltime2=0,0 xff;/占空比的初始化。即是th1的初值sbit out=P20;/ 调制脉冲输出控制uchar PWM;/占空比的调节变量sbit k1 =P10 ; /增加键sbit k2 =P11 ; /减少键sbit key=P12; /模式选择键/*温度小数部分用查表法*/uchar code ditab16=0 x00,0 x01,0 x01,0 x02,0 x03,0 x03,0 x04,0 x04,0 x05,0 x06,0 x06,0 x07,0 x08,0 x08,0 x09,0 x09;/Uchar code dis_713=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90,0 xff,0 xbf,0 xf7;/共阳LED段码表0 1 2 3 4 5 6 7 8 9 不亮 - uchar code scan_con4=0 x7f,0 xbf,0 xdf,0 xef; /列扫描控制字uchar data temp_data2=0 x00,0 x00; /读出温度暂放uchar data display5=0 x00,0 x00,0 x00,0 x00,0 x00; /显示单元数据,共4个数据和一个运算暂uchar data dip_code5=0 x00,0 x00,0 x00,0 x00,0 x00;uchar data dip_code5=0 x00,0 x00,0 x00,0 x00,0 x00;/void delayms(unsigned char ms)/延时程序 unsigned char i ; while(ms-) for(i = 0 ; i 120 ; i+) ; void timer0() interrupt 1 /定时器0控制周期,为1ms TR1=0 ; TH0=0 xfc ; TL0=0 x18 ; /65536-FC18H=1000 TH1=PWM ; TR1=1 ; /256-200=56高电平 out=0 ; /启动输出void timer1() interrupt 3 TR1=0 ; out=1 ; /结束输出void delay2ms()/ 延时子程序unsigned char i,ms=2;while(ms-)for(i = 0; i 0;t-);/*显示实时温度*/scan()char k;for(k=0;k0;i-)DQ=1;_nop_();_nop_(); /从高拉倒低DQ=0;_nop_();_nop_();_nop_();_nop_(); /5 usDQ=val&0 x01; /最低位移出delay(6); /66 usval=val/2; /右移1位DQ=1;delay(1);/*DS18B20读1字节函数*/从总线上取1个字节uchar read_byte(void)uchar i;uchar value=0;for(i=8;i0;i-)DQ=1;_nop_();_nop_();value=1;DQ=0;_nop_();_nop_();_nop_();_nop_(); /4 usDQ=1;_nop_();_nop_();_nop_();_nop_(); /4 usif(DQ)value|=0 x80;delay(6); /66 usDQ=1;return(value);/*读出温度函数*/read_temp()ow_reset(); /总线复位delay(200);write_byte(0 xcc); /发命令write_byte(0 x44); /发转换命令ow_reset(); delay(1);write_byte(0 xcc); /发命令write_byte(0 xbe);temp_data0=read_byte(); /读温度值的第字节temp_data1=read_byte(); /读温度值的高字节temp=temp_data1; temp6348) / 温度值正负判断tem=65536-tem;n=1; / 负温度求补码,标志位置1display4=tem&0 x0f; / 取小数部分的值display0=ditabdisplay4; / 存入小数部分显示值display4=tem4; / 取中间八位,即整数部分的值display3=display4/100; / 取百位数据暂存display1=display4%100; / 取后两位数据暂存display2=display1
展开阅读全文