📄 lcd2402.lst
字号:
A51 MACRO ASSEMBLER LCD2402 01/05/2007 14:57:13 PAGE 1
MACRO ASSEMBLER A51 V7.07
OBJECT MODULE PLACED IN LCD2402.OBJ
ASSEMBLER INVOKED BY: C:\Keil 7.06\C51\BIN\A51.EXE LCD2402.ASM SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1 ;--------------------------------
2 ;文件名称:LCD2402.ASM
3 ;程序功能:温度控制器
4 ;--------------------------------
0024 5 TEMP_ZH EQU 24H ;实时温度值存放单元
0025 6 TEMPL EQU 25H ;低温度值存放单元
0026 7 TEMPH EQU 26H ;高温度值存放单元
0027 8 TEMP_TH EQU 27H ;高温报警值存放单元
0028 9 TEMP_TL EQU 28H ;低温报警值存放单元
0029 10 TEMPHC EQU 29H ;存十位数 BCD码
002A 11 TEMPLC EQU 2AH ;存个位数 BCD码
12 ;--------------------------------
00A1 13 K1 EQU P2.1
00A2 14 K2 EQU P2.2
00A3 15 K3 EQU P2.3
00A4 16 K4 EQU P2.4
17 ;--------------------------------
00B4 18 SPK EQU P3.4
00A0 19 RELAY EQU P2.0
002F 20 X EQU 2FH ;LCD 地址变量
21 ;--------------------------------
00B5 22 RS EQU P3.5
00B6 23 RW EQU P3.6
00B7 24 E EQU P3.7
25 ;--------------------------------
0000 26 FLAG EQU 20H.0 ;DS18B20是否存在标记
0001 27 KEY_UD EQU 20H.1 ;设定 KEY 的UP与DOWN 标记
00A5 28 DQ EQU P2.5
29
30 ;======================== 主程序 ==========================
31
0000 32 MAIN:
0000 7129 33 ACALL SET_LCD ;LCD初始化设置子程序
0002 31DB 34 ACALL WR_THL ;将报警上下线写入暂存寄存器
35
0004 51C3 36 TOOP: ACALL RESET_1820 ;18B20复位子程序
0006 300008 37 JNB FLAG,TOOP1 ;DS1820不存在
0009 7173 38 ACALL MEU_OK ;显示"OK"菜单
000B 5108 39 ACALL RE_THL ;把EEROM里温度报警值拷贝回暂存器
000D 7143 40 ACALL TEMP_BJ ;显示温度标记"C"
000F 8006 41 JMP TOOP2
0011 71A4 42 TOOP1: ACALL MEU_ERROR ;显示"ERROR"菜单
0013 7143 43 ACALL TEMP_BJ ;显示温度标记
0015 80FE 44 JMP $
45 ;--------------------------
0017 46 TOOP2:
0017 1121 47 ACALL RE_TEMP
0019 113B 48 ACALL SET_DATA
001B 319F 49 ACALL TEMP_COMP ;实际温度值与标记温度值比较子程序
001D 1142 50 ACALL P_KEY ;键扫描子程序
001F 80F6 51 SJMP TOOP2
52
53 ;--------- 读取温度数据子程序 ---------
54
0021 55 RE_TEMP:
0021 51C3 56 ACALL RESET_1820 ;18B20复位子程序
0023 3000EB 57 JNB FLAG,TOOP1 ;DS1820不存在
0026 74CC 58 MOV A,#0CCH ;跳过ROM匹配
A51 MACRO ASSEMBLER LCD2402 01/05/2007 14:57:13 PAGE 2
0028 51ED 59 ACALL WRITE_1820 ;写入子程序
002A 7444 60 MOV A,#44H ;发出温度转换命令
002C 51ED 61 ACALL WRITE_1820 ;调写入子程序
002E 51C3 62 ACALL RESET_1820 ;调复位子程序
0030 74CC 63 MOV A,#0CCH ;跳过ROM匹配
0032 51ED 64 ACALL WRITE_1820 ;写入子程序
0034 74BE 65 MOV A,#0BEH ;发出读温度命令
0036 51ED 66 ACALL WRITE_1820 ;写入子程序
0038 7105 67 ACALL READ_1820 ;调用读入子程序
003A 22 68 RET
69
70 ;-------- 温度数据处理显示子程序----------
71
003B 72 SET_DATA:
003B 5114 73 ACALL CONV_TEMP ;处理温度 BCD 码子程序
003D 518F 74 ACALL DISP_BCD ;显示区 BCD 码温度值刷新子程序
003F 71F2 75 ACALL CONV ;数据转换子程序
0041 22 76 RET
77
78 ;----------- 按键键扫描子程序 ----------
79
0042 80 P_KEY: ;按键K1处理
0042 20A115 81 JB K1,PK1 ; K1键未按,转到PK1处
0045 916A 82 ACALL SPK_BZ ;K1键按下,一声鸣响
0047 30A1FD 83 JNB K1,$ ;等按键放开
004A 90011D 84 MOV DPTR,#M_ALAX1 ;存M_ALAX1表
004D 7401 85 MOV A,#1
004F 71D5 86 ACALL LCD_PRINT ;显示字符
0051 11FF 87 ACALL LOOK_ALARM ;显示信息区
0053 20A3FD 88 JB K3,$ ;等待K3按下
0056 916A 89 ACALL SPK_BZ ;一声鸣响
0058 8015 90 JMP PK2 ;转到标号 PK2处
005A 91 PK1: ; 按键K2处理
005A 20A216 92 JB K2,PK3 ;K2键未按,转到PK3处
005D 916A 93 ACALL SPK_BZ ;K2键按下,一声鸣响
005F 30A2FD 94 JNB K2,$ ;等按键放开
0062 900074 95 MOV DPTR,#TA1 ;存#TA1表
0065 7401 96 MOV A,#1
0067 71D5 97 ACALL LCD_PRINT ;显示字符
0069 1184 98 ACALL SET_ALARM ;设定报警值 TH、TL
006B 31DB 99 ACALL WR_THL ;将设定的TH,TL值写入DS18B20内
006D 31FB 100 ACALL WRITE_E2 ;
006F 101 PK2:
006F 7173 102 ACALL MEU_OK ;显示"OK"菜单
0071 7143 103 ACALL TEMP_BJ ;显示温度标记
0073 104 PK3:
0073 22 105 RET
106 ;-----------------------------------
0074 107 TA1:
0074 52455345 108 DB "RESET ALERT CODE"
0078 5420414C
007C 45525420
0080 434F4445
109 ;-----------------------------------
110
111 ;---------- 设定报警值 TH、TL子程序 ---------
112
113 ;设定报警值 TH、TL
0084 114 SET_ALARM:
0084 11FF 115 ACALL LOOK_ALARM
0086 116 A0:
0086 20A107 117 JB K1,A2
0089 916A 118 ACALL SPK_BZ
008B 30A1FD 119 JNB K1,$
008E B201 120 CPL 20H.1 ;UP/DOWN 标记
0090 200102 121 A2: JB 20H.1,A3 ;20H.1=1,UP
A51 MACRO ASSEMBLER LCD2402 01/05/2007 14:57:13 PAGE 3
0093 8037 122 JMP A8 ;20H.1=0,DOWN
123
0095 20A214 124 A3: JB K2,A5 ;TH值调整(增加)
0098 916A 125 ACALL SPK_BZ
009A 0527 126 INC TEMP_TH
009C E527 127 MOV A,TEMP_TH
009E B47803 128 CJNE A,#120,A4
00A1 752700 129 MOV TEMP_TH,#0
00A4 11FF 130 A4: ACALL LOOK_ALARM
00A6 7D0A 131 MOV R5,#10
00A8 917D 132 ACALL DELAY
00AA 80E9 133 JMP A3
134
00AC 20A314 135 A5: JB K3,A7 ;TL值调整(增加)
00AF 916A 136 ACALL SPK_BZ
00B1 0528 137 INC TEMP_TL
00B3 E528 138 MOV A,TEMP_TL
00B5 B46303 139 CJNE A,#99,A6
00B8 752800 140 MOV TEMP_TL,#00H
00BB 11FF 141 A6: ACALL LOOK_ALARM ;
00BD 7D0A 142 MOV R5,#10
00BF 917D 143 ACALL DELAY
00C1 80E9 144 JMP A5
00C3 20A4C0 145 A7: JB K4,A0 ;确定调整 OK
00C6 916A 146 ACALL SPK_BZ
00C8 30A4FD 147 JNB K4,$
00CB 22 148 RET
149
00CC 150 A8:
00CC 20A213 151 JB K2,A10 ;TH值调整 (减少)
00CF 916A 152 ACALL SPK_BZ
00D1 1527 153 DEC TEMP_TH
00D3 E527 154 MOV A,TEMP_TH
00D5 B4FF02 155 CJNE A,#0FFH,A9
00D8 801E 156 JMP A12
00DA 11FF 157 A9: ACALL LOOK_ALARM
00DC 7D0A 158 MOV R5,#10
00DE 917D 159 ACALL DELAY
00E0 80A4 160 JMP A0
161
00E2 20A317 162 A10: JB K3,A13 ;TL值调整(减少)
00E5 916A 163 ACALL SPK_BZ
00E7 1528 164 DEC TEMP_TL
00E9 E528 165 MOV A,TEMP_TL
00EB B4FF02 166 CJNE A,#0FFH,A11
00EE 8008 167 JMP A12
00F0 11FF 168 A11: ACALL LOOK_ALARM ;
00F2 7D0A 169 MOV R5,#10
00F4 917D 170 ACALL DELAY
00F6 808E 171 JMP A0
00F8 B201 172 A12: CPL 20H.1
00FA 8099 173 JMP A3
00FC 80C5 174 A13: JMP A7
00FE 22 175 RET
176
177 ;---------- 显示信息区子程序 -----------
178
00FF 179 LOOK_ALARM:
180
00FF 90012E 181 MOV DPTR,#M_ALAX2 ;指针指到显示信息区
0102 7402 182 MOV A,#2 ;显示在第二行
0104 71D5 183 ACALL LCD_PRINT
184
0106 74C6 185 MOV A,#0C6H
0108 313F 186 ACALL TEMP_BJ1
010A E527 187 MOV A,TEMP_TH ;加载TH数据
A51 MACRO ASSEMBLER LCD2402 01/05/2007 14:57:13 PAGE 4
010C 752F03 188 MOV X,#3 ;设置位置
010F 3152 189 ACALL SHOW_LINE2H ;显示数据
190
0111 74CE 191 MOV A,#0CEH
0113 313F 192 ACALL TEMP_BJ1
0115 E528 193 MOV A,TEMP_TL ;加载TL数据
0117 752F0C 194 MOV X,#12 ;设置位置
011A 317F 195 ACALL SHOW_LINE2L ;显示数据
011C 22 196 RET
197 ;-------------------------------
011D 198 M_ALAX1:
011D 204C4F4F 199 DB " LOOK ALERT CODE",0
0121 4B20414C
0125 45525420
0129 434F4445
012D 00
012E 200 M_ALAX2:
012E 54483A20 201 DB "TH: TL: ",0
0132 20202020
0136 20544C3A
013A 20202020
013E 00
202 ;-------------------------------
013F 203 TEMP_BJ1:
013F 9138 204 ACALL WR_COMM
0141 900150 205 MOV DPTR,#BJ2 ;指针指到显示信息区
0144 7900 206 MOV R1,#0
0146 7802 207 MOV R0,#2
208
0148 E9 209 B0: MOV A,R1
0149 93 210 MOVC A,@A+DPTR
014A 9145 211 ACALL WR_DATA
014C 09 212 INC R1
014D D8F9 213 DJNZ R0,B0
014F 22 214 RET
0150 215 BJ2:
0150 0043 216 DB 00H,"C"
217
218 ;----------------------------------
219
0152 220 SHOW_LINE2H: ;在 LCD 的第二行显示数字
0152 75F064 221 MOV B,#100
0155 84 222 DIV AB
0156 2430 223 ADD A,#30H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -