配色: 字号:
基于单片机的恒温控制系统
2012-05-04 | 阅:  转:  |  分享 
  


基于单片机的恒温控制系统设计

摘要:本设计的测量及加热控制系统以单片机为核心部件,通过对系统软件和硬件设计的合理规划,发挥单片机自身集成众多系统级功能单元的优势,在不减少功能的前提下有效降低了硬件成本,系统操控简便。Abstract:ThedesignofthetemperaturemeasurementandheatingcontrolsystemstoAT89S52microcontrollercorecomponent,plusthetemperatureacquisitioncircuit,keyboardanddisplaycircuit,heatingcircutaltemperaturesensorDS18B20,andthedeterminantofthekeyboardanddynamicdisplayinordertoeasilycontrolthesolid-staterelaysforheatingcontroloftheswitchingdevice.Thisworksbothonthecurrenttemperatureinreal-timedisplayoftemperaturecanbecontrolledinordertoenableuserstoreachtherequiredtemperature,andmakeitconstantatthistemperature.HumanizeddesignkeyboarddeterminanttemperatureeasyExpress,thetwodecimalinteger,adisplayshowsahigheraccuracy.Setupinthefuzzycontroltheory,controlalgorithms,sothatthecontrolaccuracycanmeetthegeneralrequirementsofsocialproduction.Throughthesystemsoftwareandhardwaredesignofrationalplanning,exerttheirownsingle-chipintegrationofmanysystem-levelfunctionalunitoftheadvantages,doesnotreducethefunctionsatthepremiseofeffectivelyreducingthecostofhardware,thesystemeasytomanipulate.Keywords:microcontroller,temperaturecontrol,fuzzycontrol









1.引言

温度是工业生产中主要的被控参数之一,与之相关的各种温度控制系统广泛应用于冶金、化工、机械、食品等领域。



2.整体方案设计

本设计的测量及加热控制系统以单片机为核心部件,实验证明该温控系统具有很高的可靠性和稳定性。温度测量及加热系统控制的总体结构如图1所示。系统主要包括现场温度采集、实时温度显示、加热控制参数设置、加热电路控制输出、和系统核心

图1:方案一框图

温度采集电路以形式将现场温度传至单片机。单片机结合现场温度与用户设定的目标温度,按照已经编程固化的控制算法计算出实时控制量。以此控制量,决定加热电路的工作状态,使温逐步稳定于用户设定的目标值。系统运行过程中的各种状态参量均由数码管实时显示DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DQ为数字信号输入/输出端;GND为电源地;VDD为外接供电电源输入端S18B20中的温度传感器可完成对温度的测量,以12位转化为例:用16位符号扩展二进制补码读数形式提供,以0.0625℃/LSB形式表达,其中S为符号位

?这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。

3.2、键盘和显示的设计

键盘采用行列式和外部中断相结合的方法,图3中各按键的功能定义如下表1。其中设置键与单片机的脚相连,、YES、NO用四行三列接单片机P0口,REST键为硬件复位键,与R、C构成复位电路。模块电路如下图3:

表1:按键功能

按键 键名 功能 REST 复位键 使系统复位 RET 设置键 使系统产生中断,进入设置状态 数字键 设置用户需要的温度 YES 确认键 用户设定目标温度后进行确认 NO 清除键 用户设定温度错误或误按了YES键后使用



图3键盘接口电路

显示采用3位共阳LED动态显示方式,显示内容有温度值的十位、个位及小数点后一位。用P2口作为段控码输出,并用74HC244作驱动。P1.0—P1.2作为位控码输出,用PNP型三极管做驱动。模块电路如下图4:



图4显示接口电路



3.3加热控制电路的设计

用于在闭环控制系统中对被控对象实施控制,被控对象为电热杯,采用对加在电热杯两端的电压进行通断的方法进行控制,以实现对水加热功率的调整,从而达到对水温控制的目的。对电炉丝通断的控制采用SSR-40DA固态继电器。它的使用非常简单,只要在控制端TTL电平,即可实现对继电器的开关,使用时完全可以用NPN型三极管接成电压跟随器的形式驱动。当单片机的P1.3为高点平时,三极管驱动固态继电器工作接通加热器工作,当单片机的P1.3为低电平时固态继电器关断,加热器不工作。控制电路图如下图5:



图5加热控制电路



3.4报警及指示灯电路的设计

