1、目录引言- 2 -第一章 系统设计任务及要求- 3 -1.1系统设计任务- 3 -1.2系统设计的基本要求- 3 -第二章 系统总体设计- 4 -2.1系统设计方案论证- 4 -2.1.1电源选择- 4 -2.1.2环境参数采集- 4 -2.1.3 控制模块选择- 4 -2.1.4执行动作模块- 4 -2.2整体设计方案的确定- 5 -第三章 硬件电路设计及工作原理- 6 -3.1参数采集模块设计- 6 -3.2执行动作模块设计与MOC3081的简介- 9 -3.3 用户自行控制温度和显示温度模块介绍- 11 -3.3.1 当前温度显示部分介绍- 11 -3.3.2 按键控制调节上下限报警限温
2、度说明- 12 -3.4具体硬件电路原理分析- 12 -3.4.1 单片机模块- 12 -3.4.2 按键模块- 13 -3.4.3 后级驱动模块- 13 -第四章 软件设计- 15 -4.1主程序流程图- 15 -4.2 DS18B20温度传感器初始化- 16 -4.2.1读出温度子程序- 17 -4.2.2 DS18B20的写读时序- 17 -第五章 电路调试及各主要技术指标的测量- 19 -5.1 测试仪器- 19 -5.2测试检验- 19 -5.2.1测量方法- 19 -5.2.2单片机对采集数据的转换运算- 19 -5.2.3时间误差分析- 19 -5.3 硬件整体测试- 19 -5
3、.3.1 电路问题分析- 19 -5.3.2 DS18B20的防水处理- 20 -5.3.3 参数校准- 20 -5.3.4 功能实现分析- 20 -第六章 结论- 21 -使用仪器设备及元件清单- 22 -结束语- 23 -参考文献- 24 -附录- 25 -附录A 电路仿真图- 25 -附录B:的电路板- 25 -附录C:硬件总共原理图- 26 -附录D:程序清单- 26 -摘 要 本设计是基于DS18B20的温度控制系统,以STC89C51为控制系统核心,通过单片机系统设计实现对温度的显示和控制功能。本温度控制系统是一个闭环反馈调节系统,由温度传感器对外界温度进行检测,经过调理电路得到合
4、适的电压信号。经A/D转换芯片得到相应的温度值,将所得的温度值与设定温度值相比较得到偏差。通过对偏差信号的处理获得控制信号,去调节,从而实现对温度的显示和控制。本文主要介绍了温度控制系统的工作原理和设计方法,主要由三部分构成: 系统整体方案设计。 硬件设计,主要包括温度检测电路、显示电路、键盘设计和控制电路、报警电路。 系统软件设计,软件的设计采用模块化设计,主要包括显示模块、键盘模块和控制模块等。关键词:单片机;温度传感器;温度检测,DS18B20一、 引言温度控制系统广泛应用于社会生活的各个领域 ,如家电、汽车、材料、电力电子等 ,常用的控制电路根据应用场合和所要求的性能指标有所不同 ,
5、在工业企业中,如何提高温度控制对象的运行性能一直以来都是控制人员和现场技术人员努力解决的问题。这类控制对象惯性大,滞后现象严重,存在很多不确定的因素,难以建立精确的数学模型,从而导致控制系统性能不佳,甚至出现控制不稳定、失控现象。传统的继电器调温电路简单实用 ,但由于继电器动作频繁 ,可能会因触点不良而影响正常工作。控制领域还大量采用传统的PID控制方式,但PID控制对象的模型难以建立,并且当扰动因素不明确时,参数调整不便仍是普遍存在的问题。而采用数字温度传感器DS18B20,因其内部集成了A/D转换器,使得电路结构更加简单,而且减少了温度测量转换时的精度损失,使得测量温度更加精确。数字温度传
6、感器DS18B20只用一个引脚即可与单片机进行通信,大大减少了接线的麻烦,使得单片机更加具有扩展性。由于DS18B20芯片的小型化,更加可以通过单跳数据线就可以和主电路连接,故可以把数字温度传感器DS18B20做成探头,探入到狭小的地方,增加了实用性。更能串接多个数字温度传感器DS18B20进行范围的温度检测。二、 系统设计任务及要求1.1这些标号自己改下,下同。系统设计任务 设计一个基于DS18B20的温度控制系统,配合硬件实现温度实时采集和自动调控温度,显示当前温度等功能,实现单片机的闭环控制系统。该系统能在温度高于或低于设置的温度值时自动开启风扇或加热器驱动DS18B20使其温度在规定的
7、值内。1.2系统设计的基本要求 1. 实现单片机闭环控制系统:系统内部能够自动的调节。2. 自动启动空调或加热器功能:当DS18B20的温度高于设定的的最高温度时,系统能够自动的驱动风扇散热;当DS18B20的温度低于设定的最低温度时,系统能够自动的驱动加热管加热。3. 设置温度范围控制功能:系统在设计过程能实现上下限温度的按键设置。4. 温度显示:在整个系统中可以直观的显示当前的温度和用户设定的上下限温度。三、 系统总体设计2.1系统设计方案论证 2.1.1电源选择由于电源的设计比较复杂,且时间有限,所以在电源选择上我们就直接选择现成的电源,这样能节省下来很多的时间。2.1.2环境参数采集
8、DS18B20作为温度传感检测元件,它不仅测温范围宽(-55125),而且最大分辨达0.0625,同时与单片机相连采用3线制,可直接读出被测温度值。减少了外部的硬件电路,具有低成本和易使用的特点。2.1.3 控制模块选择STC89C51系列单片机是从引脚到内核都是完全兼容标准8051单片机,其中51/52/53/型号后缀为RC,表明片内集成了512字节的RAM。本设计对数据的处理速度以及存储空间的要求不高,一般的内置的闪存都能满足,而STC89C51芯片存储空间更大能够在线擦写程序的优点,在运用和软件调试时更方便,且自带的下载版上的数码管和按键也能对当前的温度分别进行显示和控制,因此选用此作为
9、控制模块。2.1.4执行动作模块 方案一:选用光电耦合器,双向可控硅和功率电阻组成可以与单片机端口和市电连接大功率工作的设备,以供风扇与加热器的正常工作。此电路可控制大功率设备,但是在制作和调试的过程中要注意安全。方案二:选用小功率演示器件,用不同颜色的发光二极管或小功率风扇来代替风扇和加热器,能直观的反应单片机控制哪路电路的工作,这样不仅表达出来的效果比较好,而且在调试和使用的时候比较的安全,并且在单片机下载版数码管上显示当前的温度范围。该设计方案虽然安全,但该设计不能在现实生活中实现自动控制。从上面两个方案比较,要想实现该系统的自动控制选择方案一比较好。2.2整体设计方案的确定综合考虑,本
10、设计采用基于STC89C51单片机与DS18B20温度传感器、加热制冷部分构成机箱监控系统硬件设计,其整体框架图如下图1-1图1就好了,下面的就按顺序。外接温度采集模块STC 89C51 单片机 高低温报警温度设置按键控制系统数码管显示温度温度是否过高温度是否过低开启风扇,并且低温报警闪烁开启加热器,并且高温报警闪烁 图1-1 系统整图与图注太不协调了,请参考教材的图与图注体框图四、 硬件电路设计及工作原理3.1参数采集模块设计 4.1.1温度传感器DS18B20芯片介绍与运用DS18B20是美国DALLAS公司生产的数字温度传感器芯片,具有结构简单、体积小、功耗小、抗干扰能力强、使用方便等优
11、点。可以在三根线上同时并联多个温度传感器,每台分机上可以连接多根电缆,每根电缆上可以并联几十个点,构成串行总线工作方式。由于18B20芯片送出的温度信号是数字信号,因此简化了A/D转换的设计,提高了测量效率和精度;并且芯片的ROM中存有其唯一标识码,即不存在相同标识码的DS18B20,特别适合与微处理芯片构成多点温度测控系统。1. DS18B20的性能特点:(1) 适用电压范围:3.05.5V; (2) 2测温范围:-55+125,精度为0.5;(3) 3无须外部器件,独特的单线接口仅需要一个端口引脚进行通信; (4) 4多个DS18B20可以并联在唯一的三线上,实现多点组网功能;(5) 5零
12、待机功耗;(6) 6用户可定义的EEPROM,设定的报警温度存在非易失存储器中;(7) 7报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;(8) 8可编程的分辨率为912位,对应的可分辨温度分别为0.5、0.25、0.125和0.0625;(9) 9负压特性:电源改一下极性接反时,温度计不会因发热而烧毁,但不能正常工作。 所有的图请居中,图注也居中。图2-1 DS18B20引脚分布图引脚定义: 1DQ为数字信号输入/输出端; 2GND为电源地; 3VDD为外接供电电源输入端(在寄生电源接线方式时接地)。 此部分用表格来说明2. DS18B20的测温原理DS18B20的测温原理如图
13、2-5所示。用一个高温度系数的振荡器确定一个门周期,内部计数器在这个门周期内对一个低温度系数的振荡器的脉冲进行计数来得到温度值。计数器被预置到对应于55的一个值。如果计数器在门周期结束前到达0,则温度寄存器的值增加,表明温度大于55。同时,计数器被复位到一个值,这个值由斜坡式累加器电路确定,斜坡式累加器电路用来补偿感温振荡器的抛物线特性。然后计数器又开始计数直到0,如果门周期未结束,将重复这一过程。斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直到温度寄存器达到被测温度值。图2-2 DS18B20测温原理图应该注意的是:由于DS
14、18B20单线通信功能是时分完成的,它严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作必须按协议进行。操作协议为:初始化DS18B20(发复位脉冲)发ROM功能命令发存储器操作命令处理数据。根据DS18B20的通讯协议,主机控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。复位要求主CPU将数据线下拉500us,然后释放,DS18B20收到信号后等待1660us左右,后发出60240us的低脉冲,主CPU收到此信号表示复位成功。当温度转换命令发布
15、后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第0和第1个字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式以0.0625/LSB形式表示。对应的温度计算:当符号位S=0时,表示测得的温度值为正值,可直接将二进制位转换为十进制;当S=1时,表示测得的温度值为负值,要先将补码变为原码,再计算十进制值。例如+125的数字输出为07D0H,+25.0625的数字输出为0191H,-25.0625的数字输出为FF6FH,-55的数字输出为FC90H。DS18B20温度值格式表温度/二进制表示十六进制表示+1250000 0111 1101 000007D0H+850
16、000 0101 0101 00000550H+25.06250000 0001 1001 00010191H+10.1250000 0000 1010 001000A2H+0.50000 0000 0000 10000008H要有表注,请参照教材00000 0000 0000 00000000H-0.51111 1111 1111 1000FFF8H-10.1251111 1111 0101 1110FF5EH-25.06251111 1110 0110 1111FE6FH-551111 1100 1001 0000FC90H3. DS18B20与单片机的接口电路DS18B20可以采用电源供
17、电方式(如图2-4),此时DS18B20的1脚接地,2脚作为信号线,3脚接+5V电源。图2-4 DS18B20采用电源供电方式当DS18B20处于写存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉开启时间最大为10us。采用寄生电源供电方式时VDD端接地。由于单线制只有一根线,因此发送接口必须是三态的。3.2执行动作模块设计与MOC3081的简介当传感器把数据传送给单片机后,单片机把信号发送给执行动作模块,让其做出相应的开启关闭空调或加热器的动作,这个模块部分接的是220V的电压,所以还必须用到光电双向可控硅(moc3081)对电路进行保护隔离。其电路图如下: STC89C51 单
18、片机1 62 MOC3081 53 41 62 MOC3081 53 4风扇加热管220V220V5V 图2-5 执行动作模块结构框图 (一) MOC3081的外形和内部结构 (图2-6,图2-7) 分点的格式请参照上面的DS18B20的 图2-6 MOC3081外形图 图2-7 MOC3081内部结构图(二)MOC3081的性能特点:1适用最大电压范围:800V,耐压高,安全可靠; 2工作温度范围:-40+100;36引脚交叉光隔离器TRIAC驱动输出电压峰 ;4. 输入端正向电流最大值为50mA;反向电压为6V5. 输出端正向电流最大值为1.2A,耐压800V;6. 过零点触发请参照上文光
19、耦以光信号为媒介来实现电信号的耦合与传递,输入与输出在电气上完全隔离,具有抗干扰性能强的特点。对于既包括弱电控制部分,又包括强电控制部分的工业应用测控系统,采用光耦隔离可以很好地实现弱电和强电的隔离,达到抗干扰目的。3.3 用户自行控制温度和显示温度模块介绍 3.3.1 当前温度显示部分介绍下图是基于DS18B20温度控制系统显示部分的的设计框图,该图能清楚明了了让我们知道该系统硬件的基本连接方法。下面不能空这么大的空白,如果图实在放不下就要把后面的文字先放在这里P2.7 p2.6 p2.5 p2.4 P2.3 P2.2STC89C51P3.0 P3.1 P3.2 P3.3数码管上限温度下限温
20、度DALLAS公司生产的数字温度传感器芯片,具有结构简单、体积小、功耗小、抗干扰能力强、使用方便等优点。可以在三根线上同时并联多个温度传感器,每台分机上可以连接多根电缆,每根电缆上可以并联几十个点,构成串行总线工作方式。由于18B20芯片送出的温度信号是数字信号,因此简化了A/D转换的设计,提高了测量效率和精度;并且芯片的ROM中存有其唯一标识码,即不存在相同标识码的DS18B20,特别适合与微处理芯片构成多点温度测控系统。温度当前温度+按键:P3.0进入上下限温度设置按键:加减上下限温度 图2-8数码管显示温度示意框图3.3.2 按键控制调节上下限报警限温度说明 图2-8中的P3.0到P3.
21、3时对上下限报警温度调节端口,其中P3.0是设置是否进入上下限温度调节端口;P3.1端口是控制调节上限报警温度还是调节下限报警温度;P3.2和P3.3分别是加减控制端口。3.4具体硬件电路原理分析3.4.1 单片机模块后面不能空这么多图2-9 说明:该该部分硬件是单片机模块,用来处理C语言程序,并控制后级的驱动电路和数码的显示部分3.4.2 按键模块图2-10说明:该硬件电路是按键的部分,主要是用来调整系统内部已经定好的上下限温度报警的值。3.4.3 后级驱动模块说明:该电路是后级驱动电路,该电路通过单片机的控制来达到DS18B20在设定的温度范围内工作。当温度高于上限报警温度,单片机给P1.
22、2低电平,驱动风扇工作;当温度低于下限报警温度,单片机给P1.3低电平,驱动加热棒工作。五、 软件设计4.1主程序流程图DS18B20是可编程器件,在是使用时必须经过以下三个步骤:初始化、写操作、读操作。每一次读写操作之前都要先将DS18B20初始化复位,复位成功后才能对DS18B20进行预定的操作,三个步骤缺一不可。在编写相应的应用程序时,必须先掌握DS18B20的通信协议和时序控制要求。由于DS18B20是利用一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。该协议由几种单线上信号类别型组成:复位脉冲,存在脉冲
23、,写0,写1,读0和读1。主程序流程图如图2-11所示:图2-11主程序流程图4.2 DS18B20温度传感器初始化主机总线 to 时刻应先向DS18B20送出(TX)发送一复位脉冲(最短为 480us 的低电平信号即由主机将数据线拉低并保持480us960us) ,接着在 tl 时刻释放总线并进入接收状态(RX),DSl820 在检测到总线的上升沿之后等待 1560us,接着 DS1820 在 t2 时刻发出存在脉冲(低电平,持续 60240 us) 如图2-12中虚线所示。60240us1560ust1t0t2t3t4480960us480us 图2-12 DS18B20初始化DQ状态时序
24、图 图2-13如图2-13为DS18B20的初始化子程序流所示为其初始化流程图4.2.1读出温度子程序读出温度子程序的主要功能读出RAM中的9个字节移入温度暂存器,启动温度转换。由于温度测量只有一只DS18B20,因此我们在读出温度时并不进行CRC校验。其程序流程图如图2-14所示。 图2-14读温度子程序4.2.2 DS18B20的写读时序图2-15 读写时隙时序图写时序:对于DS18B20的写时序仍然分为写0时序和写1时序两个过程。当主机总线 t o 时刻从高拉至低电平时,就产生写时间隙,从 to 时刻开始 15us 之内应将所需写的位送到总线上 。DSl820 在 t o后1560us间
25、对总线采样。若低电平 写入的位是 0;若高电平 写入的位是 1。连续写 2 位间的间隙应大于 1us。DS18B20写出子程序流程图如图4-10所示。读时序:主机总线t0时刻从高拉至低电平时,总线只需保持低电平1us,之后在t1时刻将总线拉高,产生读时间隙,读时间隙在t1时刻后t2时刻前有效。t2距t0为15us,也就是说,t2时刻前主机必须完成读位,并在 DS18B20读出子程序流程图如图2-17所示。图2-16DS18B20写入子程序流程图 图2-17 DS18B20读出子程序流程图六、 电路调试及各主要技术指标的测量 5.1 测试仪器 万用表;电源(+220V);电脑;红色,绿色彩灯;冷
26、水,热水(3040)各一杯;秒表;5.2测试检验这部分内容要结合具体的图来说明。5.2.1测量方法 首先我们在基本大气下,测得系统所在的环境的温度,并计入下来。接着我们把DS18B20放入热水里面,看看后级驱动电路会不会驱动风扇使温度传感器散热。当温度传感器恢复到室温时,我们在吧温度传感器放入冷水中,看看温度传感器会不会驱动加热管使温度传感器加热。5.2.2单片机对采集数据的转换运算温度数据转换? DS18B20温度传感器采集到的温度是以16位二进制数字的形式送到单片机上的。在处理中我们先通过运算将二进制转化成十进制数。然后通过除法和求余将每一位的数字求出存在数组中按分位显示出来。5.2.3时
27、间误差分析由于在单片机传输电流信号到MOC3081属于传输数字量,要考虑光耦的响应速度问题。光电耦合器的传输特性,即传输速度,往往成为系统最大数据传输速率的决定因素。对于光电耦合器的延迟时间通常都在10us,这里的传输的特性优良,以便系统及时感应并且做出反应。5.3 硬件整体测试5.3.1 电路问题分析1. 调试硬件电路时。用万用表测试所有芯片的电源和地是否确实接电源和接地了,测试各个芯片是否处于正常的工作电压,并测试电路是否有短路、断路、虚焊,有无接错线,同时要特别注意过孔是否连接正确。2. 硬件电路通电时,注意用手背触摸下芯片是否发烫,防止芯片被烧坏掉。3. 调试硬件电路,烧写程序看各项功
28、能是否正常实现,分析未实现未实现原因。4. 调试之行动作电路。给参数采集电路一个高温或低温值看是否开启关闭空调或加热器。5. 在调试硬件电路时,注意各部分电路之间的时序配合关系。6. 在调式过程中,应分功能模块调试好了以后再整合成整体调试。7. 在调试整机电路时,在排除故障中,检测不出故障,可就对各个芯片进行独立检测。5.3.2 DS18B20的防水处理由于传感器最后要测量的是海水温度。因此我们用单股电线外接并用热熔胶密封DS18B20温度传感器各管脚,这样处理在一定程度上降低了传感器的灵敏度但能够保证传感器长时间置放在水当中并能够正常工作。5.3.3 参数校准 在温度采集的校准上,我们只需要
29、一个准确的电子温度计通过该温度计和我们的模块在测量室温情况下的比较来调整软件实现准确测温。 5.3.4 功能实现分析该硬件电路在最后测试中实现了准确的温度采集、能够传给单片机发送采集到得参数,同时实现加热或制冷功能。基本实现了设计任务,并可根据外界运用需要更换和外扩其他功能传感器。七、 结论本着方便、实用性、易于扩展的指导思想,此次的设计采用STC89C51为中央处理器加上各种外围电路构成了整个单片机控制系统。在设计中运用温度传感器采集温度,通过转换、处理与设定值进行比较,得到控制信号用以控制温度,实现了温度显示和控制功能。本次设计的具体步骤如下:1、 系统整体设计,根据设计要求,选择合理可行
30、的设计总体方案,实现系统功能。2、 元件选择,根据需求分析选择电子元器件,以达到设计的目的。3、 硬件设计,用Protel软件画好电路原理图,生成PCB板图,制作成电路板。4、 软件设计,画好程序流程图,设计主程序和子程序。5、 焊接电路板,把电子元件焊接到做好的电路板上,对电路进行检查。6、 在仿真器上对系统进行软、硬件调试,修改错误或改进缺陷,找出硬件错误。7、 对整个系统进行联合调试,使系统达到本次设计的设计要求。整个设计从系统测试的结果来看,本设计基本上达到了系统设计的主要目标。从功能测试来看,该系统实现了系统设计的基本要求。使用仪器设备及元件清单这部分请放在附录中主要元器件清单见附表
31、1所示。元器件名称类型数量温度传感器DS18B201单片机STC89C511晶闸管97A62功率电阻33R2光耦MOC30812共阳数码管2发光二极管普通若干风扇普通1加热管普通1电阻普通若干三极管9012若干电源插座1八、 结束语在工业生产和日常生活中,对温度控制系统的要求,主要是保证温度在一定温度范围内变化,稳定性好,不振荡,对系统的快速性要求不高。在论文中简单分析了单片机温度控制系统设计过程及实现方法。本系统的测温范围为2580,温度检测系统根据用户设定的温度范围完成一定范围的温度控制。由于时间的原因在设计过程中不能很好的做出我们毕业设计所要达到的要求,对于以上的不足,我们只有通过以后的
32、努力不断的提升。在设计中我们基本实现了温度的读取和最高低报警温度的调节,在后级电路中由于个人能力有限,而不能实现后级驱动电路,在这方面我相信在以后的学习生涯中能得到解决,最后我要感谢我的导师杨俊鸣老师,在他的帮助下我们做好了基于DS18B20温度控制系统的毕业设计,同时我也要感谢那些在我遇到难题时候给予我帮助的同学和好友,祝你们身体健康。九、 参考文献 1 电源网.MOC3081芯片运用介绍, 2 伟纳电子. DS18B20单线数字温度传感器, 3 电源技术这是什么?书的话就要有完整的信息4 李华.MCS-51系列单片机实用接口技术M.北京:北京航空航天大学出版社,1993,8,203-228
33、.5新概念51单片机C语言教程:入门、提高、开发、拓展全攻略: 北京:电子工业出版社,2009.1附录附录A 电路仿真图说明:数码管左边一二是最高报警温度,三四位是最低报警温度,五六七八位是当前温度值。附录B:的电路板说明:上图中的80是最高报警温度,25是最低报警温度,12.9是现在的标准室温。附录C:硬件总共原理图附录D:程序清单#include#include #define uchar unsigned char#define uint unsigned intsbit ds=P17; /温度传感器信号线sbit hi_led=P10; /高温报警指示灯sbit lo_led=P11;
34、 /低温报警指示灯sbit gao_fs=P12; /控制驱动风扇sbit di_jrg=P13; /控制驱动加热管sbit tz_key=P30; /进入按键设置温度按键sbit kz_key=P31; /控制高低温加减设置按键sbit jia_key=P32; /加温度按键sbit jian_key=P33; /减温度按键uint num=0,num1=0;/*共阳数码管段选值*/unsigned char code dispcode= 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff; / 0xff 灭 /温度小数点对照表uch
35、ar code df_table=0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9;uchar currentT=0; /当前温度的整数部分char alarm_temp_hl2=80,25; /温度的控制幅度uchar temp_value=0x00,0x00; /DS18B20读取的温度值低8位高8位uchar display_digit8=0,0,0,0,0,0,0,0;/待显示的温度的每个位bit hi_alarm=0,lo_alarm=0; /高低温报警标志位bit DS18B20_is_ok=1; /传感器正常标志位/-/ 延时函数/-void delay(uint
36、num)while( -num );/-/初始化DS18B20/-uchar dsreset() uchar status; ds=1;delay(8); ds=0;delay(90); ds=1;delay(8); status=ds; delay(100);ds=1;return status;/-/读一字节/-uchar readonebyte()uchar i,dat=0;ds=1;_nop_();for(i=0;i=1;ds=1;_nop_();_nop_();if(ds)dat|=0x80;delay(30);ds=1;return dat;/-/写一字节/-void writeo
37、nebyte(uchar dat)uchar i;for(i=0;i=1;/-/读取温度值/-void read_temperature()if(dsreset()=1) /DS18B20故障DS18B20_is_ok=0;Elsewriteonebyte(0xcc);writeonebyte(0x44);dsreset(); writeonebyte(0xcc); writeonebyte(0xbe); temp_value0=readonebyte(); /温度低8位 temp_value1=readonebyte(); /温度高8位 DS18B20_is_ok=1; /-/设置DS18B
38、20温度报警值/-void set_alarm_temp_value() dsreset(); writeonebyte(0xcc); /跳过系列号 writeonebyte(0x4e); /将设定的温度报警值写入DS18B20 writeonebyte(alarm_temp_hl0); /写TH writeonebyte(alarm_temp_hl1); /写TL writeonebyte(0x7f); /12位精度 dsreset(); writeonebyte(0xcc);/跳过系列号 writeonebyte(0x48); /温度报警值存入DS18B20/-/数码管显示温度/-void
39、 display_temperature()uchar i;uchar t=150;/查表得到小数部分display_digit0=df_tabletemp_value0&0x0f; /获取正温度 currentT=(temp_value0&0xf0)4)|(temp_value1&0x07)=alarm_temp_hl0?1:0; lo_alarm=currentT=alarm_temp_hl1?1:0;/整数部分分离display_digit7=alarm_temp_hl0/10;display_digit6=alarm_temp_hl0%10;display_digit5=alarm_t
40、emp_hl1/10;display_digit4=alarm_temp_hl1%10;display_digit2=currentT/10;display_digit1=currentT%10; P0=0X9c; P2=0x01; delay(t); P2=0x00;/显示。 P0=dispcodedisplay_digit0;/小数位 P2=0x02; delay(t); P2=0x00; P0=(dispcodedisplay_digit1)&0x7f;/各位和小数点 P2=0x04; delay(t); P2=0x00; P0=dispcodedisplay_digit2;/十位 P2=0x08; delay(t); P2=0x00; P0=dispco