整理液晶显示温度控制器Word文档下载推荐.docx
《整理液晶显示温度控制器Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《整理液晶显示温度控制器Word文档下载推荐.docx(25页珍藏版)》请在冰豆网上搜索。
显示"
OK"
菜单
ACALLRE_THL;
把EEROM里温度报警值拷贝回暂存器
ACALLTEMP_BJ;
显示温度标记"
C"
JMPTOOP2
TOOP1:
ACALLMEU_ERROR;
ERROR"
显示温度标记
JMP$
--------------------------
TOOP2:
ACALLRE_TEMP
ACALLSET_DATA
ACALLTEMP_COMP;
实际温度值与标记温度值比较子程序
ACALLP_KEY;
键扫描子程序
SJMPTOOP2
---------读取温度数据子程序---------
RE_TEMP:
18B20复位子程序
MOVA,#0CCH;
跳过ROM匹配
ACALLWRITE_1820;
写入子程序
MOVA,#44H;
发出温度转换命令
调写入子程序
调复位子程序
MOVA,#0BEH;
发出读温度命令
写入子程序
ACALLREAD_1820;
调用读入子程序
RET
--------温度数据处理显示子程序----------
SET_DATA:
ACALLCONV_TEMP;
处理温度BCD码子程序
ACALLDISP_BCD;
显示区BCD码温度值刷新子程序
ACALLCONV;
数据转换子程序
-----------按键键扫描子程序----------
P_KEY:
;
按键K1处理
JBK1,PK1;
K1键未按,转到PK1处
ACALLSPK_BZ;
K1键按下,一声鸣响
JNBK1,$;
等按键放开
MOVDPTR,#M_ALAX1;
存M_ALAX1表
MOVA,#1
ACALLLCD_PRINT;
显示字符
ACALLLOOK_ALARM;
显示信息区
JBK3,$;
等待K3按下
一声鸣响
JMPPK2;
转到标号PK2处
PK1:
按键K2处理
JBK2,PK3;
K2键未按,转到PK3处
K2键按下,一声鸣响
JNBK2,$;
等按键放开
MOVDPTR,#TA1;
存#TA1表
MOVA,#1
显示字符
ACALLSET_ALARM;
设定报警值TH、TL
将设定的TH,TL值写入DS18B20内
ACALLWRITE_E2;
PK2:
显示温度标记
PK3:
-----------------------------------
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值调整(增加)
INCTEMP_TH
MOVA,TEMP_TH
CJNEA,#120,A4
MOVTEMP_TH,#0
A4:
MOVR5,#10
ACALLDELAY
JMPA3
A5:
JBK3,A7;
TL值调整(增加)
INCTEMP_TL
MOVA,TEMP_TL
CJNEA,#99,A6
MOVTEMP_TL,#00H
A6:
JMPA5
A7:
JBK4,A0;
确定调整OK
JNBK4,$
A8:
JBK2,A10;
TH值调整(减少)
DECTEMP_TH
CJNEA,#0FFH,A9
JMPA12
A9:
JMPA0
A10:
JBK3,A13;
TL值调整(减少)
DECTEMP_TL
CJNEA,#0FFH,A11
A11:
A12:
CPL20H.1
A13:
JMPA7
----------显示信息区子程序-----------
LOOK_ALARM:
MOVDPTR,#M_ALAX2;
指针指到显示信息区
MOVA,#2;
显示在第二行
ACALLLCD_PRINT
MOVA,#0C6H
ACALLTEMP_BJ1
MOVA,TEMP_TH;
加载TH数据
MOVX,#3;
设置位置
ACALLSHOW_LINE2H;
显示数据
MOVA,#0CEH
MOVA,TEMP_TL;
加载TL数据
MOVX,#12;
ACALLSHOW_LINE2L;
-------------------------------
M_ALAX1:
LOOKALERTCODE"
0
M_ALAX2:
TH:
TL:
"
TEMP_BJ1:
ACALLWR_COMM
MOVDPTR,#BJ2;
MOVR1,#0
MOVR0,#2
B0:
MOVA,R1
MOVCA,@A+DPTR
ACALLWR_DATA
INCR1
DJNZR0,B0
BJ2:
DB00H,"
----------------------------------
SHOW_LINE2H:
在LCD的第二行显示数字
MOVB,#100
DIVAB
ADDA,#30H
PUSHB
MOVB,X
ACALLLCDP2
POPB
MOVA,#0AH
XCHA,B
INCX
MOVA,B
-----------------------------
SHOW_LINE2L:
CALLLCDP2
-----------温度值比较子程序------------
TEMP_COMP:
MOVA,TEMP_TH
SUBBA,TEMP_ZH;
减数>
被减数,则
JCTCL1;
借位标志位C=1,转
MOVA,TEMP_ZH
SUBBA,TEMP_TL;
JCTCL2;
MOVDPTR,#BJ5
ACALLTEMP_BJ3
CLRRELAY;
继电器吸合
TCL1:
MOVDPTR,#BJ3;
存入#BJ3表
ACALLTEMP_BJ3;
调用显示高、低温度及加热标记子程序
SETBRELAY;
继电器关闭
TCL2:
MOVDPTR,#BJ4;
存入#BJ4表
调用显示高、低温度及加标记子程序
调用鸣响子程序
---显示高、低温度及加热标记程序----
TEMP_BJ3:
BJJ:
DJNZR0,BJJ
BJ3:
>
H"
BJ4:
<
L"
BJ5:
!
"
---------报警上下线写入暂存器子程序----------
WR_THL:
JBFLAG,WR_T;
WR_T:
ACALLRESET_1820
LCALLWRITE_1820
MOVA,#4EH;
写暂存寄存器
TH(报警上限)
TL(报警下限)
MOVA,#7FH;
12位精确度
---------报警值拷贝到EEROM子程序-----------
WRITE_E2:
MOVA,#48H;
[48H]为拷贝到EEROM的指令代码
----------报警值拷贝回暂存器子程序----------
RE_THL:
MOVA,#0B8H;
把EEROM里的温度报警值拷贝回暂存器
ACALLWRITE_1820
----------处理温度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
MOVTEMPLC,A;
TEMPLCLOW=小数部分BCD
整数部分
ANLA,#0F0H;
取出高四位
取出低四位
ANLA,#0FH
ORLA,TEMPL;
重新组合
MOVTEMP_ZH,A
LCALLHEX2BCD1
ANLA,#0F0H
ORLA,TEMPHC;
TEMPHCLOW=十位数BCD
SWAPA;
TEMPLCHI=个位数BCD
ORLA,TEMPLC
MOVTEMPLC,A
MOVA,R4
JZTC3
MOVR4,A
MOVA,TEMPHC;
TEMPHCHI=百位数BCD
ORLA,R4
TC3:
HEX2BCD1:
MOVB,#064H;
十六进制->
BCD
DIVAB;
B=A%100
MOVR4,A;
R7=百位数
B=A%B
ORLA,B
-------------------------
小数部分码表
DOTTAB:
DB00H,00H,01H,01H,02H,03H,03H,04H
DB05H,05H,06H,06H,07H,08H,08H,09H
---------显示区BCD码温度值刷新子程序----------
显示区BCD码温度值刷新
DISP_BCD:
MOVA,TEMPLC
MOV70H,A;
小数位
MOV71H,A;
个位
MOV72H,A;
十位
MOV73H,A;
百位
CJNEA,#010H,DI0
SJMPDI2
DI0:
JNZDI2;
十位数是0
MOV73H,#0AH;
符号位不显示
十位数显示符号
DI2:
-------------------DS18B20复位初始化子程序----------------------
RESET_1820:
复位(有具体的时序要求)
SETBDQ
NOP
CLRDQ
――――――――――――
主机发出延时537微秒的复位低脉冲
MOVR1,#3
DLY:
MOVR0,#107
DJNZR0,$
DJNZR1,DLY
然后拉高数据线
――――――――――――
MOVR0,#25H
T2:
JNBDQ,T3;
等待DS18B20回应
DJNZR0,T2
JMPT4
T3:
SETBFLAG;
置标志位,表示DS1820存在
JMPT5
T4:
CLRFLAG;
清标志位,表示DS1820不存在
JMPT7
T5:
MOVR0,#117
T6:
DJNZR0,T6;
时序要求延时一段时间
T7:
RET;
复位子程序
-------------------写入DS18B20子程序-----------------------
WRITE_1820:
写入DS18B20(有具体的时序要求)
MOVR2,#8;
一共8位数据
WR1:
CLRDQ;
总线低位,开始写入
MOVR3,#6
DJNZR3,$;
保持16微秒以上
RRCA;
把字节DATA分成8个BIT环移给C
MOVDQ,C;
写入一个BIT
MOVR3,#23
等待
SETBDQ;
重新释放总线
DJNZR2,WR1;
写入下一个BIT
---------------------读出DS18B20子程序--------------------
READ_1820:
将温度低位、高位、TH、TL从DS18B20中读出
MOVR4,#4;
movr4,#4
MOVR1,#TEMPL;
存入25H、26H、27H、28H
RE0:
数据一共有8位
RE1:
NOP
读前总线保持为低
开始读总线释放
MOVR3,#9
延时18微妙
MOVC,DQ;
从总线读到一个BIT
MOVR3,#23;
等待50微秒
把读得的位价值环移给A
DJNZR2,RE1;
读下一个BIT
MOV@R1,A
INCR1;
R1内数据递增
DJNZR4,RE0
读出子程序
===================LCD1602显示程序======================
初始化设置
SET_LCD:
对LCD做初始化设置及测试
CLRE
CALLINIT_LCD;
初始化LCD
CALLSTORE_DATA;
将自定义字符存入LCD的CGRAM
-----------LCD初始化子程序-----------
INIT_LCD:
8位I/O控制LCD接口初始化
MOVA,#38H
CALLWR_COMM
calldelay1
MOVA,#0CH;
开显示,显示光标,光标不闪烁
MOVA,#01H;
清除LCD显示屏
-----------显示温度标记子程序------------
显示温度标记子程序
TEMP_BJ:
MOVA,#0CBH
MOVDPTR,#BJ;
指针指到显示消息
MOVR1,#0
MOVR0,#2
TP1:
DJNZR0,TP1
BJ:
-----------自定义字符子程序------------
将自定义字符写入LCD1602的CGRAM中
STORE_DATA:
MOVA,#40H
MOVR2,#08H
MOVDPTR,#D_DATA
MOVR3,#00H
S_DATA:
MOVA,R3
ACALLWR_DATA;
写入数据
INCR3
DJNZR2,S_DATA
---------------------------
D_DATA:
DB0CH,12H,