当用户设定的目标温度达到时需用声音的形式提醒用户,此时蜂鸣器为三声断续的滴答滴答的叫声。在本系统中我们为用户设计了越限报警,当温度低于用户设置的目标温度10度或高于10度时蜂鸣器为连续不断的滴答滴答叫声。当单片机P1.7输出高电平时,三极管导通,蜂鸣器工作发出报警声。P1.7为低电平时三极管关断,蜂鸣器不工作。D1为电热杯加热指示灯,P1.5低电平有效;D0为检测到DS18B20的指示,高电平有效;D10为降温指示灯,低电平有效。报警及指示灯电路如下图6示:



图6报警及指示灯电路



4软件系统的设计

系统的软件由三大模块组成:主程序模块、功能实现模块和运算控制模块。



4.1主程序模块

主程序主要完成加热控制系统各部件的初始化以及实际测量中各个功能模块的协调

图7主程序流程图



4.2功能实现模块

以用来执行对固态继电器及电热杯的控制。功能实现模块主要由中断处理子程序、温度比较处理子程序、键盘处理子程序、显示子程序、报警子程序等部分组成。键盘显示及中断程序流程图如下图8:



图8键盘、显示、中断子程序流程图



4.3运算控制模块



该模块由标度转换、模糊控制算法,及其中用到的乘法子程序。



4.3.1标度转换



式中A为二进制的温度值,为DS18B20的数字信号线送回来的温度数据。

单片机在处理标度转换时是通过把DS18B20的信号线送回的16位数据右移4位得到二进制的温度值。其小数部分通过查小数表的形式获取。程序流程图如下图9:



图9标度转换子程序流程图





4.3.2模糊控制算法子程序

由于无法确切确定电炉的物理模型,因而无法建立其数学模型和传递函数。加热器为一惯性系统,我们采用模糊控制的方法,通过多次温度测量模糊计算当用户设定目标温度时需提前关断加热器的温度,利用加热器自身的热惯性使温度上升到其设定温度。每隔5摄氏度我们进行一次温度测量,并当达到其温度时关断加热器记录下因加热器的热惯性而上升的温度值。从而可以建立热惯性的温度差值表,在程序中利用查表法,查出相应设定温度对应的关断温度。通过实验数据我们可以看出,当水温从0℃加热到50℃这段温度区域,其温度惯性曲线可近似成线性的直线,水温从50℃加热到100℃这段温度惯性曲线可近似成另一条线性的直线段。通过对设置的目标温度与温控系统监测温度进行差值处理就可近似的求出单片机的提前关断温度。程序流程图如图10:







图10模糊控制算法子程序流程图













5设计总结

我们的温度控制系统是基于AT89S52单片机的设计方案,她能实时显示当前温度,并能根据用户的要求作出相应的控制。此系统为闭环系统,工作稳定稳定性高,控制精度高,利用模糊控制算法使超调量大大降低。软件采用模块化结构,提高了通用性。本设计的目的不仅仅是温度控制本身,主要提供了单片机外围电路及软件包括控制算法设计的思想,应该说,这种思想比控制系统本身更为重要。



5.1设计所达到的性能指标

5.1.1温控系统的标度误差

我们将标准温度计和温控系统探头放人同一容器中,选定若干不同的温度点,记

录下标准温度计显示的温度和温控系统显示的温度进行比较。测量数据如下表2所示:

表2标准温度计测量的温度和温控系统显示的温度



标准温度计和温控系统显示的温度(℃) 标准温度计 16.9 47.7 57.8 63.0 72.8 85.1 90.9 温控系统 16.5 48.0 58.3 62.9 73.0 85.5 90.5 差值比较 -0.4 0.3 0.5 0.1 0.2 0.4 -0.4 标度误差 1.5%

5.1.2温控系统的静态误差

通过测量在不同的温度点同标准温度的温度差来确定温控系统的静态误差。其测量

数据如下表3:

表3标准温度和温控系统显示的温度

标准温度和温控系统显示的温度(℃) 标准温度 26.0 37.0 46.0 60.0 70.0 83.0 系统显示值 25.7 36.4 46.1 59.6 70.0 83.3 差值 -0.3 -0.6 -0.1 -0.4 0 0.3 静态误差 0.18℃

5.1.3温控系统的控制精度

通过设定不同的温度值,使加热器加热,待温度稳定时记录各温度点的温度计数据

和温控系统的显示值。其记录数据如下表4:

温度计读数和温控系统显示的温度(℃) 设定温度值 20.0 28.0 35.0 45.0 55.0 75.0 87.0 91.0 系统显示值 20.5 27.7 34.4 45.1 54.1 74.9 86.1 91.2 差值 0.5 -0.3 -0.6 0.1 -0.9 -0.1 -0.9 0.2 控制精度 0.45℃ 超调量 0.83%

