📄 ds18b20-lcd.lst
字号:
02CE EC 448 MOV A,R4
02CF 600B 449 JZ TEMPC12
02D1 540F 450 ANL A,#0FH
02D3 C4 451 SWAP A
02D4 FC 452 MOV R4,A
02D5 E529 453 MOV A,TEMPHC ;TEMPHC HI = 百位数 BCD
02D7 540F 454 ANL A,#0FH
02D9 4C 455 ORL A,R4
02DA F529 456 MOV TEMPHC,A
02DC 22 457 TEMPC12: RET
458 ;---------------------------------------------------------------
02DD 459 HEX2BCD1:
02DD 75F064 460 MOV B,#064H ;十六进制-> BCD
02E0 84 461 DIV AB ;B= A % 100
02E1 FC 462 MOV R4,A ;R7 = 百位数
02E2 740A 463 MOV A,#0AH
02E4 C5F0 464 XCH A,B
02E6 84 465 DIV AB ;B = A % B
02E7 C4 466 SWAP A
02E8 45F0 467 ORL A,B
02EA 22 468 RET
469 ;-------------------------------------------------------------
470 ; 小数部分码表
471 ;-------------------------------------------------------------
02EB 472 TEMPDOTTAB:
02EB 00000101 473 DB 00H,00H,01H,01H,02H,03H,03H,04H
02EF 02030304
02F3 05050606 474 DB 05H,05H,06H,06H,07H,08H,08H,09H
02F7 07080809
475 ;=====================================================
02FB 476 LOOK_ALARM:
477
02FB 90032A 478 MOV DPTR,#M_ALAX2 ;指针指到显示信息区
02FE 7402 479 MOV A,#2 ;显示在第二行
0300 9148 480 CALL LCD_PRINT
481
0302 74C6 482 MOV A,#0C6H
0304 713B 483 CALL TEMP_BJ1
0306 E527 484 MOV A,TEMP_TH ;加载TH数据
0308 752F03 485 MOV LCD_X,#3 ;设置位置
030B 714E 486 CALL SHOW_DIG2H ;显示数据
487
030D 74CE 488 MOV A,#0CEH
030F 713B 489 CALL TEMP_BJ1
0311 E528 490 MOV A,TEMP_TL ;加载TL数据
0313 752F0C 491 MOV LCD_X,#12 ;设置位置
0316 717B 492 CALL SHOW_DIG2L ;显示数据
0318 22 493 RET
494 ;--------------------------------------------
0319 495 M_ALAX1:
0319 204C4F4F 496 DB " LOOK ALERT CODE",0
031D 4B20414C
0321 45525420
A51 MACRO ASSEMBLER DS18B20_LCD 03/29/2005 16:16:18 PAGE 9
0325 434F4445
0329 00
032A 497 M_ALAX2:
032A 54483A20 498 DB "TH: TL: ",0
032E 20202020
0332 20544C3A
0336 20202020
033A 00
499 ;--------------------------------------------
033B 500 TEMP_BJ1:
033B 917B 501 CALL WCOM
033D 90034C 502 MOV DPTR,#BJ2 ;指针指到显示信息区
0340 7900 503 MOV R1,#0
0342 7802 504 MOV R0,#2
505
0344 E9 506 BBJJ2: MOV A,R1
0345 93 507 MOVC A,@A+DPTR
0346 9188 508 CALL WDATA
0348 09 509 INC R1
0349 D8F9 510 DJNZ R0,BBJJ2
034B 22 511 RET
034C 512 BJ2:
034C 0043 513 DB 00H,"C"
514
515 ;---------------------------------------------------
034E 516 SHOW_DIG2H: ;在 LCD 的第二行显示数字
034E 75F064 517 MOV B,#100
0351 84 518 DIV AB
0352 2430 519 ADD A,#30H
0354 C0F0 520 PUSH B
0356 852FF0 521 MOV B,LCD_X
0359 9108 522 CALL LCDP2
035B D0F0 523 POP B
035D 740A 524 MOV A,#0AH
035F C5F0 525 XCH A,B
0361 84 526 DIV AB
0362 2430 527 ADD A,#30H
0364 052F 528 INC LCD_X
0366 C0F0 529 PUSH B
0368 852FF0 530 MOV B,LCD_X
036B 9108 531 CALL LCDP2
036D D0F0 532 POP B
036F 052F 533 INC LCD_X
0371 E5F0 534 MOV A,B
0373 852FF0 535 MOV B,LCD_X
0376 2430 536 ADD A,#30H
0378 9108 537 CALL LCDP2
037A 22 538 RET
539
037B 540 SHOW_DIG2L: ;在 LCD 的第二行显示数字
037B 75F064 541 MOV B,#100
037E 84 542 DIV AB
037F 740A 543 MOV A,#0AH
0381 C5F0 544 XCH A,B
0383 84 545 DIV AB
0384 2430 546 ADD A,#30H
0386 C0F0 547 PUSH B
0388 852FF0 548 MOV B,LCD_X
038B 9108 549 CALL LCDP2
038D D0F0 550 POP B
038F 052F 551 INC LCD_X
0391 E5F0 552 MOV A,B
0393 852FF0 553 MOV B,LCD_X
0396 2430 554 ADD A,#30H
0398 9108 555 CALL LCDP2
039A 22 556 RET
A51 MACRO ASSEMBLER DS18B20_LCD 03/29/2005 16:16:18 PAGE 10
557 ;-------------------------------------------------------------
558 ;显示区 BCD 码温度值刷新子程序
559 ;-------------------------------------------------------------
039B 560 DISPBCD:
039B E52A 561 MOV A,TEMPLC
039D 540F 562 ANL A,#0FH
039F F570 563 MOV 70H,A ;小数位
03A1 E52A 564 MOV A,TEMPLC
03A3 C4 565 SWAP A
03A4 540F 566 ANL A,#0FH
03A6 F571 567 MOV 71H,A ;个位
03A8 E529 568 MOV A,TEMPHC
03AA 540F 569 ANL A,#0FH
03AC F572 570 MOV 72H,A ;十位
03AE E529 571 MOV A,TEMPHC
03B0 C4 572 SWAP A
03B1 540F 573 ANL A,#0FH
03B3 F573 574 MOV 73H,A ;百位
03B5 E529 575 MOV A,TEMPHC
03B7 54F0 576 ANL A,#0F0H
03B9 B41002 577 CJNE A,#010H,DISPBCD0
03BC 8010 578 SJMP DISPBCD2
579
03BE E529 580 DISPBCD0: MOV A,TEMPHC
03C0 540F 581 ANL A,#0FH
03C2 700A 582 JNZ DISPBCD2 ;十位数是0
03C4 E529 583 MOV A,TEMPHC
03C6 C4 584 SWAP A
03C7 540F 585 ANL A,#0FH
03C9 75730A 586 MOV 73H,#0AH ;符号位不显示
03CC F572 587 MOV 72H,A ;十位数显示符号
03CE 22 588 DISPBCD2: RET
589
590 ;==========================================================
591 ; LCD 1602 显示子程序
592 ;==========================================================
03CF 593 CONV:
03CF E573 594 MOV A,73H ;加载百位数据
03D1 752F06 595 MOV LCD_X,#6 ;设置位置
03D4 B40102 596 CJNE A,#1,CONV1
03D7 8009 597 JMP CONV2
03D9 7420 598 CONV1: MOV A,#" "
03DB 852FF0 599 MOV B,LCD_X
03DE 9108 600 CALL LCDP2
03E0 8002 601 JMP CONV3
03E2 9100 602 CONV2: CALL SHOW_DIG2 ;显示数据
03E4 052F 603 CONV3: INC LCD_X ;
03E6 E572 604 mov a,72h ;十位
03E8 9100 605 CALL SHOW_DIG2
03EA 052F 606 inc LCD_X
03EC E571 607 mov a,71h ;个位
03EE 9100 608 CALL SHOW_DIG2
03F0 052F 609 inc LCD_X
03F2 742E 610 MOV A,#'.'
03F4 852FF0 611 MOV B,LCD_X
03F7 9108 612 CALL LCDP2
03F9 E570 613 MOV A,70h ;加载小数点位
03FB 052F 614 INC LCD_X ;设置位置
03FD 9100 615 CALL SHOW_DIG2 ;显示数据
03FF 22 616 RET
617 ;-------------------------------------------------------
0400 618 SHOW_DIG2: ;在 LCD 的第二行显示数字
0400 2430 619 ADD A,#30H
0402 852FF0 620 MOV B,LCD_X
0405 9108 621 CALL LCDP2
0407 22 622 RET
A51 MACRO ASSEMBLER DS18B20_LCD 03/29/2005 16:16:18 PAGE 11
623 ;---------------------------------------------------------
0408 624 LCDP2: ;在LCD的第二行显示字符
0408 C0E0 625 PUSH ACC ;
040A E5F0 626 MOV A,B ;设置显示地址
040C 24C0 627 ADD A,#0C0H ;设置LCD的第二行地址
040E 917B 628 CALL WCOM ;写入命令
0410 D0E0 629 POP ACC ;由堆栈取出A
0412 9188 630 CALL WDATA ;写入数据
0414 22 631 RET
632 ;---------------------------------------------------------
633
634
0415 635 SET_LCD: ;对 LCD 做初始化设置及测试
0415 C2A2 636 CLR LCD_EN
0417 911C 637 CALL INIT_LCD ;初始化 LCD
0419 5128 638 CALL STORE_DATA ;将自定义字符存入LCD的CGRAM
041B 22 639 RET
041C 640 INIT_LCD: ;8位I/O控制 LCD 接口初始化
041C 7438 641 MOV A,#38H ;双列显示,字形5*7点阵
041E 917B 642 CALL WCOM
0420 91C2 643 call delay1
0422 7438 644 MOV A,#38H
0424 917B 645 CALL WCOM
0426 91C2 646 call delay1
647
0428 7438 648 MOV A,#38H
042A 917B 649 CALL WCOM
042C 91C2 650 call delay1
042E 740C 651 MOV A,#0CH ;开显示,显示光标,光标不闪烁
0430 917B 652 CALL WCOM
0432 91C2 653 call delay1
0434 7401 654 MOV A,#01H ;清除 LCD 显示屏
0436 917B 655 CALL WCOM
0438 91C2 656 call delay1
043A 22 657 RET
658 ;==================================================
043B 659 CLR_LINE1: ;清除LCD的第一行字符
043B 7480 660 MOV A,#80H ;设置 LCD 的第一行地址
043D 917B 661 CALL WCOM ;
043F 7818 662 MOV R0,#24 ;设置计数值
0441 7420 663 C1: MOV A,#' ' ;载入空格符至LCD
0443 9188 664 CALL WDATA ;输出字符至LCD
0445 D8FA 665 DJNZ R0,C1 ;计数结束
0447 22 666 RET
667 ;==================================================
0448 668 LCD_PRINT: ;在LCD的第一行或第二行显示字符
669
0448 B4010C 670 CJNE A,#1,LINE2 ;判断是否为第一行
044B 7480 671 LINE1: MOV A,#80H ;设置 LCD 的第一行地址
044D 917B 672 CALL WCOM ;写入命令
044F 916D 673 CALL CLR_LINE ;清除该行字符数据
0451 7480 674 MOV A,#80H ;设置 LCD 的第一行地址
0453 917B 675 CALL WCOM ;写入命令
0455 800A 676 JMP FILL
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -