【www.scfx8.com--专业技术个人总结】

课程设计(论文) 题 目 名 称 智能恒温箱的设计 课 程 名 称 单片机原理及应用 学 生 姓 名 学 号 系 、专 业 信息工程系、电子科学与技术 指 导 教 师 2013年X月X日 摘要 温度控制系统广泛应用于社会生活的各个领域 ,如家电、汽车、材料、电力电子等 ,常用的控制电路根据应用场合和所要求的性能指标有所不同 ,在工业企业中,如何提高温度控制对象的运行性能一直以来都是控制人员和现场技术人员努力解决的问题,开发出性能较好的温度控制系统对于测控技术的发展具有很大的意义。

采用数字温度传感器DS18B20,因其内部集成了A/D转换器,使得电路结构更加简单,而且减少了温度测量转换时的精度损失,使得测量温度更加精确。数字温度传感器DS18B20只用一个引脚即可与单片机进行通信,大大减少了接线的麻烦,使得单片机更加具有扩展性。由于DS18B20芯片的小型化,更加可以通过单跳数据线就可以和主电路连接,故可以把数字温度传感器DS18B20做成探头,探入到狭小的地方,增加了实用性。更能串接多个数字温度传感器DS18B20进行多范围的温度检测。

由于单片机功能强大,可大大加快系统的开发与调试速度,并具有控制方便、简单、灵活等特点,因此本设计硬件电路以80C51单片机为核心来实现温度控制,具有实用性强、可靠性强等特点。

关键字:单片机;

数字;

恒温 目录 1 绪论 1 1.1 课题研究的背景 1 1.2 课题研究的意义 2 1.3 课题研究的内容 2 2 智能恒温箱的系统概述 3 2.1 系统的主要功能 3 2.2 系统需求分析 4 2.3 智能恒温箱的工作流程 4 2.4 恒温箱的工作过程 6 2.5 本章小结 6 3 智能恒温箱的硬件设计 6 3.1 硬件电路设计概述 6 3.2 总体硬件原理图 7 3.3 时钟频率电路设计 9 3.4 复位电路设计 9 3.5 显示电路的设计 10 3.5.1 显示电路概述 10 3.5.2 七段LED数码管的原理 10 3.5.3 显示电路整体设计 12 3.6 开关键盘设计 13 3.6.1 指拨开关 13 3.6.2 按键开关 14 3.7 指示灯电路 15 3.8 温度采集电路 15 3.9 本章小结 20 4 软件设计 20 4.1 软件任务分析 20 4.2 程序流程图 21 4.3 本章小结 25 5 参考文献 25 6 附录A 相关图 27 仿真图 27 硬件原理图 28 7 附录B 一篇引用文献 29 8051 29 8 附录C 主要参考文献题录及摘要 32 9 附录D 主要源程序 34 1 绪论 1.1 课题研究的背景 二十一世纪是科技高速发展的信息时代,电子技术、微型单片机技术的应用更是空前广泛,是随着超大规模集成电路技术的发展而诞生的。由于它具有体积小、功能强、性价比高等特点,所以广泛应用于电子仪表、家用电器、节能装置、军事装置、机器人、工业控制等诸多领域,使产品小型化。智能化,既提高了产品的功能和质量,又降低了成本,简化了设计。它迅猛的发展到了各个领域,人们也越来越感到应用单片机技术的优越性,因而单片机也得到了广泛的应用。同时,它也不断地完善和发展。

智能恒温箱的温度是医疗、工业生产和食品加工等领域的关键,因此对温度的测量及控制始终占据着重要的地位。市场上常见的温度传感器以电压输出为主要形式,不同的的传感器其非线性曲线也各不相同,缺乏一个产品应具备的通用性和互换性。温度传感器应用范围很广、使用数量很大,但是在常规的环境参数中由于温度受其它因素影响较大,而且难以校准,因此,温度也是最难准确测量的一个参数。常规方法测量温度误差大、准确度低、测量滞后的时间长。

今年来,国内传感器正向着集成化、智能化、网络化和单片机的方向发展,为开发新一代温度测量系统创造了有利条件。

在智能恒温箱控制系统的设计中,用数字传感器将温度信号以数字信号的方式传送给单片机,经单片机处理后的温度数值,一方面送LED数码管显示;

另一方面与给定值经行比较,判断温度高低,从而采取相应的措施:加热或者制冷。使温度达到设定值。

智能恒温箱主要是用来控制温度,他为农业研究、生物技术、测试提供所需的各种环境模拟条件,因此可广泛适用于药物、纺织、食品加工等无菌试验、稳定性检查以及工业产品的原料性能、产品包装、产品寿命等测试。

随着单片机技术的飞速发展,通过单片机对被控制对象控制日益广泛,具有体积小、功能强、性价比高等特点,把单片机应用于温度控制系统中可以起到更好的控温作用,智能恒温箱是使用单片机进行温度控制的典型应用,采用单片机做主控单元可完成对温度的采集和控制等的要求。

1.2 课题研究的意义 智能恒温箱的性能在很大程度上取决于对温度的控制性能,本课题采用单片机为主控制器,通过数字传感器测得箱内温度,再将温度信号送入主控制器,来完成恒温箱的温度控制系统的硬件。箱内温度可保持在设定的温度范围内,当设置的温度低于实时温度时,单片机送出加热信号;

当设置的温度低于实时温度时,单片机送出制冷信号。

1.3 课题研究的内容 本次课题只设计温度采集,温度显示,和温度控制信号的送出部分,对于如何保温,如何加热和制冷不在此次设计的范围内。本系统采用模块化设计智能恒温箱,系统上电后默认设定的恒温温度为20℃,使用时可以自行调节预期的恒温温度,调节范围为0~99℃。调节好后系统会将采集来的实时温度与设定的预期温度进行比较,如果实时温度比设定温度高就开启制冷设备,如果实时温度比预期温度低就开启加热设备。如果温度一样则不开启加热或制冷设备。在显示电路上通常显示的是实时的温度,即传感器采集来的温度,如果想要显示人们设定的预期温度可以按显示切换键,这时显示器上就会显示预期温度,几秒钟后跳回,显示实时温度。显示实时温度时,表示显示的是实时温度的发光二极管点亮。而显示预期温度的时候,表示显示的是预期温度的发光二极管点亮。

本论文章节的结构和内容如下:

第一章 :绪论。简要介绍了智能恒温箱的发展现状,说明了课题研究的内容。

第二章 :智能恒温箱的概述。说明了恒温箱的工作过程和主要功能,介绍了设计中需要用的单片机的基础知识,确定了本课题要达到的设计目标。

第三章 :智能恒温箱的硬件电路设计。详细描述了本课题各个组成电路单元的设计。

第四章 :智能恒温箱的软件设计。编写程序。

第五章 :。总结本次设计,指出设计中的一些问题,提出改善意见,并展望未来的设计。

2 智能恒温箱的系统概述 2.1 系统的主要功能 本系统是借用单片机采用模块化设计的智能恒温箱,包括温度设定按钮,温度显示,温度调节,实时温度显示和预定温度显示转换按钮,温度采集等(根据需要也可另设或者多设相关功能)。显示系统除了显示实时的温度还能显示设定的温度,也就是人们想要保持的温度。

系统的主要功能模块方框图如图2.1所示。

时钟 复位电路 2位七段数码管显示 80C51单片机 进入温度设 定,温度加、减按键输入电路 2个发光二极管显示 温度调节电路 温度采集电路 显示切换按键电路 图2.1 系统主要功能模块方框图 本系统是采用模块化设计的智能恒温箱,在生活中有广泛的应用,系统上电后默认设定的恒温温度为20℃,使用时可以自行调节预期的恒温温度,调节范围为0~99℃。调节好后系统会将采集来的实时温度与设定的预期温度进行比较,如果实时温度比设定温度高就开启制冷设备,如果实时温度比预期温度低就开启加热设备。如果温度一样则不开启加热或制冷设备。在显示电路上通常显示的是实时的温度,即传感器采集来的温度,如果想要显示人们设定的预期温度可以按显示切换键,这是显示器上就会显示预期温度,几秒钟后跳回,显示实时温度。显示实时温度时,表示显示的是实时温度的发光二极管点亮。而显示预期温度的时候,表示显示的是预期温度的发光二极管点亮。

单片机整个恒温箱的核心,内部电路设计用汇编语言编写。它完成了温度参数设定,温度采集计算,温度显示,温度比较,温度调节等功能。

2.2 系统需求分析 1. 在使用中可以将采集来的温度数据计算转换为我们熟悉的摄氏温度。

2. 在0~99℃的范围内,人们可以自由调节预期达到的温度。

3. 可以将实时温度与预期温度进行比对,以正常调节温度。

4. 将设定的预期温度和实时温度能显示出来。

5. 通常显示实时温度,当按下显示切换键后能显示几秒钟的预期温度。

2.3 智能恒温箱的工作流程 智能恒温箱的基本工作原理:在使用恒温箱时,系统会将从温度传感器采集来的温度转化为摄氏度的形式,与事先设定的预期温度进行比对,然后根据比对的结果采取相应的措施(加热,或制冷)来不断地接近以至于达到预期的温度。并且系统能够显示实时的温度和设定的预期温度。恒温箱的工作流程如图2.2所示:

加载程序 运行 进入温度设定 不进行温度设定 温度减 温度加 温度采集与计算 温度比较并进行温度调节 显示实时温度 无显示切换 显示切换 显示设定温度 图2.2 恒温箱工作流程 2.4 恒温箱的工作过程 1. 设定预期温度。如果想调节预期的温度,先闭合“温度设定”开关,进入调节状态,此时会显示设定的温度值,如果想加一摄氏度就按下“加1℃”键,如果想减一摄氏度就按一下“减1℃”键,温度LED显示器上会显示改变后的温度,调整范围为0~99℃。0℃时再减1℃会跳到99℃,99℃时再加1℃会跳到0℃。要退出调节状态,断开“温度设定”开关即可。

2. 温度采集和计算。单片机通过与温度传感器进行通信,获取实时温度信息,并将所获取的温度信息数据转化为摄氏温度的形式存储起来。

3. 温度比较和温度调节。将存储的实时摄氏温度与设定的预期温度经行比较。如果实时温度高于设定温度,则开启制冷器;

如果实时温度低于设定温度,则开启加热器。

4. 实时温度显示。将存储的实时温度显示在LED数码管上。

5. 设定温度显示。若想查看设定的预期温度,则需按下“温度显示切换”按键,然后LED显示器就会显示设定预期的温度,显示时间为数秒,跳出预期温度的显示。若再想查看预期温度显示需再次按下“温度显示切换”按键。

总而言之,本课题利用80C51单片机及外围接口实现的温度控制系统设计了恒温箱,该恒温箱提高了系统的可靠性,简化了电路结构,节约了成本,是一个实用的工程设计。

2.5 本章小结 本章主要讲述了恒温箱的工作原理和本设计系统的工作流程。在说明工作原理的过程中,突出了电路的组成单元以及这些单元如何实现温度采集和温度控制等功能。在说明系统流程时,结合本设计的内容,指出了参数设置的方法和意义。

3 智能恒温箱的硬件设计 3.1 硬件电路设计概述 本设计分为硬件设计和软件设计,这两者相互结合,不可分离:从时间上看,硬件设计的绝大部分工作量是在最初阶段,到后期往往还要做一些修改。只要技术准备充分,硬件设计的大量返工是比较少的,软件设计的任务是贯彻始终的,到中后期基本上都是软件设计任务,随着集成电路计数器的飞速发展,各种功能很强的芯片不断出现,使硬件电路的集成度越来越高,硬件设计的工作量在整个项目中所占的比重逐渐下降,为使硬件电路设计尽可能合理,应注意以下几个方面:

1. 尽可能采用功能强的芯片,以简化电路。功能强的芯片可以代替若干个普通芯片,随着生产工艺的提高,新型芯片的价格在不断下降,并不一定比若干个普通芯片价格总和高。

2. 留有设计余地。在设计硬件电路时,要考虑到将来修改扩展的方便。因为很少有一锤定音的电路设计,如果现在不留余地,将来可能要为一点小小的修改或扩展而被迫进行全面返工。

3. 程序空间。选用片内程序空间足够大的单片机,本设计采用80C51单片机。

4. RAM空间,80C51单片机内部RAM不多,当要增强软件数据处理功能时,往往觉得不足。如果系统配置了外部RAM,则建议多留一些空间。如果选用8155作I/O接口,就可以增强256字节RAM。如果有大批数据需要处理,则应配置足够的RAM,如6264、62256等。随着软件设计水平提高,往往只要改变或者增加软件中的数据处理算法,就可以使系统功能提高很多,而系统的硬件不必做任何更换就使系统升级换代。只要在硬件电路设计初期考虑到这一点,就应该为系统将来升级留有足够的RAM空间,哪怕多设计一个RAM插座,暂时不插芯片也好。

I/O端口,在样机研制出来后进行现场试用时,往往会发现一些被忽视的问题,而这些问题不是靠单纯的软件措施来解决的。如果有些新的信号需要采集,就必须增加输入检测端:有些物理量需要控制,就必须增加输出端。如果在硬件电路设计就预留出一些I/O端口,虽然当时空着没用,那么要用的时候就能派上用场了。

3.2 总体硬件原理图 总体硬件原理图如图3.1所示,图中主要部分U1芯片为80C51单片机,U2为温度传感器DS18B20。温度传感器接到单片机的P1.2口。两个发光二极管“HEAT”和“COOL”分别表示传送给加热器和制冷器的启动信号,分别接到单片机的P1.0,P1.1口。如果“HEAT”灯点亮表示加热器在工作;

如果“COOL”灯点亮表示制冷器在工作。按键“温度显示切换”是用于切换显示预设的温度的按键,接单片机的P2.7口。还有两个发光二极管分别是“实时温度”和“设定温度”,表示当前数码管显示的是实时温度还是设定温度,若“实时温度”的发光二极管点亮表示数码管显示的实时温度,若“设定温度”的发光二极管点亮则表示数码管当前显示的是设定温度。两个数码管分别接单片机的P2.6,P2.5口。图中有两个七段共阴数码管,它的字段码信号端口接到单片机的P0.0~P0.6口,公共端接单片机的P2.0和P2.1口。开关“温度设定”接单片机的P2.2口,按钮“加1℃”和“减1℃”分别接单片机的P2.3和P2.4口。按闭合“温度设定”开关进入预期温度的设定,按“加1℃”,“减1℃”按钮来加减温度。

图3.1 总体硬件原理图 3.3 时钟频率电路设计 单片机必须在时钟的驱动下才能工作,在单片机内部有一个时钟振荡电路,只需要外接一个振荡源就能产生一定周期的时钟信号送到单片机内部的各个单元,决定单片的工作频率,时钟电路如图3.2 所示。

图3.2 外部振荡电路 一般选用石英晶体振荡器。此电路大约延迟10ms后振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率主要有石英晶体的频率确定。电路中两个电容C1、C2的作用有两个:一是帮助振荡器起振;

二是对振荡器的频率进行微调。C1、C2的典型值为30pF。

单片机工作时,由内部振荡器产生或由外直接输入的送至内部控制逻辑单元的时钟信号的周期称为时钟周期,其大小是时钟信号频率的倒数,时钟信号频率常用fosc表示。图中时钟频率为12MHz,即fosc=12MHz,则时钟周期为1/12μs。

3.4 复位电路设计 单片机的第9脚RST为硬件复位电路,只要在该端加上持续4个机器周期的高电平即可实现复位,复位后单片机的各个状态都恢复到初始化状态,其电路图如图3.3所示。

图3-3中由按键以及电容C1、电阻R1、R2构成上电复位及手动电路。由于单片机是高电平复位,所以上电复位时,接通电源即可,当上电后,由于电容C1开始缓缓充电,则图中电路由5V电源到电容到电阻R1和地之间形成一个通路,由于在R1上产生电压降,则单片机的RST脚上为高电平,经过一段时间后电容的电充满,此时C1处可视为断路,单片机RST脚处电压逐渐降为0V,即处于稳定的低电平状态,此时单片机完成上电复位,程序从0000H开始执行。手动复位时,按一下图中的按钮即可,当按键按下的时候,单片机的9脚RST管脚处于高电平,此时单片机处于复位状态。

值得注意的是,在设计当中使用到了硬件复位电路和软件复位两种功能,由上面所述的硬件复位之后的各状态可知,寄存器的值都恢复到了初始值,而前面的功能介绍中提到了倒计时时间的记忆功能,该功能实现的前提条件就是不能对单片机进行硬件复位,所以设定了软件复位功能。软件复位实际上就是当程序执行完毕之后,将程序指针通过一条跳转指令让它跳转到程序执行的起始地址。

图3.3 硬件复位电路 3.5 显示电路的设计 3.5.1 显示电路概述 示功能与硬件关系极大,在这里我们使用的是七段数码管显示,通常在显示上我们采用的方法一般包括两种:一种是静态显示,一种是动态扫描。其中静态显示的特点是显示稳定不闪烁,程序编写简单,但占用端口资源多;

动态扫描的特点是显示稳定程度没有静态显示好,程序编写复杂,但是相对静态显示而言最大的优点是占用端口资源少。由于本设计需要较多的端口用于其它的功能因此采用占用端口少的动态扫描显示的办法。以下将对显示电路的各个部件及整体设计做详细的介绍。

3.5.2 七段LED数码管的原理 LED数码管显示器由8个发光二极管中的7个长条发光二极管(称七笔段)按a、b、c、d、e、f、g顺序组成“8”字形,另一个点形的发光二极管放在右下方,用来显示小数点。数码管按内部连接方式又分为共阳极数码管和共阴极数码管两种。若内部8个发光二极管的阳极连在一起接电源正极,就成为共阳极数码管;

若8个发光二极管的阴极连在一起接地,测称为共阴极数码管。

本次设计所用的到的共阴极数码管的引脚如图3.4所示,外部有10个引脚,其中1和6引脚连通,作为公共端接地。

图3.4 一位共阴极数码管引脚图 从LED数码的结构可以看出,不同笔段的组合就何以构成不同的字符,例如笔段b、c被点亮时,就可以显示数字1:当笔段a、b、c被点亮时,就可以显示数字7;

只要控制7个发光二极管按一定要求亮与灭,就能显示出十六进制字符0~F。将控制数码管显示字符的各字段代码称为显示代码或字段码。

数码管显示码是表述二进制数与数码管所显示字符的对应关系的,如表3.1所示。对于共阴极数码管,由于8个发光二极管的阴极已连在一起接地,所以,只要控制各字段的正极,就可以控制发光二极管的亮与灭。

表3-1 七段显示译码器的真值表及段码表 字 符 h g f e d c b a 字段码 0 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 共阳字码段C0H 共阴字码段3FH 1 1 1 1 1 1 0 0 1 0 0 0 0 0 1 1 0 共阳字码段F9H 共阴字码段06H 2 1 0 1 0 0 1 0 0 0 1 0 1 1 0 1 1 共阳字码段A4H 共阴字码段5BH 3 1 0 1 1 0 0 0 0 0 1 0 0 1 1 1 1 共阳字码段B0H 共阴字码段4FH 4 1 0 0 1 1 0 0 1 0 1 1 0 0 1 1 0 共阳字码段99H 共阴字码段66H 5 1 0 0 1 0 0 1 0 0 1 1 0 1 1 0 1 共阳字码段92H 共阴字码段6DH 6 1 0 0 0 0 0 1 0 0 1 1 1 1 1 0 1 共阳字码段82H 共阴字码段7DH 7 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 共阳字码段F8H 共阴字码段07H 8 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 共阳字码段80H 共阴字码段7FH 9 1 0 0 1 0 0 0 0 0 1 1 0 1 1 1 1 共阳字码段90H 共阴字码段6FH A 1 0 0 0 1 0 0 0 0 1 1 1 0 1 1 1 共阳字码段88H 共阴字码段77H B 1 0 0 0 0 0 1 1 0 1 1 1 1 1 0 0 共阳字码段83H 共阴字码段7CH C 1 1 0 0 0 1 1 0 0 0 1 1 1 0 0 1 共阳字码段C6H 共阴字码段39H D 1 0 1 0 0 0 0 1 0 1 0 1 1 1 1 1 共阳字码段A1H 共阴字码段5EH E 1 0 0 0 0 1 1 0 0 1 1 1 1 0 0 1 共阳字码段86H 共阴字码段79H F 1 0 0 0 1 1 1 0 0 1 1 1 0 0 0 1 共阳字码段8EH 共阴字码段71H 3.5.3 显示电路整体设计 显示电路如图3.5 所示, 图中RP1为电阻盒,相当于8个独立的电阻的一端接在一起并接电源,另外一端分别接出引线,在显示电路中作为上拉电阻。图中有2个七段LED数码管,它们的公共端1、2分别接到单片机的P2.0、P2.1口,单片机的这2个I/O口输出位选信号用于动态扫描。而所谓动态扫描就是指我们采用分时的方法,轮流控制各个LED数码管的公共端,使各个显示器轮流点亮。在轮流点亮扫描过程中,每位数码管的点亮时间是极为短暂的(约1ms),但由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。而单片机的P0.0~P0.6口则负责将字段码数据传送给LED数码管。