5.2、结果分析论述

我们的系统完全满足设计要求,静态误差方面可以达到0.18℃的误差,在读数正确

方面与标准温度计的读数误差为1.5%,对一般的工业生产完全可以采用我们的设计。

该系统具有较小的超调值,超调值大约为0.83%左右。虽然超调为不利结果,但另一方面却减小了系统的调节时间。从其数据表可以看出该系统为稳定系统。



5.3设计方案评价

5.3.1优点

在硬件方面:本设计方案采用了单总线型数字式的温度传感器,提高了温度的采集

精度,节约了单片机的口线资源。方案还使用仅一跟口线就可控制的美国生产的固态继电器SSR—40DA作加热控制器件,使设计简单化,且可靠性强。在控制精度方面,本设计在不能确定执行机构的数学模型的情况下,大胆的假设小心的求证,利用模糊控制的算法来提高控制精度。

在软件方面:我们采用模块化编程,思路清晰,使程序简洁、可移植性强。

5.3.2缺点

本设计方案虽然采用了当前市场最先进的电子器件,使电路设计简单,但设计方案造价高。本系统虽然具有较小的超调量,但加大了调节时间。如果需要更高的控制精度,则我们的模糊控制将不适应,需修改程序。

5.3.3方案的改进

在不改变加热器容量的情况下,为减小调节时间,可以实行在加热快达到设定温度时开启风扇来减小热惯性对温度的影响的措施。在控制精度上可采用先进的数字PID控制算法,对加热时间进行控制,提高控制精度。可以改进控制系统使能同PC联机通信,以利用PC的图形处理功能打印显示温度曲线。AT89S52串行口为TTL电平,PC串行口为RS232电平,使用一片MAX232作为电平转换驱动。



6.参考文献

[1]李广弟单片机基础北京:北京航空航天大学出版社,2001

[2]王福瑞单片微机测控系统设计大全北京:北京航空航天大学出版社,1997

[3]赵茂泰智能仪器原理及应用(第2版)北京:电子工业出版社,2004

[4]赖寿涛微型计算机控制技术北京:机械工业出版社,2000

[5]沙占友模拟与数字万用表检测及应用技术北京:电子工业出版社1999







































7.附录

7.1附录[1]使用说明书





按键功能说明

数字键:按SET键后,按相应的数字键(0~9)可对温度进行设置,所设置的温

度将实时显示在LED显示器上;

SET键:按SET键可对温度的十位、个位以及小数部分进行设置;

YES键:设置好温度后按YES键,系统将据你所设置的温度(须大于当前实际

温度)对水进行加热;

NO键:若误按了SET键,或对输入有误,可按NO键进行取消;

RST键:对系统进行复位。

指示灯及报警器说明

红灯:加热状态标志;

绿灯:温度传感器正常工作标志;

蓝灯:保温状态标志;

报警器:功能①当水温达到预设值时报警提醒;

功能②当水温达到或超越上、下限时报警提示。

















7.2附录[2]设计总电路





















7.3附录[3]程序清单



TEMPER_LEQU29H;用于保存读出温度的低8位

TEMPER_HEQU28H;用于保存读出温度的高8位

FLAGEQU38H;是否检测到DS18B20标志位

DAYUEQU44H;设温>实温

XIYUEQU45H;设温<实温

DEYUEQU46H;设温=实温

GAOLEEQU47H;水温高于最高温度

DILEEQU48H;水温低于最低温度

A_bitEQU79h;数码管个位数存放内存位置

B_bitEQU7Ah;数码管十位数存放内存位置

C_BITEQU78H;数码管小数存放内存位置



ORG0000H

AJMPSTART

ORG0003H

AJMPPITO

ORG0030H

START:CLRP1.7

CLRP1.3

CLRP1.5

SETBP1.6

MOVR4,#00H

MOVSP,#60H;确立堆栈区

MOVPSW,#00H;

MOVR0,#20H;RAM区首地址

MOVR7,#60H;RAM区单元个数

ML:MOV@R0,#00H

INCR0

DJNZR7,ML

CLRIT0

MAIN:LCALLGET_TEMPER;调用读温度子程序进行温度显示,这里我们考

;虑用网站提供的两位数码管来显示温度

;显示范围00到99度,显示精度为1度

;因为12位转化时每一位的精度为0.0625度,

;我们不要求显示小数所以可以抛弃29H的低4

;位将28H中的低4位移入29H中的高4位,这

;样获得一个新字节,这个字节就是实际测量获

;得的温度

LCALLDISPLAY;调用数码管显示子程序

JNB00H,MAIN

CLR00H

MOVA,38H

CJNEA,#00H,SS

AJMPMAIN

SS:LCALLGET_TEMPER

LCALLDISPLAY;调用数码管显示子程序

LCALLBIJIAO

LCALLXIAOYU

LCALLJIXIAN

JNBDEYU,LOOP

CLRP1.3;关加热器

SETBP1.6;关蓝灯

SETBP0.7;关风扇

CLRDEYU

LCALLGET_TEMPER

LCALLDISPLAY

AJMPTT2

LOOP:JNBDAYU,TT

CLRDAYU

SETBP1.3

SETBP1.6

SETBP0.7

CLRP1.7

LCALLGET_TEMPER

LCALLDISPLAY

AJMPTT2

TT:JNBXIYU,TT2

CLRXIYU

CLRP0.7

CLRP1.6

CLRP1.3

CLRP1.7

LCALLGET_TEMPER

LCALLDISPLAY

TT2:MOVA,29H

CLRC

CJNEA,50H,JX

MOVA,30H

CLRC

CJNEA,51H,JIA1

AJMPYS2

JIA1:JCJX

MOVA,51H

MOV52H,A

ADDA,#2

MOV52H,A

CLRC

MOVA,30H

CJNEA,52H,JIA2

JIA2:JNCJX

YS2:SETBP1.7

CLRP1.6

MOVR5,#20H

YS:LCALLGET_TEMPER

LCALLDISPLAY

DJNZR5,YS

CLRP1.7

SETBP1.6

MOVR5,#20H

YS1:LCALLGET_TEMPER

LCALLDISPLAY

DJNZR5,YS1

YS3:SETBP1.7

CLRP1.6

MOVR5,#20H

YS0:LCALLGET_TEMPER

LCALLDISPLAY

DJNZR5,YS0

CLRP1.7

SETBP1.6

MOVR5,#20H

YS01:LCALLGET_TEMPER

LCALLDISPLAY

DJNZR5,YS01

YS4:SETBP1.7

CLRP1.6

MOVR5,#20H

YS02:LCALLGET_TEMPER

LCALLDISPLAY

DJNZR5,YS02

CLRP1.7

SETBP1.6

MOVR5,#20H

YS03:LCALLGET_TEMPER

LCALLDISPLAY

DJNZR5,YS03

JX:MOV A, 29H

CJNE A, 31H, JX00

JX01:SETB P1.7

CLR C

AJMP LAST

JX00:JCJX01

CLRP1.7

CJNE A, 32H, JX03

JX02:SETB P1.7

CLR C

AJMP LAST

JX03:JNC JX02

CLRP1.7

LAST:LCALLGET_TEMPER

LCALLDISPLAY

AJMPSS

;常数表格区

TAB:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H;0-8

DB90H,88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH;9,A,B,C,D,E,F,灭,p.

TAB1:DB40H,79H,24H,30H,19H,12H,02H,78H,00H,10H,;0.--9.

TAB2:DB0,0,1,2,3,3,4,4,5,5,6,7,8,8,9,9,;小数点

;1ms延时程序

;中断服务程序

;完成按键识别,键值求取,按键实时显示等功能;

;

PITO:PUSHACC

PUSHPSW

SETBRS0

CLRRS1

SETB 00H

MAIN1:MOVR7,#03H;显示位数为2位

MOVR0,#7AH

MOV78H,#00H

MOV79H,#00H

MOV7AH,#00H

KK:LCALLDIR

LCALLKEY1

LOOP1:CJNEA,#11,LOOP2

AJMPLAST0

LOOP2:CJNE A, #12, LOOP3

LJMP LAST3

LOOP3:CJNEA,#10,L4

MOV A, #00H

L4:MOV@R0,A

LCALL DIR

DECR0

DJNZ R7, KK

SETB01H

LAST0:JNB01H,KK

LOOP4:LCALLKEY1

CJNEA,#12,LOOP5

AJMPLAST3

LOOP5:CJNEA,#11,LOOP4

LAST1:LCALLDIR

LCALLMUN

LCALLJD

LCALL BIJIAO

LAST3:POPPSW

POPACC

RETI

;精度控制子程序

JD:PUSHACC

PUSHPSW

CLRC

