整理液晶显示温度控制器.docx

上传人:b****6 文档编号:3795834 上传时间:2022-11-25 格式:DOCX 页数:25 大小:31.79KB
下载 相关 举报
整理液晶显示温度控制器.docx_第1页
第1页 / 共25页
整理液晶显示温度控制器.docx_第2页
第2页 / 共25页
整理液晶显示温度控制器.docx_第3页
第3页 / 共25页
整理液晶显示温度控制器.docx_第4页
第4页 / 共25页
整理液晶显示温度控制器.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

整理液晶显示温度控制器.docx

《整理液晶显示温度控制器.docx》由会员分享,可在线阅读,更多相关《整理液晶显示温度控制器.docx(25页珍藏版)》请在冰豆网上搜索。

整理液晶显示温度控制器.docx

整理液晶显示温度控制器

功能说明:

本装置的功能是对温度进行实时监测与控制。

由温度传感器DS18B20对温度进行采样和转换成数字信号送入单片机,并与设定的报警温度上、下限值进行比较,信息通过LCD显示出来。

如实时温度超过设定的上、下限值,一方面由LCD显示信息,并发出警报声;另一方面自动控制继电器(Relay)开接通或断开,从而控制加热源的开与断,达到对温度进行实时控制的目的。

;

程序清单:

;--------------------------------

TEMP_ZHEQU24H;实时温度值存放单元

TEMPLEQU25H;低温度值存放单元

TEMPHEQU26H;高温度值存放单元

TEMP_THEQU27H;高温报警值存放单元

TEMP_TLEQU28H;低温报警值存放单元

TEMPHCEQU29H;存十位数BCD码

TEMPLCEQU2AH;存个位数BCD码

;--------------------------------

K1EQUP2.1

K2EQUP2.2

K3EQUP2.3

K4EQUP2.4

;--------------------------------

SPKEQUP3.4

RELAYEQUP2.0

XEQU2FH;LCD地址变量

;--------------------------------

RSEQUP3.5

RWEQUP3.6

EEQUP3.7

;--------------------------------

FLAGEQU20H.0;DS18B20是否存在标记

KEY_UDEQU20H.1;设定KEY的UP与DOWN标记

DQEQUP2.5

;========================主程序==========================

MAIN:

ACALLSET_LCD;LCD初始化设置子程序

ACALLWR_THL;将报警上下线写入暂存寄存器

TOOP:

ACALLRESET_1820;18B20复位子程序

JNBFLAG,TOOP1;DS1820不存在

ACALLMEU_OK;显示"OK"菜单

ACALLRE_THL;把EEROM里温度报警值拷贝回暂存器

ACALLTEMP_BJ;显示温度标记"C"

JMPTOOP2

TOOP1:

ACALLMEU_ERROR;显示"ERROR"菜单

ACALLTEMP_BJ;显示温度标记

JMP$

;--------------------------

TOOP2:

ACALLRE_TEMP

ACALLSET_DATA

ACALLTEMP_COMP;实际温度值与标记温度值比较子程序

ACALLP_KEY;键扫描子程序

SJMPTOOP2

;---------读取温度数据子程序---------

RE_TEMP:

ACALLRESET_1820;18B20复位子程序

JNBFLAG,TOOP1;DS1820不存在

MOVA,#0CCH;跳过ROM匹配

ACALLWRITE_1820;写入子程序

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

ACALLWRITE_1820;调写入子程序

ACALLRESET_1820;调复位子程序

MOVA,#0CCH;跳过ROM匹配

ACALLWRITE_1820;写入子程序

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

ACALLWRITE_1820;写入子程序

ACALLREAD_1820;调用读入子程序

RET

;--------温度数据处理显示子程序----------

SET_DATA:

ACALLCONV_TEMP;处理温度BCD码子程序

ACALLDISP_BCD;显示区BCD码温度值刷新子程序

ACALLCONV;数据转换子程序

RET

;-----------按键键扫描子程序----------

P_KEY:

;按键K1处理

JBK1,PK1;K1键未按,转到PK1处

ACALLSPK_BZ;K1键按下,一声鸣响

JNBK1,$;等按键放开

MOVDPTR,#M_ALAX1;存M_ALAX1表

MOVA,#1

ACALLLCD_PRINT;显示字符

ACALLLOOK_ALARM;显示信息区

JBK3,$;等待K3按下

ACALLSPK_BZ;一声鸣响

JMPPK2;转到标号PK2处

PK1:

;按键K2处理

JBK2,PK3;K2键未按,转到PK3处

ACALLSPK_BZ;K2键按下,一声鸣响