图3.5 显示电路 3.6 开关键盘设计 3.6.1 指拨开关 指拨开关面板上通常会标有“ON”或其他记号,若将开关拨到“ON”的一边,则接点接通(on),拨到另一边则为断开(off)。若要以开关作为输入电路,通常会接一个电阻到Vcc或GND,做上拉电阻或下拉电阻,如图3.6所示有两种开关电路可供选择。

a) b) 图3.6 开关电路 本设计的温度设定允许和退出按键是选用如图3.6中a)所示的设计,低电平为进入温度设定,高电平为退出温度设定。

3.6.2 按键开关 按键开关为机械弹性开关,当按下键帽时,按键内的复位弹簧片被压缩,动片触电与静片触电相连,键盘的两个引脚被接通;

松手后,复位弹簧将动片弹开,使动片与静片脱离接触,键盘的两个引脚被断开。由于机械接触点的弹性作用,一个按键从开始接上至接触稳定要经过5~10ms的抖动时间,在此期间,有抖动发生。按键抖动波形如图3.7所示。

图3.7按键抖动电压波形 按键开关输入需要解决的两个主要问题是判断是否有按键按下和消除按键抖动的影响。按键的确认反映在电压上,就是和按键相连的引脚呈现出高电平还是低电平。消除按键的抖动通常有硬件、软件两种消除方法。一般在按键较多时,采用软件的方法消除抖动,即在第一次检测到有按键按下时,执行一段延时12~15ms的子程序后,再确认该键电平是否任保持为闭合状态电平,如果保持为闭合状态电平就可以确认真有按键按下,从而消除抖动的影响。

一般电子装置中都设计有按键输入,用以控制程序执行时数据的输入或是特殊功能的设置及操作。在控制电路中,如果按键数不多是可以使用一个按键对应一条输入位线控制,即独立式按键。这种接法,一根输入线上的按键是否被按下,不会影响其他输入线上的工作状态。因此,通过检测输入线的电平状态就可以很容易判断哪个键按下了。独立式按键可以用单稳态锁存器消除抖动。

如果监控程序中的读键操作安排在主程序(后台程序)或键盘中断(外部中断)子程序中,则该延时子程序便可直接插入读键过程中。如果读键过程安排在定时中断子程序中,就可省去专门的延时子程序,利用两次定时中断的时间间隔来完成抖动处理。

3.7 指示灯电路 在实时温度和设定温度切换时,为了明白LED数码管显示的是哪种温度,可以用两个发光二极管来指示,如果标有“实时温度”标记的发光二极管点亮,则表示数码管显示的是实时温度,如果标有“设定温度”标记的发光二极管点亮,则表示数码管显示的是设定温度。这样就不至于混淆了。如图3.9所示为温度指示灯电路。

图3.9 温度指示灯电路 图中两个发光二极管分别与单片机的P2.6,P2.5口相连,单片机把显示何种温度的信号送给这两个口,对应的发光二极管就会点亮,信号为低电平有效。

3.8 温度采集电路 温度采集电路如图3.10所示, 图中U2为温度采集电路的核心部件,温度传感器DS18B20,下面将详细介绍它的参数和用法。

DS18B20内部的低温度系数振荡器是一个振荡频率随温度变化很小的振荡器,为计数器1提供一频率稳定的计数脉冲。

高温度系数振荡器是一个振荡频率对温度很敏感的振荡器,为计数器2提供一个频率随温度变化的计数脉冲。

图3.10 温度采集电路 初始时,温度寄存器被预置成-55℃,每当计数器1从预置数开始减计数到0时,温度寄存器中寄存的温度值就增加1℃,这个过程重复进行,直到计数器2计数到0时便停止。

初始时,计数器1预置的是与-55℃相对应的一个预置值。以后计数器1每一个循环的预置数都由斜率累加器提供。为了补偿振荡器温度特性的非线性性,斜率累加器提供的预置数也随温度相应变化。计数器1的预置数也就是在给定温度处使温度寄存器寄存值增加1℃计数器所需要的计数个数。

DS18B20内部的比较器以四舍五入的量化方式确定温度寄存器的最低有效位。在计数器2停止计数后,比较器将计数器1中的计数剩余值转换为温度值后与0.25℃进行比较,若低于0.25℃,温度寄存器的最低位就置0;

若高于0.25℃,最低位就置1;

若高于0.75℃时,温度寄存器的最低位就进位然后置0。这样,经过比较后所得的温度寄存器的值就是最终读取的温度值了,其最后位代表0.5℃,四舍五入最大量化误差为±1/2LSB,即0.25℃。

温度寄存器中的温度值以9位数据格式表示,最高位为符号位,其余8位以二进制补码形式表示温度值。测温结束时,这9位数据转存到暂存存储器的前两个字节中,符号位占用第一字节,8位温度数据占据第二字节。

DS18B20测量温度时使用特有的温度测量技术。DS18B20内部的低温度系数振荡器能产生稳定的频率信号;

同样的,高温度系数振荡器则将被测温度转换成频率信号。当计数门打开时,DS18B20进行计数,计数门开通时间由高温度系数振荡器决定。芯片内部还有斜率累加器,可对频率的非线性度加以补偿。测量结果存入温度寄存器中。一般情况下的温度值应该为9位,但因符号位扩展成高8位,所以最后以16位补码形式读出。

DS18B20工作过程一般遵循以下协议:初始化——ROM操作命令——存储器操作命令——处理数据 ① 初始化 单总线上的所有处理均从初始化序列开始。初始化序列包括总线主机发出一复位脉冲,接着由从属器件送出存在脉冲。存在脉冲让总线控制器知道DS1820 在总线上且已准备好操作。

② ROM操作命令 一旦总线主机检测到从属器件的存在,它便可以发出器件ROM操作命令之一。所有ROM操作命令均为8位长。这些命令列表如下:

Read ROM(读ROM)[33H] 此命令允许总线主机读DS18B20的8位产品系列编码,唯一的48位序列号,以及8位的CRC。此命令只能在总线上仅有一个DS18B20的情况下可以使用。如果总线上存在多于一个的从属器件,那么当所有从片企图同时发送时将发生数据冲突的现象(漏极开路会产生线与的结果)。

Match ROM( 符合ROM)[55H] 此命令后继以64位的ROM数据序列,允许总线主机对多点总线上特定的DS18B20寻址。只有与64位ROM序列严格相符的DS18B20才能对后继的存贮器操作命令作出响应。所有与64位ROM序列不符的从片将等待复位脉冲。此命令在总线上有单个或多个器件的情况下均可使用。

Skip ROM( 跳过ROM )[CCH] 在单点总线系统中,此命令通过允许总线主机不提供64位ROM编码而访问存储器操作来节省时间。如果在总线上存在多于一个的从属器件而且在Skip ROM命令之后发出读命令,那么由于多个从片同时发送数据,会在总线上发生数据冲突(漏极开路下拉会产生线与的效果)。

Search ROM( 搜索ROM)[F0H] 当系统开始工作时,总线主机可能不知道单线总线上的器件个数或者不知道其64位ROM编码。搜索ROM命令允许总线控制器用排除法识别总线上的所有从机的64位编码。

(Alarm Search告警搜索)[ECH] 此命令的流程与搜索ROM命令相同。但是,仅在最近一次温度测量出现告警的情况下,DS18B20才对此命令作出响应。告警的条件定义为温度高于TH 或低于TL。只要DS18B20一上电,告警条件就保持在设置状态,直到另一次温度测量显示出非告警值或者改变TH或TL的设置,使得测量值再一次位于允许的范围之内。贮存在EEPROM内的触发器值用于告警。

③ 存储器操作命令 Write Scratchpad(写暂存存储器)[4EH] 这个命令向DS18B20的暂存器中写入数据,开始位置在地址2。接下来写入的两个字节将被存到暂存器中的地址位置2和3。可以在任何时刻发出复位命令来中止写入。

Read Scratchpad(读暂存存储器)[BEH] 这个命令读取暂存器的内容。读取将从字节0开始,一直进行下去,直到第9(字节8,CRC)字节读完。如果不想读完所有字节,控制器可以在任何时间发出复位命令来中止读取。

Copy Scratchpad(复制暂存存储器)[48H] 这条命令把暂存器的内容拷贝到DS18B20的E2存储器里,即把温度报警触发字节存入非易失性存储器里。如果总线控制器在这条命令之后跟着发出读时间隙,而DS18B20又正在忙于把暂存器拷贝到E2存储器,DS18B20就会输出一个“0”,如果拷贝结束的话,DS18B20 则输出“1”。如果使用寄生电源,总线控制器必须在这条命令发出后立即起动强上拉并最少保持10ms。

Convert T(温度变换)[44H] 这条命令启动一次温度转换而无需其他数据。温度转换命令被执行,而后DS18B20保持等待状态。如果总线控制器在这条命令之后跟着发出读时间隙,而DS18B20又忙于做时间转换的话,DS18B20将在总线上输出“0”,若温度转换完成,则输出“1”。如果使用寄生电源,总线控制器必须在发出这条命令后立即起动强上拉,并保持500ms。

Recall E2(重新调整E2)[B8H] 这条命令把贮存在E2中温度触发器的值重新调至暂存存储器。这种重新调出的操作在对DS18B20上电时也自动发生,因此只要器件一上电,暂存存储器内就有了有效的数据。在这条命令发出之后,对于所发出的第一个读数据时间片,器件会输出温度转换忙的标识:“0”=忙,“1”=准备就绪。

Read Power Supply(读电源)[B4H] 对于在此命令发送至DS18B20之后所发出的第一读数据的时间片,器件都会给出其电源方式的信号:“0”=寄生电源供电,“1”=外部电源供电。

④ 处理数据 DS18B20的高速暂存存储器由9个字节组成,其分配如表3-2所示。当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器 的第0和个字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后。

表3-2 DS18B20暂存器字节分配 温度/℃ 二进制表示 十六进制表示 符号位(5位)

数据位(11位)

+125 0 0 0 0 0 1 1 1 1 1 0 1 0 0 0 0 07D0H +25.0625 0 0 0 0 0 0 0 1 1 0 0 1 0 0 0 1 0191H +10.125 0 0 0 0 0 0 0 0 1 0 1 0 0 0 1 0 00A2H +0.5 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0008H 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0000H -0.5 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 FFF8H -10.125 1 1 1 1 1 1 1 1 0 1 0 1 1 1 1 0 FF5EH -25.625 1 1 1 1 1 1 1 0 0 1 1 0 1 1 1 1 FE6FH -55 1 1 1 1 1 1 0 0 1 0 0 1 0 0 0 0 FC90H 上表是DS18B20温度采集转化后得到的12位数据,存储在DS18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于或等于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;

如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。

温度转换计算方法举例:

例如当DS18B20采集到+125℃的实际温度后,输出为07D0H,则:

实际温度=07D0H╳0.0625=2000╳0.0625=125.0℃。

例如当DS18B20采集到-55℃的实际温度后,输出为FC90H,则应先将11位数据位取反加1得370H(符号位不变,也不作为计算),则:

实际温度=370H╳0.0625=880╳0.0625=55.0℃。

3.9 本章小结 本章详细的讲述了以80C51为核心元件的恒温箱的硬件电路具体设计过程,分析了具体电路的工作原理。在设计过程中,实现温度控制的是通过编写程序的方法集成在80C51内部。接着将程序下载到硬件电路中,配合周边的温度采集电路,时钟电路,温度控制电路,显示电路等,制作出符合设计要求的恒温箱。

4 软件设计 4.1 软件任务分析 软件任务分析和硬件电路设计结合进行,哪些功能由硬件完成,哪些任务由软件完成,在硬件电路设计基本定型后,也就基本上决定下来了。

软件任务分析环节是为软件设计做一个总体规划。从软件的功能来看可分为两大类:一类是执行软件,它能完成各种实质性的功能,如测量,计算,显示,打印,输出控制和通信等;

另一类是监控软件,它是专门用来协调各执行模块和操作者的关系,使在系统软件中充当组织调度角色的软件。这两类软件的设计方法各有特色,执行软件的设计偏重算法效率,与硬件关系密切,千变万化。

软件任务分析时,应将各执行模块一一列出,并为每一个执行模块进行功能定义和接口定义(输入输出定义)。在对各执行模块进行定义时,将要牵扯到的数据结构和数据类型问题也一并规划好。

各执行模块规划好后,就可以设计监控程序了。首先根据系统功能和键盘设置选择一种最适合的监控程序结构。相对来讲,执行模块任务明确单纯,比较容易编程,而监控程序较易出问题。这如同当一名操作工人比较容易,而当一个厂长就比较难一样。

软件任务分析的另一个内容是如何安排监控软件和执行模块。整个系统软件可分为后台程序(背景程序)和前台程序。后台程序指主程序及其调用的子程序,这类程序对实时性要求不是太高,延时几十毫秒甚至几百毫秒也没关系,故通常将监控程序(键盘解释程序),显示程序和打印程序等与操作者打交道的程序放在后台程序中执行;

而前台程序安排一些实时性要求较高的内容,如定时系统和外部中断。也可以将全部程序均安排在前台,后台程序为“使系统进入睡眠状态”,以利于系统节电和抗干扰。

4.2 程序流程图 在本程序中包括了以下主要的程序,主程序,温度设定子程序,温度读取及转换子程序,显示温度子程序,比较温度子程序,显示切换子程序。

主程序流程图如图4.1所示:

图4.1 主程序流程图 温度设定子程序流程图如图4.2所示:

图4.2 温度设定子程序流程图 温度采集计算子程序如图4.3所示:

图4.3 温度采集计算子程序流程图 温度比较处理子程序流程图如图4.4所示 读取实时温度值 实时温度与设定温度相等吗? 实时温度比设定值大? 开启制冷 开启加热 N 返回 N Y Y 图4.4 温度比较处理子程序流程图 温度显示子程序如图4.5所示:

选通十位地址,送显示字符 延时约12ms 选通个位地址,送显示字符 延时约12ms 返回 图4.5 温度显示子程序 根据这些流程图编写出的最终源程序见附录D 4.3 本章小结 本章是恒温箱的软件设计,实现恒温箱的主要功能是通过编写程序的方法集成在80C51内部。将程序下载到硬件电路中,实现温控功能。

5 参考文献 [1] 何立民. 单片机高级教程应用与设计[M].北京:北京航空航天大学出版社,2007.1 [2] 胡汉才.单片机原理及接口技术[M].北京:清华大学出版社,1999 [3]欧阳文.ATMEL89系列单片机的原理与开发实践[M].北京;中国电力出版社,2007.6 [4]樊尚春.传感器技术及应用[M].北京航空航天大学出版社,2004.8 [5]高鹏等.Protel99入门与提高[M].人民邮电出版社,2000. [6]刘亮.先进传感器及应用[M].化学工业出版社,2005 [7]潘永雄.新编单片机原理与应用[M].西安:西安电子科技大学出版社,2003 [8]徐凤霞,赵成安.AT89C51单片机温度控制系统[J].齐齐哈尔大学学报,2004,3 [9]楼然苗.51系列单片机设计实例[M].北京航空航天大学出版社2003.03 [10]褚斌,徐力.多参数新型智能变送器的设计[J].仪表技术与传感器,2004(10):54-56. [11]李德振.湿度监测系统设计方案[J].电子制作,2010. 6 附录A 相关图 仿真图 硬件原理图 7 附录B 一篇引用文献 8051 单片微型计算机简称为单片机,又称为微型控制器,是微型计算机的一个重要分支。单片机是70年代中期发展起来的一种大规模集成电路芯片,是CPU、RAM、ROM、I/O接口和中断系统于同一硅片的器件。80年代以来,单片机发展迅速,各类新产品不断涌现,出现了许多高性能新型机种,现已逐渐成为工厂自动化和各控制领域的支柱产业之一。

引脚功能:

MCS-51是标准的40引脚双列直插式集成电路芯片,引脚分布请参照----单片机引脚图:

P0.0~P0.7 P0口8位双向口线(在引脚的39~32号端子)。

P1.0~P1.7 P1口8位双向口线(在引脚的1~8号端子)。

P2.0~P2.7 P2口8位双向口线(在引脚的21~28号端子)。

P3.0~P3.7 P3口8位双向口线(在引脚的10~17号端子)。

这4个I/O口具有不完全相同的功能,大家可得学好了,其它书本里虽然有,但写的太深,初学者很难理解,这里都是按我自已的表达方式来写的,相信你也能够理解。

P0口有三个功能:

1、外部扩展存储器时,当做数据总线(如图1中的D0~D7为数据总线接口)

2、外部扩展存储器时,当作地址总线(如图1中的A0~A7为地址总线接口)

3、不扩展时,可做一般的I/O使用,但内部无上拉电阻,作为输入或输出时应在外部接上拉电阻。

P1口只做I/O口使用:其内部有上拉电阻。

P2口有两个功能:

1、扩展外部存储器时,当作地址总线使用 2、做一般I/O口使用,其内部有上拉电阻;

P3口有两个功能:

除了作为I/O使用外(其内部有上拉电阻),还有一些特殊功能,由特殊寄存器来设置,具体功能请参考我们后面的引脚说明。

有内部EPROM的单片机芯片(例如8751),为写入程序需提供专门的编程脉冲和编程电源,这些信号也是由信号引脚的形式提供的,即:编程脉冲:30脚(ALE/PROG)编程电压(25V):31脚(EA/Vpp)(注:这些引脚的功能应用,除9脚的第二功能外,在“新动力2004版”学习套件中都有应用到。)

在介绍这四个I/O口时提到了一个“上拉电阻”那么上拉电阻又是什么呢?他起什么作用呢?都说了是电阻那当然就是一个电阻啦,当作为输入时,上拉电阻将其电位拉高,若输入为低电平则可提供电流源;

所以如果P0口如果作为输入时,处在高阻抗状态,只有外接一个上拉电阻才能有效。ALE/PROG 地址锁存控制信号:在系统扩展时,ALE用于控制把P0口的输出低8位地址送锁存器锁存起来,以实现低位地址和数据的隔离。(在后面关于扩展的课程中我们就会看到8051扩展 EEPROM电路,在图中ALE与74LS373锁存器的G相连接,当CPU对外部进行存取时,用以锁住地址的低位地址,即P0口输出。ALE有可能是高电平也有可能是低电平,当ALE是高电平时,允许地址锁存信号,当访问外部存储器时,ALE信号负跳变(即由正变负)将P0口上低8位地址信号送入锁存器。当ALE是低电平时,P0口上的内容和锁存器输出一致。关于锁存器的内容,我们稍后也会介绍。

在没有访问外部存储器期间,ALE以1/6振荡周期频率输出(即6分频),当访问外部存储器以1/12振荡周期输出(12分频)。从这里我们可以看到,当系统没有进行扩展时,ALE会以1/6振荡周期的固定频率输出,因此可以做为外部时钟,或者外部定时脉冲使用。

PORG为编程脉冲的输入端:在第五课单片机的内部结构及其组成中,我们已知道,在8051单片机内部有一个4KB或8KB的程序存储器(ROM),ROM的作用就是用来存放用户需要执行的程序的,那么我们是怎样把编写好的程序存入进这个ROM中的呢?实际上是通过编程脉冲输入才能写进去的,这个脉冲的输入端口就是PROG。

PSEN 外部程序存储器读选通信号:在读外部ROM时PSEN低电平有效,以实现外部ROM单元的读操作。

1、内部ROM读取时,PSEN不动作;

2、外部ROM读取时,在每个机器周期会动作两次;

3、外部RAM读取时,两个PSEN脉冲被跳过不会输出;

4、外接ROM时,与ROM的OE脚相接。

参见图2—(8051扩展2KB EEPROM电路,在图中PSEN与扩展ROM的OE脚相接)

EA/VPP 访问和序存储器控制信号 1、接高电平时:

CPU读取内部程序存储器(ROM)

扩展外部ROM:当读取内部程序存储器超过0FFFH(8051)1FFFH(8052)时自动读取外部ROM。

2、接低电平时:CPU读取外部程序存储器(ROM)。

在前面的学习中我们已知道,8031单片机内部是没有ROM的,那么在应用8031单片机时,这个脚是一直接低电平的。

3、8751烧写内部EPROM时,利用此脚输入21V的烧写电压。

RST 复位信号:当输入的信号连续2个机器周期以上高电平时即为有效,用以完成单片机的复位初始化操作,当复位后程序计数器PC=0000H,即复位后将从程序存储器的0000H单元读取第一条指令码。

XTAL1和XTAL2 外接晶振引脚。当使用芯片内部时钟时,此二引脚用于外接石英晶体和微调电容;

当使用外部时钟时,用于接外部时钟脉冲信号。

VCC:电源+5V输入 VSS:GND接地。

AVR和pic都是跟8051结构不同的8位单片机,因为结构不同,所以汇编指令也有所不同,而且区别于使用CISC指令集的8051,他们都是RISC指令集的,只有几十条指令,大部分指令都是单指令周期的指令,所以在同样晶振频率下,较8051速度要快。另PIC的8位单片机前几年是世界上出货量最大的单片机,飞思卡尔的单片机紧随其后。

ARM实际上就是32位的单片机,它的内部资源(寄存器和外设功能)较8051和PIC、AVR都要多得多,跟计算机的CPU芯片很接近了。常用于手机、路由器等等。

DSP其实也是一种特殊的单片机,它从8位到32位的都有。它是专门用来计算数字信号的。在某些公式运算上,它比现行家用计算机的最快的CPU还要快。比如说一般32位的DSP能在一个指令周期内运算完一个32位数乘32位数积再加一个32位数,应用于某些对实时处理要求较高的场合。

8 附录C 主要参考文献题录及摘要 [1] 何立民. 单片机高级教程应用与设计[M].北京:北京航空航天大学出版社,2007.1 【摘要】本书以80C51系列单片机为主线,在介绍单片机原理、典型结构、基本功能单元的基础上,重点讲解了单片机应用系统设计、硬件技术。内容包括:单片机基本结构与工作原理,80C51单片机的指令系统,80C51单片机基本功能单元与操作原理,最小应用系统设计,并行扩展技术,串行扩展技术,应用程序设计技术,最小功耗系统设计,可靠性设计等。突出了嵌入式应用设计内容。

【关键词】80C51单片机;

嵌入式;

扩展技术 [2] 胡汉才.单片机原理及接口技术[M].北京:清华大学出版社,1999。

【摘要】本书详尽介绍了MCS-51系列单片机的硬件结构、指令系统、设计、中断系统、系统扩展、接口技术及应用等内容。在内容安排上坚持改革与创新相结合,强调实践性和应用性,重在方法的介绍,旨在锻炼学生的综合、分析能力和基本技能的培养。

【关键词】MCS-51单片机;

指令系统;

接口技术 [3]欧阳文.ATMEL89系列单片机的原理与开发实践[M].北京:中国电力出版社,2007.6 【摘要】本书从单片机的基础知识出发,重点讲述了ATMEL89系列单片机的结构和应用。全书从结构上分为原理说明与案例分析两部分,系统详细地介绍了单片机的基础知识、ATMEL89系列单片机基本结构、定时及中断部件结构及功能、串行接口部件结构及功能、软件系统、单片机抗干扰技术、简易网络导纳分析仪的制作、直流电压控制输出实例、单片机控制应用实例等。

【关键词】单片机;

ATMEL89系列;

串行接口 [4]樊尚春.传感器技术及应用[M].北京航空航天大学出版社,2004.8 【摘要】本教材较系统地介绍了传感器技术涵盖的主要内容,包括传感器的特性及其评估;

传感器中常用的弹性敏感组件的力学特性;

电位器式传感器;

应变式传感器;

压阻式传感器;

热电式传感器;

电容式传感器;

变磁路式传感器;

压电式传感器;

谐振式传感器;

声表面波传感器;

光纤传感器;

微机械传感器以及智能化传感器等。

【关键词】传感器;

智能化;

敏感组件 [5]高鹏等.Protel99入门与提高[M].人民邮电出版社,2000. 【摘要】本书以Protel99为主线,讲解了电子线路设计的基本概念,设计规则,通过典型实例,全面介绍了目前应用广泛的电子线路软件包----Protel99SE的主要功能,安装和使用方法。本书结合实例,对本书中内容尤其是模拟仿真部分,作了较为详细的讲解。

【关键词】Protel99SE;

软件包;

电子线路设计 [6]刘亮.先进传感器及应用[M]. 化学工业出版社,2005 【摘要】本书围绕光机电一体化产品组成要素中紧密相连的传感器技术,从先进、新颖和实用的角度出发,详细介绍了多种先进传感器的原理、性能和设计、制作方法及其外围测量电路的设计方法。详尽地论述了各种新型传感器在测量、探测、检测方面和传感遥测领域的具体应用技术。论述了常用传感器测控电路和传感遥控遥测电路的设计及应用。书中还以微电子技术和数字技术为重点,较详细地介绍了传感器的外部接口电路、信号转换和接口方法,深入浅出,通俗易懂,易做到学以致用。

【关键词】传感器技术;

外部接口电路;

新型传感器 [7]潘永雄.新编单片机原理与应用[M].西安:西安电子科技大学出版社,2003 【摘要】本书以增强型MCS-51单片机原理及应用为主线,系统的介绍了8XC5X(包括8XC5X2、8XC51RX、89C6XX2、P87PC76X系列MPU芯片的内部结构、指令系统、资源及扩展方法、接口技术,以及单片机应用系统硬件结构、开发手段与设备等。在编写过程中,尽量避免过多的介绍程序设计的方法和技巧,着重介绍硬件资源及使用方法、系统构成及连接,注重典型性和代表性,以期达到举一反三的效果。在内容安排上,力求兼顾基础性、实用性、先进性。

【关键词】MCS-51单片机;

MPU硬件结构;

接口技术 [8]徐凤霞,赵成安.AT89C51单片机温度控制系统[J].齐齐哈尔大学学报,2004,3 【摘要】本系统以单片机系统为控制核心, 用线性度好、灵敏度高的集成温度传感器及分辨率高、噪声低的习转换器进行温度采集, 采用线性数字校正和数字滤波技术, 增强系统的灵敏度和抗干扰能力。

【关键词】温度测控;

单片机控制;

AT89C51 。

9 附录D 主要源程序 TEMPER_L EQU 31H ;

用于保存读出温度低字节 TEMPER_H EQU 30H ;

用于保存读出温度高字节 TEMPER_SET EQU 32H ;

用于保存设定的预期温度 FLAG EQU 33H ;

是否检测到DS18B20标志位 ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV R0,#20 ;

系统默认预期温度为20℃ START: CLR P2.6 ;

点亮“实时温度”指示灯 SETB P2.5 ;

熄灭“设定温度”指示灯 JNB P2.2,SELSUB ;

是进入温度设定 LCALL GET_TEMPER ;

调用温度获取子程序 LCALL COMPARE ;

调用温度比较子程序 LCALL DISPLAY ;

调用显示子程序 LCALL KEY ;

调用显示切换子程序 LJMP START SELSUB: MOV A,R0 MOV B,#10 DIV AB MOV R1,A ;

温度十位存R1 MOV R2,B ;

温度个位存R2 LCALL DISPLAY ;

显示温度 JNB P2.3,INC0 JNB P2.4,DEC0 JB P2.2,BACK LJMP SELSUB INC0: ;

温度加1℃ MOV A,R1 CJNE A,#63H,ADD0 ;

温度是否为99℃,不是则跳到ADD0 MOV R1,#00H INC1: LCALL DELAY1 ;

延时显示 JNB P2.3,INC1 ;

按键是否松开,松开则程序往下执行 LJMP SELSUB ADD0: INC R0 LCALL DELAY1 LJMP SELSUB DEC0: ;

温度减1℃ MOV A,R1 JZ SETR1 ;

温度是0℃则跳到SETR1 DEC R0 DEC1: LCALL DELAY1 JNB P2.4,DEC1 ;

按键是否松开,松开则程序往下执行 LJMP SELSUB SETR1: MOV R1,#63H LCALL DELAY1 LJMP SELSUB BACK: LJMP START GET_TEMPER: SETB P1.2 LCALL SET_1820 ;

DS18B20初始化 JB FLAG,TSS2 ;

检测到DS18B20跳到TSS2 RET TSS2: MOV A,#0CCH ;

跳过ROM匹配 LCALL WRITE_1820 ;

写DS18B20子程序 MOV A,#44H ;

发出温度转换命令 LCALL WRITE_1820 LCALL DISPLAY ;

用显示温度来等待AD转换结束 LCALL SET_1820 MOV A,#0CCH ;

跳过ROM匹配 LCALL WRITE_1820 MOV A,#0BEH ;

发出读温度命令 LCALL WRITE_1820 LCALL READ_1820 ;

读DS18B20的温度数据 MOV A,TEMPER_L MOV R3,#4 L1: SETB C RRC A DJNZ R3,L1 MOV TEMPER_L,A MOV A,TEMPER_H MOV R3,#4 L2: SETB C RLC A DJNZ R3,L2 ANL A,TEMPER_L MOV R7,A ;

读出的温度转化问摄氏温度存R7中 MOV B,#10 DIV AB MOV R1,A ;

读出的温度十位存R1 MOV R2,B ;

读出的温度个位存R2 RET SET_1820: ;

DS18B20复位初始化子程序 SETB P1.2 NOP CLR P1.2 MOV R3,#3 ;

主机发出延时537微秒的复位低脉冲 TSR1: MOV R4,#107 DJNZ R4,$ DJNZ R3,TSR1 SETB P1.2 ;

然后拉高数据线 NOP NOP NOP MOV R4,#25H TSR2: JNB P1.2,TSR3 ;

等待DS18B20回应 DJNZ R4,TSR2 LJMP TSR4 ;

延时 TSR3: SETB FLAG ;

置标志位,表示DS18B20存在 LJMP TSR5 TSR4: CLR FLAG ;

清标志位,表示DS18B20不存在 LJMP TSR7 TSR5: MOV R4,#117 TSR6: DJNZ R4,TSR6 ;

时序要求延时一段时间 TSR7: SETB P1.2 RET WRITE_1820: MOV R3,#8 ;

一共8位数据 CLR C WR1: CLR P1.2 MOV R4,#6 DJNZ R4,$ RRC A MOV P1.2,C MOV R4,#23 DJNZ R4,$ SETB P1.2 NOP DJNZ R3,WR1 SETB P1.2 RET READ_1820: ;

将温度高位和地位从DS18B20中读出 MOV R4,#8 RE01: CLR C SETB P1.2 NOP NOP CLR P1.2 NOP NOP NOP SETB P1.2 MOV R6,#4 DJNZ R6,$ MOV C,P1.2 RRC A MOV R6,#30 DJNZ R6,$ DJNZ R4,RE01 MOV TEMPER_L,A ;

地位存入31H MOV R4,#8 RE02: CLR C SETB P1.2 NOP NOP CLR P1.2 NOP NOP NOP SETB P1.2 MOV R6,#4 DJNZ R6,$ MOV C,P1.2 RRC A MOV R6,#30 DJNZ R6,$ DJNZ R4,RE02 MOV TEMPER_H,A ;

高位存入32H RET COMPARE: ;

比较温度子程序 MOV TEMPER_SET,R0 MOV A,R7 CJNE A,TEMPER_SET,COMP ;

设定温度与实时温度不等则跳COMP SETB P1.0 ;

关加热器 SETB P1.1 ;

关制冷器 RET COMP: MOV A,R7 ;

实时温度存入A MOV B,R0 ;

设定温度存入B DIV AB ;

A除以B,商给A CJNE A,#0H,COMP1 ;

若A不等于0,即实时温度高,跳转 SETB P1.1 ;

关制冷器 CLR P1.0 ;

开加热器 LJMP EXIT COMP1: SETB P1.0 ;

关加热器 CLR P1.1 ;

开制冷器 EXIT: RET DISPLAY: ;

显示子程序 MOV DPTR,#DAT MOV A,R1 MOVC A,@A+DPTR CLR P2.0 SETB P2.1 MOV P0,A ;

动态扫描,显示十位 LCALL DELAY ;

延时约12毫秒 MOV A,R2 MOVC A,@A+DPTR SETB P2.0 CLR P2.1 MOV P0,A ;

动态扫描,显示个位 LCALL DELAY SETB P2.0 SETB P2.1 ;

关显示 RET DAT: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H ;

“0”,“1”,“2”,“3”,“4”,“5”,“6”,“7”,“8”,“9”,“灭” DELAY1: ;

延时子程序,延时并显示 MOV 36H,#08H LOOP0: LCALL DISPLAY DJNZ 36H,LOOP0 RET DELAY: ;

延时子程序,延时约12ms MOV 34H,#24H LOOP: MOV 35H,#0AFH LOOP1: DJNZ 35H,LOOP1 DJNZ 34H,LOOP RET KEY: ;

显示切换子程序 JNB P2.7,KEY1 RET KEY1: LCALL DELAY ;

延时去抖动 JNB P2.7,KEY2 RET KEY2: LCALL INT RET INT: MOV A,R0 ;

显示设定温度 MOV B,#10 DIV AB MOV R1,A MOV R2,B MOV R6,#50 LCALL DELAY1 DJNZ R6,$ RET END

本文来源:http://www.scfx8.com/gerengongzuozongjie/75710.html