📄 ds18b20-lcd1602-温度控制.lst
字号:
013A 195 ASJ01:
013A 209513 196 JB K2,ASJ02 ;TH值调整 (减少)
013D B123 197 CALL BEEP_BL
013F 1527 198 DEC TEMP_TH ;
0141 E527 199 MOV A,TEMP_TH
0143 B4FF02 200 CJNE A,#0FFH,ASJ011 ;没有到设定下限值,转
0146 801E 201 JMP ASJ022
0148 719F 202 ASJ011: CALL LOOK_ALARM ;显示设定值
014A 7D0A 203 MOV R5,#10
014C B136 204 CALL DELAY
014E 80A4 205 JMP AS0
206
0150 209617 207 ASJ02: JB K3,ASJ03 ;TL值调整(减少)
0153 B123 208 CALL BEEP_BL
0155 1528 209 DEC TEMP_TL
0157 E528 210 MOV A,TEMP_TL
0159 B4FF02 211 CJNE A,#0FFH,ASJ021 ;没有到设定下限值,转
015C 8008 212 JMP ASJ022
015E 719F 213 ASJ021: CALL LOOK_ALARM ;显示设定值
0160 7D0A 214 MOV R5,#10
0162 B136 215 CALL DELAY
0164 808E 216 JMP AS0
0166 B201 217 ASJ022: CPL 20H.1 ;DOWN/UP 转换标记
0168 8099 218 JMP ASZ01
016A 80C5 219 ASJ03: JMP ASZ03
016C 22 220 RET
221 ;===================================================
222 ;在LCD1602的第一行显示"RESET ALERT CODE"
223 ;===================================================
016D 224 RESET_ALARM:
016D 900175 225 MOV DPTR,#RESET_A2 ;指针指到显示信息区
0170 7401 226 MOV A,#1 ;显示在第一行
0172 91D4 227 CALL LCD_PRINT
0174 22 228 RET
0175 229 RESET_A2:
0175 52455345 230 DB "RESET ALERT CODE"
0179 5420414C
017D 45525420
0181 434F4445
231 ;====================================================
232 ;实时温度值与设定报警温度值 TH、TL 比较子程序
233 ;当实际温度大于 TH 的设定值时,显示“>H”,继电器关闭
234 ;当实际温度小于 TH 的设定值时,显示“!!”,继电器吸合
235 ;当实际温度小于 TL 的设定值时,显示“<L”,蜂鸣器响
236 ;闪动显示标记符 >H、<L、!!
237 ;====================================================
0185 238 TEMP_COMP:
239 ; SETB TR0 ;启动中断
0185 E524 240 MOV A,TEMP_ZH
0187 B52700 241 CJNE A,TEMP_TH,T_COMP0
018A 242 T_COMP0:
018A 5019 243 JNC CHULI1
018C E524 244 MOV A,TEMP_ZH
018E 9528 245 SUBB A,TEMP_TL ;减数>被减数,则
A51 MACRO ASSEMBLER DS18B20_LCD1602_温禵縚制 12/20/2006 22:01:59 PAGE 5
0190 402B 246 JC CHULI2 ;借位标志位C=1,转
0192 300208 247 JNB FLAG2,T_COMP1 ;FLAG2=0,显示标记字符
0195 752F0E 248 MOV LCD_X,#0EH ;FLAG2=1,清屏,形成闪动效果
0198 1201D3 249 LCALL CLR_TWO2
019B 8005 250 JMP T_COMP2
019D 9001F8 251 T_COMP1: MOV DPTR,#BJ5 ;显示"!!"
01A0 31E4 252 CALL TEMP_BJ3
01A2 C293 253 T_COMP2: CLR RELAY ;继电器吸合
254 ; CLR TR0 ;关闭中断
01A4 22 255 RET
01A5 256 CHULI1: ;超温处理
01A5 300208 257 JNB FLAG2,CHULI10
01A8 752F0E 258 MOV LCD_X,#0EH
01AB 1201D3 259 LCALL CLR_TWO2
01AE 800C 260 JMP CHULI11
01B0 9001F4 261 CHULI10: MOV DPTR,#BJ3 ;显示">H"
01B3 31E4 262 CALL TEMP_BJ3
01B5 D293 263 SETB RELAY ;继电器关闭
01B7 200402 264 JB FLAG4,CHULI11
01BA B123 265 CALL BEEP_BL ;蜂鸣器响
01BC 266 CHULI11: ;CLR TR0 ;关闭中断
01BC 22 267 RET
01BD 268 CHULI2: ;欠温处理
01BD 300208 269 JNB FLAG2,CHULI20
01C0 752F0E 270 MOV LCD_X,#0EH
01C3 1201D3 271 LCALL CLR_TWO2
01C6 800A 272 JMP CHULI21
01C8 9001F6 273 CHULI20: MOV DPTR,#BJ4 ;显示"<L"
01CB 31E4 274 CALL TEMP_BJ3
01CD 200402 275 JB FLAG4,CHULI21
01D0 B123 276 CALL BEEP_BL ;蜂鸣器响
01D2 277 CHULI21: ; CLR TR0 ;关闭中断
01D2 22 278 RET
279 ;==========================================
280 ;清两个字符(闪烁功能用)
281 ;==========================================
01D3 282 CLR_TWO2:
01D3 7420 283 MOV A,#' '
01D5 852FF0 284 MOV B,LCD_X
01D8 91A1 285 CALL LCDP2
01DA 052F 286 INC LCD_X
01DC 7420 287 MOV A,#' '
01DE 852FF0 288 MOV B,LCD_X
01E1 91A1 289 CALL LCDP2
01E3 22 290 RET
291 ;=========================================
292 ;标记字符写入子程序
293 ;=========================================
01E4 294 TEMP_BJ3:
01E4 74CE 295 MOV A,#0CEH ;指定写入地址
01E6 B107 296 CALL WCOM
01E8 7900 297 MOV R1,#0
01EA 7802 298 MOV R0,#2 ;写两个标记字符
299
01EC E9 300 BBJJ3: MOV A,R1
01ED 93 301 MOVC A,@A+DPTR ;读出要写的标记字符
01EE B114 302 CALL WDATA ;写入标记字符
01F0 09 303 INC R1
01F1 D8F9 304 DJNZ R0,BBJJ3 ;没有写完,继续
01F3 22 305 RET
01F4 306 BJ3:
01F4 3E48 307 DB ">H" ;超温标记
01F6 308 BJ4:
01F6 3C4C 309 DB "<L" ;欠温标记
01F8 310 BJ5:
01F8 2121 311 DB "!!" ;加热标记
A51 MACRO ASSEMBLER DS18B20_LCD1602_温禵縚制 12/20/2006 22:01:59 PAGE 6
312 ;==================================================
313 ;显示温度标记 ℃ 子程序
314 ;将预先写入LCD1602 CGRAM 的数读出,并送显示
315 ;==================================================
01FA 316 TEMP_BJ:
01FA 74CB 317 MOV A,#0CBH ;指定写入地址
01FC B107 318 CALL WCOM
01FE 90020D 319 MOV DPTR,#BJ1 ;指针指到显示消息区
0201 7900 320 MOV R1,#0
0203 7802 321 MOV R0,#2 ;写两个标记字符
322
0205 E9 323 BBJJ1: MOV A,R1
0206 93 324 MOVC A,@A+DPTR
0207 B114 325 CALL WDATA
0209 09 326 INC R1
020A D8F9 327 DJNZ R0,BBJJ1 ;没有写完,继续
020C 22 328 RET
020D 329 BJ1:
020D 0043 330 DB 00H,"C" ;字符 “℃”
331 ;=================================================
020F 332 MENU_OK:
333
020F 90021E 334 MOV DPTR,#M_OK1 ;指针指到显示信息区
0212 7401 335 MOV A,#1 ;显示在第一行
0214 91D4 336 CALL LCD_PRINT
0216 90022F 337 MOV DPTR,#M_OK2 ;指针指到显示信息区
0219 7402 338 MOV A,#2 ;显示在第二行
021B 91D4 339 CALL LCD_PRINT
021D 22 340 RET
021E 341 M_OK1:
021E 20202044 342 DB " DS18B20 OK ",0
0222 53313842
0226 3230204F
022A 4B202020
022E 00
022F 343 M_OK2:
022F 2054454D 344 DB " TEMP: ",0
0233 503A2020
0237 20202020
023B 20202020
023F 00
345 ;-----------------------------------------------
0240 346 MENU_ERROR:
0240 90024F 347 MOV DPTR,#M_ERROR1 ;指针指到显示信息区
0243 7401 348 MOV A,#1 ;显示在第一行
0245 91D4 349 CALL LCD_PRINT
0247 900260 350 MOV DPTR,#M_ERROR2 ;指针指到显示信息区
024A 7402 351 MOV A,#2 ;显示在第二行
024C 91D4 352 CALL LCD_PRINT
024E 22 353 RET
354 ;----------------------------------------------------
024F 355 M_ERROR1:
024F 20445331 356 DB " DS18B20 ERROR ",0
0253 38423230
0257 20455252
025B 4F522020
025F 00
357
0260 358 M_ERROR2:
0260 2020504C 359 DB " PLEASE CHECK ",0
0264 45415345
0268 20434845
026C 434B2020
0270 00
360
361 ;====================================================
A51 MACRO ASSEMBLER DS18B20_LCD1602_温禵縚制 12/20/2006 22:01:59 PAGE 7
362 ;DS18B20 复位与检测子程序
363 ;DS18B20 正常 FLAG1 置 1,不正常 FLAG1 置 0。
364 ;====================================================
0271 365 RESET:
0271 D2B3 366 SETB DATE_LINE ;
0273 00 367 NOP
0274 C2B3 368 CLR DATE_LINE
0276 786B 369 MOV R0,#6BH ;主机发出延时复位低脉冲
0278 7904 370 MOV R1,#04H
027A D8FE 371 TSR1: DJNZ R0,$ ;延时
027C 786B 372 MOV R0,#6BH
027E D9FA 373 DJNZ R1,TSR1
0280 D2B3 374 SETB DATE_LINE ;然后拉高数据线
0282 00 375 NOP
0283 00 376 NOP
0284 00 377 NOP
0285 7832 378 MOV R0,#32H
0287 30B304 379 TSR2: JNB DATE_LINE,TSR3 ;等待DS18B20回应
028A D8FB 380 DJNZ R0,TSR2
028C 8004 381 JMP TSR4 ; 延时
028E D200 382 TSR3: SETB FLAG1 ; 置标志位,表示DS1820存在
0290 8004 383 JMP TSR5
0292 C200 384 TSR4: CLR FLAG1 ; 清标志位,表示DS1820不存在
0294 8004 385 JMP TSR7
0296 786B 386 TSR5: MOV R0,#06BH
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -