资源描述
基于C51单片机的大棚温度自动调控系统的设计
【摘 要】 本系统是一个自动测温控温系统。主要采用ATB9C51单片机,以及温度传感器DS18B20,将采集到的实时温度通过串口向单片机进行传输,对温度进行实时监测,并将通过键盘设定的适合大棚植物生长最佳的温度。最后将测得的结果发送到数码管显示出来。该系统对所测得的温度值进行分析,自动驱动相应的降温或加热设备,以达到对温度智能控制。在实际运用中我们就能够免除温度过高或过低给我们带来的经济损失。
1.前言
1.1、系统的运用和实际意义
在随着农业现代化的发展,名贵蔬菜栽培工程因其涉及学科广、科技含量高、与人民生活关系密切,己越来越受到世界各国的重视。这也为我国大型现代化温室的发展提供了极好的机遇,并产生巨大的推动作用。我国的现代化温室是在引进与自我开发并进的过程中发展起来的。温室是植物栽培生产中必不可少的设施之一,不同种类名贵蔬菜对温度生长所需条件的要求也不尽相同,为它们提供一个更适宜其生长的封闭的、良好的生存环境,根据市场的供求关系,提早或延迟最佳食用期,最终将会给我们带来巨大的经济效益。温室环境自动化控制系统在大型现代化温室的利用,是设施栽培高新技术的体现。
随着现代科技的发展,电子计算机已用于控制温室环境。控制系统由中央控制装置、终端控制设备、传感器等组成。终端控制设备向中央控制装置输送检测信息,根据中央控制装置的指令输出控制信号,使电器机械设备执行动作,实现温室环境调节。
1.2 、系统设计任务及要求
1.2.1、设计任务
设计一个基于单片机可以自动监控、调控大棚内温度的智能系统。
设计后的温度检测系统,通过外部设备控制设置温度,并能直接显示出来设置温度和当前温度。若温度没达到设定的温度,系统都能够自动的调节温度,当温度低于设定温度值时启动加热设备,当温度高于设定温度值时启动降温设备,使得菜棚可以控制有利于植物生长的最佳温度,实现智能恒温控制。
1.2.2、设计要求
(1)通过按键可以任意设置大棚内的温度。
(2)能检测当前大棚内的实时温度。
(3)能用数码管显示调节设置的温度值,和当前实时的温度值。
(4)能智能调节大棚内的温度,使当前温度等于设置的温度值。
(5)调节后的大棚内的温度与按键设置的温度,正负误差不能大于1度。
(6)温度显示的最小精度为1度,升温、降温阶段的温度控制精度要求为1度,保温阶段温度控制精度为1度 。
(7)智能系统的温度的加热,散热系统。分别为电炉丝加热,开启风扇和打开大棚门窗通风散热。
2、系统结构设计
2.1 系统框架
本设计系统包括温度传感器,键盘输入控制模块,输出控制模块,温度显示模块和温度调节驱动电路五个部分。文中对每个部分功能、实现过程作了详细介绍。整个系统的核心是进行温度监控。
系统由51系列单片机AT89C51、按键、DS18B20温度采集、数码管显示,电源,电动机散热,灯泡加热模块等部分构成。单片机部分包括时钟电路、复位电路;按键部分能够实现对温度的调整设定。四个按键的功能分别为:加10度、加1度、减10度、减1度。温度采集部分包括温度传感器、BCD码转换。经软件处理后送至7段共阴数码管显示。电源部分共输出5V电压给各个芯片提供电源。
2.2 系统功能方框图 2-1
单片机
DS18B20温度采集
键盘预设温度
数码管显示
自动调节温度
电源
继电器控制
2-1系统功能方框图
2.3 系统功能说明
(1) 能够用数码管同时显示测量的温度和预设的温度,显示位数4位,分别预设温度的十位,个位测量温度的十位,个位。
(2)可以手动通过按键设置温度
(3)超出温度设定值时启动降温设备(电动机自制的电风扇),温度低于设定值时启动加热设备(电灯泡)温度相等的时候把两继电器都关了。
3、DS18B20功能介绍
为了简化电路,经济实惠,自动测量等方面考虑,本系统采用DS18B20温度传感器来测量系统温度,DS18B20与单片机是单总线连接方式,它只定义了一根信号线,总线上的每个器件都能够在合适的时间驱动它,相当于把单片机的地址线、数据线、控制线、合为一根信号线对外进行数据交换,并且,它不再经A/D转换成数字量,直接测得为数字量,简化了许多工作量,电路也简单可靠的多。下面介绍温度传感器DS18B20的使用说明。
3.1.DS18B20简介
(1)独特的单线接口方式:DS18B20与微处理器连接时仅需要一条口线即可实现微处理 器与DS18B20的双向通讯。
(2)在使用中不需要任何外围元件。
(3)可用数据线供电,电压范围:+3.0~+5.5 V。
(4)测温范围:-55 ~+125 ℃。固有测温分辨率为0.5 ℃。
(5)通过编程可实现9~12位的数字读数方式。
(6)用户可自设定非易失性的报警上下限值。
(7)支持多点组网功能,多个DS18B20可以并联在惟一的三线上,实现多点测温。
(8)负压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。
3. 2.DS18B20的内部结构
DS18B20采用3脚PR35封装或8脚SOIC封装,其内部结构框图如图3-1所示。
(1) 64 b闪速ROM的结构如下图3-2:
开始8位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后8位是前56位的CRC校验码,这也是多个DS18B20可以采用一线进行通信的原因。
(2) 非易市失性温度报警触发器TH和TL,可通过软件写入用户报警上下限。
(3) 高速暂存存储器
DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的E2RAM。后者用于存储TH,TL值。数据先写入RAM,经校验后再传给E2RAM。而配置寄存器为高速暂存器中的第5个字节,他的内容用于确定温度值的数字转换分辨率,DS18B20工作时按此寄存器中的分辨率将温度转换为相应精度的数值。该字节各位的定义如下图3-3:
低5位一直都是1,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。在DS18B20出厂时该位被设置为0,用户不要去改动,R1和R0决定温度转换的精度位数,即是来设置分辨率,如
3-4所示(DS18B20出厂时被设置为12位)。
由图3-4可见,设定的分辨率越高,所需要的温度数据转换时间就越长。因此,在实际应用中要在分辨率和转换时间权衡考虑。
高速暂存存储器除了配置寄存器外,还有其他8个字节组成,其分配如下图3-5所示。其中温度信息(第1,2字节)、TH和TL值第3,4字节、第6~8字节未用,表现为全逻辑1;第9字节读出的是前面所有8个字节的CRC码,可用来保证通信正确。
图3-5
当DS18B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1,2字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式以0062 5 ℃/LSB形式表示。温度值格式如下图3-6:
对应的温度计算:当符号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变换为原码,再计算十进制值。图3-7是对应的一部分温度值。
DS18B20完成温度转换后,就把测得的温度值与TH,TL作比较,若T>TH或T<TL,则将该器件内的告警标志置位,并对主机发出的告警搜索命令作出响应。因此,可用多只DS18B20同时测量温度并进行告警搜索。
(4) CRC的产生
在64 b ROM的最高有效字节中存储有循环冗余校验码(CRC)。主机根据ROM的前56位来计算CRC值,并和存入DS18B20中的CRC值做比较,以判断主机收到的ROM数据是否正确。
3.3.DS18B20的测温原理
DS18B20的测温原理如图3-8所示,图中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1,高温度系数晶振随温度变化其震荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入,图中还隐含着计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲后进行计数,进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55 ℃所对应的基数分别置入减法计数器1和温度寄存器中,减法计数器1和温度寄存器被预置在-55 ℃所对应的一个基数值。减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。图2中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直至温度寄存器值达到被测温度值,这就是DS18B20的测温原理。
另外,由于DS18B20单线通信功能是分时完成的,他有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作必须按协议进行。操作协议为:初始化DS18B20(发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据。各种操作的时序图与DS1820相同,。
3.4、DS18B20与单片机的典型接口设计
以MCS51单片机为例,图3-9中采用寄生电源供电方式, P1 1口接单线总线为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个MOSFET管和89C51的P10来完成对总线的上拉。当DS18B20处于写存储器操作和温度A/D变换操作时,总线上必须有强的上拉,上拉开启时间最大为10 μs。采用寄生电源供电方式是VDD和GND端均接地。由于单线制只有一根线,因此发送接收口必须是三态的。主机控制DS18B20完成温度转换必须经过3个步骤:初始化、ROM操作指令、存储器操作指令。假设单片机系统所用的晶振频率为12 MHz,根据DS18B20的初始化时序、写时序和读时序,分别编写3个子程序:INIT为初始化子程序,WRITE为写(命令或数据)子程序,READ为读数据子程序,所有的数据读写均由最低位开始,实际在实验中不用这种方式,只要在数据线上加一个上拉电阻4.7 kΩ,另外2个脚分别接电源和地。
4.系统硬件设计与方案选择
4.1 单片机电路
4.1.1 时钟电路
时钟系统是单片机的心脏,各部分都以时钟频率为基准,有条不紊地一拍一拍地工作。因此,时钟频率直接影响单片记得速度,时钟电路的质量也直接影响单片机系统的稳定性。常用的时钟电路有内部时钟和外部时钟两种。
CPU的时钟振荡信号有两个来源:一是采用内部振荡器,此时需要在XTAL1和XTAL2脚连接一只频率范围为1.2—12MHZ的晶体振荡或陶瓷振荡器及两只30pf电容。二是采用外部振荡,此时应将外部振荡器的输出信号接至XTAL1脚,将XTAL2脚浮空。
本次设计中采用的是内部振荡器,频率为12MHZ的晶体振荡器及30pf的瓷片电容。如图4-1所示。
图4-1时钟电路
4.1.2复位电路
复位是指在规定的条件下,单片机自动将CPU以及与程序运行相关的主要功能部件、I/O口等设置为确定初始状态的过程。如果电路参数不符合规定的条件或干扰导致单片机不能正确的复位,系统将无法进行正常的工作,因此,复位电路除了要符合厂家规定的参数外,还要滤除可能的干扰。
AT89C51单片机内部有一个由施密特触发器等组成的复位电路。复位信号是从其9脚,即RST脚输入的。AT89C51单片机规定,当其处于正常工作状态,且振荡器工作稳定后,在RST端有从高电平到低电平,且高电平时间大于两个机器周期的复位信号时,CPU将完成对系统的复位。有两点需要注意:一、复位信号是高电平有效,二、高电平的保持时间必须大于两个机器周期,可见高电平保持时间与振荡频率有关。
本次设计中采用上电复位电路,上电复位是指在系统上电时,RST端自动产生复位所需要的信号将单片机复位,本次设计中的上电复位电路如图所示。上电时,RST端高电平的维持时间取决于R(1k)和C(47uF)的值。要使单片机可靠的复位,设计中使其维持的时间足够长。 电路如图4-2.
4.1.3按键电路
系统要能设置温度,就要有外部设备。这里我选用按键设备来完成调节所需的设备。因为本系统只需四个按键,所以采用独立式按键电路
每个键单独占有一根I/O接口线,每个I/O口的工作状态互不影响,此类键盘采用端口直接扫描方式。按键一端接高电平后通过一个1K电阻直接接入单片机I/O口中分别接入单片机的P2.0,P2.1,P2.2,P2.3,四个I/O口中,另一端接地,按键响应是I/O从高电平变为低低频。电路如图4-3所示
图4-2 复位电路
图4-3 键盘电路
4.2 继电器控制电路
为了能通过温度的变化来调节大棚的温度,这里我选用了继电器,单片机可以通过继电器实行低压控制高压,中压,低压电路。是一个很好的开关器件。本次系统采用的是5V低电压控制220V 的继电器。
电路说明:继电器接电源控制的两端分别接上5V电源,和一个三极管,通过单片机的I/O电路的高低电平来控制9012的导通与截至,从而控制继电器的吸合,这里继电器与单片机的接口问P2.和,P2.5两口电路如图4-4
图4-4 继电器电路
4.3显示电路
l 方案一:采用动态显示
这种工作方式是分时轮流选通数码管的公共端,使得各个数码管轮流导通。当所有数码管依次显示一遍后,软件控制循环,使每位显示器分时点亮。这种方式不但能提高数码管的发光效率,并且由于各个数码管的字段线是并联使用的,因而大大简化了硬件线路。
各个数码管虽然是分时轮流通电,但由于发光数码管具有余辉特性及人眼具有视觉暂留作用,所以适当选取循环扫描频率时,看上去所有数码管是同时点亮的,察觉不出有闪烁现象。
l 方案二:采用静态显示
数码管工作在静态显示方式下,共阴极或共阳极点连接在一起接地或高电平。每位的段选线与一个8位并行口相连。只要在该位的段选线上保持段选码电平,该位就能保持相应的显示字符。该工作方式常采用串行口设定方式0输出,外接74LS164移位寄存器构成显示电路。
这里我选用静态显示方案 电路如图4-5所示
4.4 AT89C51 单片机芯片
方案一:采用AT89C51芯片,它具有体积小、功耗小,容量大。含有中断、定时/计数器。本次设计没有非常大的编程量,此芯片的容量已足够。
方案二:采用AT89S52芯片,它比起80C51它增加了一个16位定时/计数器T2。T2与T0和T1有类似的功能,即可以作定时或计数器使用,同时还增加了扑捉等新的功能,它的功能比其他两个定时器更强,使用也比较复杂。
图4-5 显示电路(1个模块)
图4-6 AT89C51芯片
4.5温度传感器
方案一:热敏电阻。热敏电阻是用半导体材料制成的热敏器件,它测量温度是把电阻随温度的变化关系转化为电压随温度变化的关系,再把热敏电阻电压值经A/D转换成数字量,然后通过软件方法计算得到温度值,再进行显示等处理。它的阻值与温度变化呈非线性关系,稳定性和互换性较差,因此使用中是要进行线性化处理的。线性化处理虽然能改善热敏电阻的特性曲线,但比较复杂。
方案二:DS18B20温度传感器 。DS18B20与单片机是单总线连接方式,它只定义了一根信号线,总线上的每个器件都能够在合适的时间驱动它,相当于把单片机的地址线、数据线、控制线、合为一根信号线对外进行数据交换,并且,它不再经A/D转换成数字量,直接测得为数字量,简化了许多工作量,电路也简单可靠的多。
综合上述,为了简化电路,经济实惠,自动测量等方面考虑,采用方案二。
如下图4-7
图4-7 DS18B20芯片
4.6、电路总图
综合以上各电路模块,及各模块电路的使用功能。绘制出本系统的电路总图,图见附录4-8。此电路配合AT89C51单片机芯片的编程可实现系统的全部功能,
图4-8总电路原理图
5.软件设计说明
5.1 DS18B20器件读取温度流程序图
整数放入R6
转化为BCD码
数字整合
高位放入R6低位放如R7
读取温度
把温度存入暂存器
温度转化
跳过ROM
DS18B20复位
DS18B20测温程序
跳出测温程序
个位数据存入R7
十位数据存入R6
21
5.2键盘处理流程序图
数据写入R5
数据写入R4
调用减1度程序
调用加1度程序
调用减10度程序
调用加10度程序
按键D
按键C
按键B
按键A
判断哪个键按下
键盘处理
A
记录数据
数据写入R5
数据写入R4
5.3 总程序流程图
开始
DS18B20测温程序
显示温度数据R7到R4
键盘设置值与实际温度值比较
键盘扫描
是
温度是否相等
否
温度是否高于设置值
否
是
打开降温系统
打开加热系统
主程序流程图
5.4键盘消抖处理流程序图
键盘扫描流程图
键盘扫描
读键盘状态
否
是否有键按下
是
调用延时消抖程序
确定有键按下
A
6.系统仿真数据测试
6.1仿真系统介绍
在农业生产的大棚温度调控中加热和散热的系统用的是大型电炉丝加热或用暖气管加热,散热系统为大型风扇或打开大棚密闭室让空气对流降温等等的方法。但做为调控系统接这些设备上出很难调试,所以我做了个简易的仿真系统。用60瓦的灯泡加热,用自制的电动机风扇散热,再将灯泡,风扇及温度传感器装在一半密闭的纸箱中。
6.2 操作步骤
把系统接好电源,先用水银温度计测量下室温,记录下具体温度值。再和DS18B20的测量温度值比较下,看系统测量的温度是否准确,再通过键盘调节设置的温度。让系统比较两温度的大小再让自动启动加热或散热系统,使纸箱内的温度达到预期设置的温度值。
6.3数据测量
键盘设置的温度
(度)
设置温度前的水银温度计测的温度
(度)
设置温度后系统稳定时水银温度计测的温度(度)
设置温度前DS18B20测的温度
(度)
设置温度后系统稳定DS18B20测的温度
(度)
实验现象
25
25.6
25.6
25
25
由于设置温度与当前的温度一样,系统不启动任何设备
电路板上的发光二极管前四的亮后四个暗
35
25.6
35.2
25
35
由于设置的温度比当前温度高,系统启动加热设备,继电器吸合,电灯泡亮,电路板上的发光二极管八个都亮,给系统加热。当温度一升高到35时灯泡马上灭。电路板上的发光二极管变为前四的亮后四个暗。再等一会儿的时间温度自动下降到34度,这时继电器再次又吸合灯泡再次亮。发光二极管八个都亮。当显示温度再次到达35度灯泡再次灭。如次反复,不过跳变的频率不是很大。因为设计的比较温度,最小精确度为1度,
24
35.2
24.9
35
24
由于设置的温度比当前温度低,系统启动散热设备,继电器吸合,电动机转动,电路板上的发光二极管八个都灭,给系统散热。当温度一降低到24时电动机停止转动。电路板上的发光二极管变为前四的亮后四个暗。再等一会儿的时间温度自动上升到25度,这时继电器再次又吸电动机再次转动。发光二极管八个都灭。再次散热,当显示温度再次到达24度电动机停止转动。如次反复,不过跳变的频率不是很大。因为设计的比较温度,最小精确度为1度,
6、4程序调试和最终实现的设计效果
经过不断的实验,硬件和程序的配合调试最终完成了设计的预期效果,就是数码管上显示4位数从左到右分别是键盘设置的温度十位、个位。以及DS18B20传感器测得的实际温度的十位、个位。 还有4个按键,分别是对设置的值十位加一,个位加一,十位减一,个位减一,当设置的数值和实际测量的值一样的时候在电路板上的发光二极管前四的亮后四个暗,两继电器都不吸合 。 当设置的数值比实际测量的值大的时候在电路板上的发光二极管八个都亮,而且有一继电器吸合启动加热系统(灯泡亮)。当设置的数值比实际测量的值小的时候在电路板上的发光二极管八个都暗,而且有一继电器吸合启动散热系统(电动机转动)。最终保持当前温度和设置温度一样 。最终设计的效果达到了本次设计的设计要求,实现了要求设计的所以功能。
结束语
本设计是以AT89C51单片机芯片和一种新型的可编程温度传感器(DS18B20)为主要芯片以及其他辅助电路,它不需复杂的信号调理电路和A/D转换电路能直接与单片机完成数据采集和处理,实现方便,温度值能直接在四位七段数码管直接显示出温度值。
本设计应用性比较强,设计系统可以大棚里瓜果蔬菜的温度控制系统。如果稍微改装可以做生物培养液温度监控系统,热水器温度调节系统、实验室温度监控系统等等。课题主要任务是完成环境温度检测,利用单片机实现温度调节。设计后的系统具有操作方便,温度变化、调节显示效果明显,控制灵活等优点
附录
(1)温度调控程序
;******************************************************* **************************
; 程序
;******************************************************** **************************
ORG 0000H
MOV SP,#29H
MAIN1: MOV R7,#30H
LCALL GET_TEMP
LCALL FENLI
LCALL BCD
LCALL SSHOW
LCALL BIJIAO
LOOP: AJMP MAIN1
;*****************************************************************
;功能:从DS18B20中提取温度,并把高字节放在R6中,低字节放在R7 中
; 其中R7 中的高四位放整数部分的低四位,R6中的低四位放整数部分
; 的高四位,R7的低四位为小数部分。
;输出:R6、R7
;*****************************************************************
GET_TEMP:
CLR EA ;使用ds1820一定要禁止任何中断产生
LCALL RESET ;调用初使化子程序
MOV A,#0CCH
LCALL WRITE ;送入跳过ROM命令
MOV A, #44H ;
LCALL WRITE ;送入温度转换命令
LCALL RESET ;温度转换完全,再次初使化ds18b20
MOV A,#0CCH
LCALL WRITE ;送入跳过ROM命令
MOV A,#0BEH
LCALL WRITE ;送入读温度暂存器命令
LCALL READ
MOV R7,A ;读出温度值低字节存入R7
LCALL READ
MOV R6,A ;读出温度值高字节存入R6
SETB EA
RET
;--------------------------------------------------
RESET: ;初始化ds18b20子程序
LL0:CLR P1.2 ;复位:
MOV R2,#149 ;4us
LL1:DJNZ R2,LL1 ;596us
SETB P1.2 ;释放ds1820总线:
MOV R2,#15 ;4us
LL4:DJNZ R2,LL4 ;60us
CLR C ;2us,清存在信号
MOV C,P1.2 ;取存在信号:
JC LL0 ;存在吗?不存在则重新来--001
MOV R2,#125 ;有存在就拉高
setb p1.2
LL5: DJNZ R2,LL5 ;500us
RET
;-------------------------------------------
WRITE:
MOV r1,#08H ;设置写位个数
WLOP:RRC A ;把写的位放到C
ACALL WRBIT ;调写 1位子程序
DJNZ r1,WLOP ;8位全写完?
RET
WRBIT:
MOV B,#15 ;设置时间常数
CLR P1.2 ;写开始
NOP ;2us
MOV P1.2,C ;C内容到总线,4us
WDLT: DJNZ B,WDLT ;60us
SETB P1.2 ;释放总线
RET
;------------------------------------------
READ:
MOV r1,#8H ;设置读位数
RLOP:ACALL RDBIT ;调读1位子程序
RRC A ;把读到位在C中并依次送给A
DJNZ r1,RLOP ;8位读完?
RET
RDBIT:
CLR P1.2 ;读开始图2255的t0时刻
NOP ;2us
SETB P1.2 ;释放总线
NOP ;2us
MOV C,P1.2 ;P1.2内容C
MOV B,#13 ;设置时间常数
RDDLT: DJNZ B,RDDLT ;等待52us
SETB P1.2
RET
;************************************************************
;作用:把小数部分同整数部分分开,R6放整数R7放小数,F0放符号位
;输入:R6R7
;输出:R6R7 F0
;*************************************************************
FENLI:
MOV A,R6
MOV C,ACC.7
MOV F0,C ;符号位
JC FENLI1
SJMP FENLI2
FENLI1:MOV A,R6
CPL A
MOV R6,A
MOV A,R7
CPL A
CLR C
INC A
MOV R7,A
MOV A,R6
ADDC A,#00H
MOV R6,A
FENLI2:MOV 08H,R7
ANL 08H,#0FH ;小数部分
MOV R0,#12
FENLI3:MOV A,R6
RRC A
MOV R6,A
MOV A,R7
RRC A
MOV R7,A
MOV A,09H
RRC A
MOV 09H,A ;整数部分
DJNZ R0,FENLI3
MOV R6,09H ;整数部份
MOV R7,08H ;小数部分
RET
;***************************************
;作用:将R6R7中的二进制数化作BCD码的形式
;输入:R6 R7
;输出:R4R5R6 R7
;***************************************
BCD:
MOV A,R6 ;开始处理整数部分:
MOV B,#100
DIV AB
MOV R2,A ;存整数高位
MOV A,B
MOV B,#10
DIV AB
MOV R6,A ;存整数中位
MOV R7,B ;存整数低位
BCD1:RET
;*************************************************************************
;显示模块
;**************************************************************************
SSHOW: MOV DPTR,#TABLE ;循环显示模块
MOV R0, #07h
SSHOW1:MOV R1,#08H
MOV A,@R0
MOVC A,@A+DPTR
SSHOW2:RRC A
CLR P1.1
MOV P1.0, C
;LCALL YS
SETB P1.1
DJNZ R1,SSHOW2
DEC R0
CJNE R0,#03H,SSHOW1
RET
;*************************************************************************
; 温度比较模块
;**************************************************************************
BIJIAO: MOV 01H,R4
MOV A,R6
CJNE A,01H ,CHA1 ;不相等转移 R6<R4时C=1加热,r6>r4时C=0散热
MOV 02H,R5 ;测量的温度低位
MOV A,R7 ;测量的温度低位-预设的温度低位
CJNE A,02H ,CHA1 ;不相等转移
TING: CLR P2.5 ;温度相等时都不开
CLR P2.4
MOV P0,#0FH
LCALL HH ;跳转到扫秒程序
CHA1: JC JIAREN1 ;C=0 加热系统打开
MOV P0,#0FFH
SETB P2.5 ;散热系统打开
CLR P2.4
LCALL HH
JIAREN1:SETB P2.4 ;加热系统打开
CLR P2.5
MOV P0,#00H
HH: LCALL SAOMIAO
;*********************************************************
; 键盘扫描模块
;*********************************************************
SAOMIAO: CLR C
MOV C,P2.0 ;取存在P2.0的信号:
JC L1 ;C=1 跳转下个键盘再次扫描、
LCALL YS ;C=0有信号时 延时一段时间
MOV C,P2.0 ;键盘消抖再测一次;
JNC jia10 ;C==0 说明有信号
;调用加10子程序,没有信号就继续扫描其他键
展开阅读全文