JNBK2,$;等按键放开

MOVDPTR,#TA1;存#TA1表

MOVA,#1

ACALLLCD_PRINT;显示字符

ACALLSET_ALARM;设定报警值TH、TL

ACALLWR_THL;将设定的TH,TL值写入DS18B20内

ACALLWRITE_E2;

PK2:

ACALLMEU_OK;显示"OK"菜单

ACALLTEMP_BJ;显示温度标记

PK3:

RET

;-----------------------------------

TA1:

DB"RESETALERTCODE"

;-----------------------------------

;----------设定报警值TH、TL子程序---------

;设定报警值TH、TL

SET_ALARM:

ACALLLOOK_ALARM

A0:

JBK1,A2

ACALLSPK_BZ

JNBK1,$

CPL20H.1;UP/DOWN标记

A2:

JB20H.1,A3;20H.1=1,UP

JMPA8;20H.1=0,DOWN

A3:

JBK2,A5;TH值调整(增加)

ACALLSPK_BZ

INCTEMP_TH

MOVA,TEMP_TH

CJNEA,#120,A4

MOVTEMP_TH,#0

A4:

ACALLLOOK_ALARM

MOVR5,#10

ACALLDELAY

JMPA3

A5:

JBK3,A7;TL值调整(增加)

ACALLSPK_BZ

INCTEMP_TL

MOVA,TEMP_TL

CJNEA,#99,A6

MOVTEMP_TL,#00H

A6:

ACALLLOOK_ALARM;

MOVR5,#10

ACALLDELAY

JMPA5

A7:

JBK4,A0;确定调整OK

ACALLSPK_BZ

JNBK4,$

RET

A8:

JBK2,A10;TH值调整(减少)

ACALLSPK_BZ

DECTEMP_TH

MOVA,TEMP_TH

CJNEA,#0FFH,A9

JMPA12

A9:

ACALLLOOK_ALARM

MOVR5,#10

ACALLDELAY

JMPA0

A10:

JBK3,A13;TL值调整(减少)

ACALLSPK_BZ

DECTEMP_TL

MOVA,TEMP_TL

CJNEA,#0FFH,A11

JMPA12

A11:

ACALLLOOK_ALARM;

MOVR5,#10

ACALLDELAY

JMPA0

A12:

CPL20H.1

JMPA3

A13:

JMPA7

RET

;----------显示信息区子程序-----------

LOOK_ALARM:

MOVDPTR,#M_ALAX2;指针指到显示信息区

MOVA,#2;显示在第二行

ACALLLCD_PRINT

MOVA,#0C6H

ACALLTEMP_BJ1

MOVA,TEMP_TH;加载TH数据

MOVX,#3;设置位置

ACALLSHOW_LINE2H;显示数据

MOVA,#0CEH

ACALLTEMP_BJ1

MOVA,TEMP_TL;加载TL数据

MOVX,#12;设置位置

ACALLSHOW_LINE2L;显示数据

RET

;-------------------------------

M_ALAX1:

DB"LOOKALERTCODE",0

M_ALAX2:

DB"TH:

TL:

",0

;-------------------------------

TEMP_BJ1:

ACALLWR_COMM

MOVDPTR,#BJ2;指针指到显示信息区

MOVR1,#0

MOVR0,#2

B0:

MOVA,R1

MOVCA,@A+DPTR

ACALLWR_DATA

INCR1

DJNZR0,B0

RET

BJ2:

DB00H,"C"

;----------------------------------

SHOW_LINE2H:

;在LCD的第二行显示数字

MOVB,#100

DIVAB

ADDA,#30H

PUSHB

MOVB,X

ACALLLCDP2

POPB

MOVA,#0AH

XCHA,B

DIVAB

ADDA,#30H

INCX

PUSHB

MOVB,X

ACALLLCDP2

POPB

INCX

MOVA,B

MOVB,X

ADDA,#30H

ACALLLCDP2

RET

;-----------------------------

SHOW_LINE2L:

;在LCD的第二行显示数字

MOVB,#100

DIVAB

MOVA,#0AH

XCHA,B

DIVAB

ADDA,#30H

PUSHB

MOVB,X

CALLLCDP2

POPB

INCX

MOVA,B

MOVB,X

ADDA,#30H

ACALLLCDP2

RET

;--------------------------------

;-----------温度值比较子程序------------

;实际温度值与标记温度值比较子程序

TEMP_COMP:

MOVA,TEMP_TH

SUBBA,TEMP_ZH;减数>被减数,则

JCTCL1;借位标志位C=1,转

MOVA,TEMP_ZH

SUBBA,TEMP_TL;减数>被减数,则

JCTCL2;借位标志位C=1,转

MOVDPTR,#BJ5

ACALLTEMP_BJ3

CLRRELAY;继电器吸合

RET

TCL1:

MOVDPTR,#BJ3;存入#BJ3表

ACALLTEMP_BJ3;调用显示高、低温度及加热标记子程序

SETBRELAY;继电器关闭

ACALLSPK_BZ

RET

TCL2:

MOVDPTR,#BJ4;存入#BJ4表

ACALLTEMP_BJ3;调用显示高、低温度及加标记子程序

ACALLSPK_BZ;调用鸣响子程序

RET

;---显示高、低温度及加热标记程序----

TEMP_BJ3:

MOVA,#0CEH

ACALLWR_COMM

MOVR1,#0

MOVR0,#2

BJJ:

MOVA,R1

MOVCA,@A+DPTR

ACALLWR_DATA

INCR1

DJNZR0,BJJ

RET

BJ3:

DB">H"

BJ4:

DB"

BJ5:

DB"!

"

;---------报警上下线写入暂存器子程序----------

WR_THL:

JBFLAG,WR_T;

RET

WR_T:

ACALLRESET_1820

MOVA,#0CCH;跳过ROM匹配

LCALLWRITE_1820

MOVA,#4EH;写暂存寄存器

LCALLWRITE_1820

MOVA,TEMP_TH;TH(报警上限)

LCALLWRITE_1820

MOVA,TEMP_TL;TL(报警下限)

LCALLWRITE_1820

MOVA,#7FH;12位精确度

LCALLWRITE_1820

RET

;---------报警值拷贝到EEROM子程序-----------

WRITE_E2:

ACALLRESET_1820

MOVA,#0CCH;跳过ROM匹配

LCALLWRITE_1820

MOVA,#48H;[48H]为拷贝到EEROM的指令代码

LCALLWRITE_1820

RET

;----------报警值拷贝回暂存器子程序----------

RE_THL:

ACALLRESET_1820

MOVA,#0CCH;跳过ROM匹配

LCALLWRITE_1820

MOVA,#0B8H;把EEROM里的温度报警值拷贝回暂存器

ACALLWRITE_1820

RET

;----------处理温度BCD码子程序-----------

;处理温度BCD码子程序

CONV_TEMP:

MOVA,TEMPH;判温度是否零下

ANLA,#80H

JZTC1;温度零上转

CLRC

MOVA,TEMPL;二进制数求补(双字节)

CPLA;取反加1

ADDA,#01H

MOVTEMPL,A

MOVA,TEMPH

CPLA

ADDCA,#00H

MOVTEMPH,A

SJMPTC2

TC1:

MOVTEMPHC,#0AH

TC2:

MOVA,TEMPHC

SWAPA

MOVTEMPHC,A

MOVA,TEMPL

ANLA,#0FH;乘0.0625

MOVDPTR,#DOTTAB

MOVCA,@A+DPTR

MOVTEMPLC,A;TEMPLCLOW=小数部分BCD

MOVA,TEMPL;整数部分

ANLA,#0F0H;取出高四位

SWAPA

MOVTEMPL,A

MOVA,TEMPH;取出低四位

ANLA,#0FH

SWAPA

ORLA,TEMPL;重新组合

MOVTEMP_ZH,A

LCALLHEX2BCD1

MOVTEMPL,A

ANLA,#0F0H

SWAPA

ORLA,TEMPHC;TEMPHCLOW=十位数BCD

MOVTEMPHC,A

MOVA,TEMPL

ANLA,#0FH

SWAPA;TEMPLCHI=个位数BCD

ORLA,TEMPLC

MOVTEMPLC,A

MOVA,R4

JZTC3

ANLA,#0FH

SWAPA

MOVR4,A

MOVA,TEMPHC;TEMPHCHI=百位数BCD

ANLA,#0FH

ORLA,R4

MOVTEMPHC,A

TC3:

RET

;--------------------------

HEX2BCD1:

MOVB,#064H;十六进制->BCD

DIVAB;B=A%100

MOVR4,A;R7=百位数

MOVA,#0AH

XCHA,B

DIVAB;B=A%B

SWAPA

ORLA,B

RET

;-------------------------

;小数部分码表

DOTTAB:

DB00H,00H,01H,01H,02H,03H,03H,04H

DB05H,05H,06H,06H,07H,08H,08H,09H

;-------------------------

;---------显示区BCD码温度值刷新子程序----------

;显示区BCD码温度值刷新

DISP_BCD:

MOVA,TEMPLC

ANLA,#0FH

MOV70H,A;小数位

MOVA,TEMPLC

SWAPA

ANLA,#0FH

MOV71H,A;个位

MOVA,TEMPHC

ANLA,#0FH

MOV72H,A;十位

MOVA,TEMPHC

SWAPA

ANLA,#0FH

MOV73H,A;百位

MOVA,TEMPHC

ANLA,#0F0H

CJNEA,#010H,DI0

SJMPDI2

DI0:

MOVA,TEMPHC

ANLA,#0FH

JNZDI2;十位数是0

MOVA,TEMPHC

SWAPA

ANLA,#0FH

MOV73H,#0AH;符号位不显示

MOV72H,A;十位数显示符号

DI2:

RET

;-------------------DS18B20复位初始化子程序----------------------

RESET_1820:

;复位(有具体的时序要求)

SETBDQ

NOP

CLRDQ

;――――――――――――

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

MOVR1,#3

DLY:

MOVR0,#107

DJNZR0,$

DJNZR1,DLY

;――――――――――――

;然后拉高数据线

SETBDQ

NOP

NOP

NOP

;――――――――――――

MOVR0,#25H

T2:

JNBDQ,T3;等待DS18B20回应

DJNZR0,T2

JMPT4

;――――――――――――

T3:

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

JMPT5

;――――――――――――

T4:

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

JMPT7

;――――――――――――

T5:

MOVR0,#117

T6:

DJNZR0,T6;时序要求延时一段时间

;――――――――――――

T7:

SETBDQ

RET;复位子程序

;-------------------写入DS18B20子程序-----------------------

WRITE_1820:

;写入DS18B20(有具体的时序要求)

MOVR2,#8;一共8位数据

CLRC

WR1:

CLRDQ;总线低位,开始写入

MOVR3,#6

DJNZR3,$;保持16微秒以上

RRCA;把字节DATA分成8个BIT环移给C

MOVDQ,C;写入一个BIT

MOVR3,#23

DJNZR3,$;等待

SETBDQ;重新释放总线

NOP

DJNZR2,WR1;写入下一个BIT

SETBDQ

RET;写入子程序

;---------------------读出DS18B20子程序--------------------

READ_1820:

;;将温度低位、高位、TH、TL从DS18B20中读出

MOVR4,#4;movr4,#4

MOVR1,#TEMPL;存入25H、26H、27H、28H

RE0:

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

RE1:

CLRC

SETBDQ

NOP

NOP

CLRDQ;读前总线保持为低

NOP

NOP

NOP

SETBDQ;开始读总线释放

MOVR3,#9

DJNZR3,$;延时18微妙

MOVC,DQ;从总线读到一个BIT

MOVR3,#23;

DJNZR3,$;等待50微秒

RRCA;把读得的位价值环移给A

DJNZR2,RE1;读下一个BIT

MOV@R1,A

INCR1;R1内数据递增

DJNZR4,RE0

RET;读出子程序

;===================LCD1602显示程序======================

;初始化设置

SET_LCD:

;对LCD做初始化设置及测试

CLRE

CALLINIT_LCD;初始化LCD

CALLSTORE_DATA;将自定义字符存入LCD的CGRAM

RET

;-----------LCD初始化子程序-----------

INIT_LCD:

;8位I/O控制LCD接口初始化

MOVA,#38H

CALLWR_COMM

calldelay1

MOVA,#0CH;开显示,显示光标,光标不闪烁

CALLWR_COMM

calldelay1

MOVA,#01H;清除LCD显示屏

CALLWR_COMM

calldelay1

RET

;-----------显示温度标记子程序------------

;显示温度标记子程序

TEMP_BJ:

MOVA,#0CBH

ACALLWR_COMM

MOVDPTR,#BJ;指针指到显示消息

MOVR1,#0

MOVR0,#2

TP1:

MOVA,R1

MOVCA,@A+DPTR

ACALLWR_DATA

INCR1

DJNZR0,TP1

RET

BJ:

DB00H,"C"

;-----------自定义字符子程序------------

;将自定义字符写入LCD1602的CGRAM中

STORE_DATA:

MOVA,#40H

ACALLWR_COMM

MOVR2,#08H

MOVDPTR,#D_DATA

MOVR3,#00H

S_DATA:

MOVA,R3

MOVCA,@A+DPTR

ACALLWR_DATA;写入数据

INCR3

DJNZR2,S_DATA

RET

;---------------------------

D_DATA:

DB0CH,12H,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1