MOVA,38H

MOV50H,A

MOVA,39H

MOV51H,A

CJNEA,29H,L001

L001:JCLAST02;设温<实温,则跳出

MOVA,29H

MOV41H,A

MOVA,38H

CJNEA,#25,L002

L003:CLRC;0
SUBBA,41H

CJNEA,#3,L004

L005:MOVA,30H

ADDA,#5;0
DAA

JNBACC.4,L0051

ANLA,#0FH

SETBC

L0051:MOV39H,A

MOVA,29H

ADDCA,#1

MOV38H,A

AJMPLAST2

LAST02:AJMPLAST2

L004:JCL005

MOVA,39H

SUBBA,#0

DAA

MOV39H,A

JNCL0041

DEC38H

L0041:MOVA,38H

SUBBA,#2;0
MOV38H,A

AJMPLAST2

L002:JCL003

CJNEA,#50,L006

L007:CLRC;25
SUBBA,41H

CJNEA,#3,L008

L009:MOVA,30H

ADDA,#1

DAA

JNBACC.4,L0091

ANLA,#0FH

SETBC

L0091:MOV39H,A

MOVA,29H

ADDCA,#1

MOV38H,A

AJMPLAST2

L008:JCL009

MOVA,39H

SUBBA,#0

MOV39H,A

MOVA,38H

SUBBA,#2

MOV38H,A

AJMPLAST2

L006:JCL007

CJNEA,#65,L010

L011:CLRC

SUBBA,41H

CJNEA,#3,L012

L013:MOVA,30H

ADDA,#2

JNBACC.4,L00131

ANLA,#0FH

SETBC

L00131:MOV39H,A

MOVA,29H

ADDCA,#1

MOV38H,A

AJMPLAST2

L012:JCL013

MOVA,39H

SUBBA,#0

MOV39H,A

MOVA,38H

SUBBA,#2

MOV38H,A

AJMPLAST2

L010:JCL011

CJNEA,#90,L016

L017:CLRC

SUBBA, 41H

CJNEA, #2,L014

L015:MOVA, 30H

ADDA, #0

JNBACC.4,L00151

ANL A, #0FH

SETB C

L00151:MOV39H,A

MOVA,29H

ADDCA,#1

MOV38H,A

AJMPLAST2

L014:JCL015

CLRC

MOVA,38H

SUBBA,#1

MOV38H,A

AJMPLAST2

L016:JCL017

LAST2:POPPSW

POPACC

RET

;键扫描

KEY1:LCALLKS1;键扫描

JNZLK1

LCALLDIR

AJMPKEY1

LK1:LCALLDIR

LCALLDIR

LCALLKS1

JNZLK2

LCALLDIR

AJMPKEY1

LK2:MOVR2,#0FEH;确定键值

MOVR4,#01H

MOVA,R2

LK4:MOVP0,A

NOP

MOVA,P0

JBACC.3,LONE

MOVA,#00H

AJMPLKP

LONE:JBACC.4,LTWO

MOVA,#03H

AJMPLKP

LTWO:JBACC.5,LTHR

MOVA,#06H

AJMPLKP

LTHR:JBACC.6,NEXT5

MOVA,#09H

AJMPLKP

NEXT5:INCR4

MOVA,R2

JNBACC.2,KND

RLA

MOVR2,A

AJMPLK4

KND:AJMPKEY1

LKP:ADDA,R4

PUSHACC

LK3:LCALLDIR

LCALLKS1

JNZLK3

POPACC

RET



KS1:PUSHPSW

MOVP0,#78H

NOP

MOVA,P0;判断有无键按下

CPLA

ANLA,#78H

POPPSW

RET

;求设置温度的二进制代码,值保存在38H单元

MUN:PUSHPSW

MOVR0,#7AH;求键值

MOVA,@R0

SWAPA

DECR0

ADDA,@R0

MOVR1,A

ANLA,#0F0H

SWAPA

MOVB,#10

MULAB

MOVR2,A

MOVA,R1

ANLA,#0FH

ADDA,R2

MOV38H,A

MOVR0,#78H

MOV39H,@R0

POPPSW

RET

;比较实际温度和设置温度的大小并设置相应的标志位

BIJIAO:MOVA,29H;实际温度

MOV40H,A

MOVA,38H ;设置温度

CLRC

CJNEA,40H,L1;设置温度>实际温度?

MOVA,39H

CJNEA,30H,L1

SETBDEYU

SJMPL2

L1:JCL2

SETBDAYU;设温>实温,

