液晶显示温度控制器.docx
- 文档编号:10325162
- 上传时间:2023-02-10
- 格式:DOCX
- 页数:30
- 大小:30.59KB
液晶显示温度控制器.docx
《液晶显示温度控制器.docx》由会员分享,可在线阅读,更多相关《液晶显示温度控制器.docx(30页珍藏版)》请在冰豆网上搜索。
液晶显示温度控制器
功能说明:
本装置的功能是对温度进行实时监测与控制。
由温度传感器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,12
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 液晶显示 温度 控制器