SJMPL2

L2:RET

;极限值求取子程序

;完成上下极限值的求取,并置相应的标志位

;

JIXIAN:PUSHACC

PUSH PSW

CLRC

MOVA,50H

SUBBA,#10

MOV31H,A

MOVA,50H

ADDA,#10

MOV32H,A

POP PSW

POPACC

RET

;DS18B20复位初始化子程序

INIT_1820:SETBP1.4

NOP

CLRP1.4;主机发出延时537微秒的复位低脉冲

MOVR1,#3

TSR1:MOVR0,#107

DJNZR0,$

DJNZR1,TSR1

SETBP1.4;然后拉高数据线

NOP

NOP

NOP

MOVR0,#25H

TSR2:JNBP1.4,TSR3;等待DS18B20回应

DJNZR0,TSR2

LJMPTSR4;延时

TSR3:SETBFLAG;置标志位,表示DS1820存在

SETBP1.5;检查到DS18B20就点亮P1.5LED

LJMPTSR5

TSR4:CLRFLAG;清标志位,表示DS1820不存在

CLRP1.5

LJMPTSR7

TSR5:MOVR0,#117

TSR6:DJNZR0,TSR6;时序要求延时一段时间

TSR7:SETBP1.4

RET

;读出转换后的温度值

GET_TEMPER:SETBP1.4

LCALLINIT_1820;先复位DS18B20

JBFLAG,TSS2

RET;判断DS1820是否存在?若DS18B20不存在则返回

TSS2:SETBP1.5;DS18B20已经被检测到

MOVA,#0CCH;跳过ROM匹配

LCALLWRITE_1820

MOVA,#44H;发出温度转换命令

LCALLWRITE_1820

LCALLDISPLAY;调用显示子程序实现延时一段时间,等待AD转换结束,12位750微秒

LCALLINIT_1820;准备读温度前先复位

MOVA,#0CCH;跳过ROM匹配

LCALLWRITE_1820

MOVA,#0BEH;发出读温度命令

LCALLWRITE_1820

LCALLREAD_18200;将读出的温度数据保存到35H/36H

SETBP1.5

RET

;写DS18B20的子程

WRITE_1820:MOVR2,#8;一共8位数据

CLRC

WR1:CLRP1.4

MOVR3,#6

DJNZR3,$

RRCA

MOVP1.4,C

MOVR3,#23

DJNZR3,$

SETBP1.4

NOP

DJNZR2,WR1

SETBP1.4

RET

;读DS18B20的程序,从DS18B20中读出两个字节的温度数据

READ_18200:MOVR4,#2;将温度高位和低位从DS18B20中读出

MOVR1,#29H;低位存入29H(TEMPER_L),高位存入28H(TEMPER_H)

RE00:MOVR2,#8;数据一共有8位

RE01:CLRC

SETBP1.4

NOP

NOP

CLRP1.4

NOP

NOP

NOP

SETBP1.4

MOVR3,#9

RE10:DJNZR3,RE10

MOVC,P1.4

MOVR3,#23

RE20:DJNZR3,RE20

RRCA

DJNZR2,RE01

MOV@R1,A

DECR1

DJNZR4,RE00

RET



;显示子程序

DISPLAY:MOVA,29H;将29H中的十六进制数转换成10进制

MOVB,#10;16进制/10=10进制

DIVAB

MOVB_bit,a;十位在a

MOVA_bit,b;个位在b

MOVC_BIT,30H

DIR:MOVDPTR,#TAB

MOVA,C_BIT

MOVCA,@A+DPTR

MOVP2,A

CLRP1.0

ACALLD1MS

SETBP1.0

MOVDPTR,#TAB1;指定查表启始地址

MOVA,A_BIT;取个位数

MOVCA,@A+DPTR;查个位数的7段代码

MOVP2,A;送出个位的7段代码

CLRP1.1;开个位显示

ACALLd1ms;显示1ms

SETBP1.1

MOVDPTR,#TAB

MOVA,B_BIT;取十位数

MOVCA,@A+DPTR;查十位数的7段代码

MOVP2,A;送出十位的7段代码

CLRP1.2;开十位显示

ACALLD1ms;显示1ms

SETBP1.2

RET

d1ms:PUSHPSW

SETBRS1

SETBRS0

MOV R7,#05H

DD1:MOV R6,#0FFH

DD2:DJNZ R6,DD2

DJNZ R7,DD1

POPPSW

RET















































-29-









献花(0)
+1
(本文系朽木轩首藏)