📄 ds18b20-lcd1602-温度控制.lst
字号:
03B1 74CE 597 MOV A,#0CEH ;指定地址
03B3 71CE 598 CALL TEMP_BJ1 ;
03B5 E528 599 MOV A,TEMP_TL ;加载 TL 数据
03B7 752F0C 600 MOV LCD_X,#12 ;设置位置变量
03BA 9115 601 CALL SHOW_DIG2L ;显示 TL 数据
03BC 22 602 RET
603 ;--------------------------------------------
03BD 604 M_ALAX2:
03BD 54483A20 605 DB "TH: TL: ",0
03C1 20202020
03C5 20544C3A
03C9 20202020
03CD 00
606 ;--------------------------------------------
607 ;显示标记“℃”子程序
608 ;在指定的位置显示“℃”
609 ;--------------------------------------------
03CE 610 TEMP_BJ1:
03CE B107 611 CALL WCOM
03D0 9003DF 612 MOV DPTR,#BJ2 ;指针指到显示信息区
03D3 7900 613 MOV R1,#0
03D5 7802 614 MOV R0,#2
03D7 615 BBJJ2:
03D7 E9 616 MOV A,R1
03D8 93 617 MOVC A,@A+DPTR
03D9 B114 618 CALL WDATA
03DB 09 619 INC R1
03DC D8F9 620 DJNZ R0,BBJJ2
A51 MACRO ASSEMBLER DS18B20_LCD1602_温禵縚制 12/20/2006 22:01:59 PAGE 11
03DE 22 621 RET
03DF 622 BJ2:
03DF 0043 623 DB 00H,"C"
624
625 ;---------------------------------------------------
626 ;在 LCD 的第二行显示 TH 数值
627 ;将 TH 值分离并转换为 ASCII 码,送显示
628 ;百位、十位、个位
629 ;---------------------------------------------------
03E1 630 SHOW_DIG2H:
03E1 75F064 631 MOV B,#100
03E4 84 632 DIV AB ;
03E5 B40104 633 CJNE A,#01H,SHOW_DIG2H1
03E8 2430 634 ADD A,#30H ;百位转换为ASCII码
03EA 8002 635 JMP SHOW_DIG2H2
03EC 636 SHOW_DIG2H1:
03EC 7420 637 MOV A,#' ' ;百位数不为1,显示空格
03EE 638 SHOW_DIG2H2:
03EE C0F0 639 PUSH B
03F0 852FF0 640 MOV B,LCD_X
03F3 91A1 641 CALL LCDP2 ;送显示
03F5 D0F0 642 POP B
03F7 740A 643 MOV A,#0AH
03F9 C5F0 644 XCH A,B
03FB 84 645 DIV AB
03FC 2430 646 ADD A,#30H ;十位转换为ASCII码
03FE 052F 647 INC LCD_X
0400 C0F0 648 PUSH B
0402 852FF0 649 MOV B,LCD_X
0405 91A1 650 CALL LCDP2 ;送显示
0407 D0F0 651 POP B
0409 052F 652 INC LCD_X
040B E5F0 653 MOV A,B
040D 852FF0 654 MOV B,LCD_X
0410 2430 655 ADD A,#30H ;个位转换为ASCII码
0412 91A1 656 CALL LCDP2 ;送显示
0414 22 657 RET
658 ;-------------------------------------------------
659 ;在 LCD 的第二行显示 TL 数值
660 ;将 TL 值分离并转换为 ASCII 码,送显示
661 ;只取十位数和个位数,百位数舍弃
662 ;-------------------------------------------------
0415 663 SHOW_DIG2L:
0415 75F064 664 MOV B,#100 ;
0418 84 665 DIV AB ;百位数舍弃
0419 740A 666 MOV A,#0AH
041B C5F0 667 XCH A,B
041D 84 668 DIV AB
041E 2430 669 ADD A,#30H ;十位数转换为 ASCII 码
0420 C0F0 670 PUSH B
0422 852FF0 671 MOV B,LCD_X ;确定显示位置
0425 91A1 672 CALL LCDP2 ;送显示
0427 D0F0 673 POP B
0429 052F 674 INC LCD_X ;调整显示地址
042B E5F0 675 MOV A,B ;个位数
042D 852FF0 676 MOV B,LCD_X ;确定显示位置
0430 2430 677 ADD A,#30H ;个位数转换为 ASCII 码
0432 91A1 678 CALL LCDP2 ;送显示
0434 22 679 RET
680
681 ;==========================================================
682 ; LCD 1602 温度值显示子程序
683 ;73H-70H 分别存放百位、十位、个位、小数位的数据
684 ;==========================================================
0435 685 CONV:
0435 E573 686 MOV A,73H ;加载百位数据
A51 MACRO ASSEMBLER DS18B20_LCD1602_温禵縚制 12/20/2006 22:01:59 PAGE 12
0437 752F06 687 MOV LCD_X,#6 ;设置显示位置
043A 300317 688 JNB FLAG3,CONV0 ;
043D 742D 689 MOV A,#"-" ;显示"-"
043F 852FF0 690 MOV B,LCD_X
0442 91A1 691 CALL LCDP2
692
0444 E572 693 MOV A,72H ;十位
0446 B40027 694 CJNE A,#00H,CONV3
0449 052F 695 INC LCD_X ;调整显示地址
044B 7420 696 MOV A,#" " ;十位数等于0显示空格
044D 852FF0 697 MOV B,LCD_X
0450 91A1 698 CALL LCDP2
0452 8022 699 JMP CONV4
0454 700 CONV0:
0454 B40017 701 CJNE A,#00H,CONV2
0457 7420 702 CONV1: MOV A,#" " ;百位数等于0显示空格
0459 852FF0 703 MOV B,LCD_X
045C 91A1 704 CALL LCDP2
045E E572 705 MOV A,72H ;十位
0460 B4000D 706 CJNE A,#00H,CONV3
0463 052F 707 INC LCD_X ;调整显示地址
0465 7420 708 MOV A,#" " ;十位数等于0显示空格
0467 852FF0 709 MOV B,LCD_X
046A 91A1 710 CALL LCDP2
046C 8008 711 JMP CONV4
712
046E 918C 713 CONV2: CALL SHOW_DIG2 ;显示数据
714
0470 052F 715 CONV3: INC LCD_X ;调整显示地址
0472 E572 716 MOV A,72H ;十位
0474 918C 717 CALL SHOW_DIG2
0476 718 CONV4:
0476 052F 719 INC LCD_X ;调整显示地址
0478 E571 720 MOV A,71H ;个位
047A 918C 721 CALL SHOW_DIG2
047C 052F 722 INC LCD_X ;调整显示地址
047E 742E 723 MOV A,#'.'
0480 852FF0 724 MOV B,LCD_X
0483 91A1 725 CALL LCDP2
0485 E570 726 MOV A,70H ;加载小数位
0487 052F 727 INC LCD_X ;设置位置
0489 918C 728 CALL SHOW_DIG2 ;显示数据
048B 22 729 RET
730 ;-------------------------------------------------------
048C 731 SHOW_DIG2: ;在 LCD 的第二行显示数字
048C 2430 732 ADD A,#30H ;加30H,转换为ASCII码
048E 852FF0 733 MOV B,LCD_X ;确定显示位置
0491 91A1 734 CALL LCDP2 ;送显示
0493 22 735 RET
736 ;=============================================
737 ;在LCD的第一行显示数据字符
738 ;A=ASCII 数据, B=位置变量
739 ;==============================================
0494 740 LCDP1: ;在LCD的第一行显示字符
0494 C0E0 741 PUSH ACC ;
0496 E5F0 742 MOV A,B ;设置显示地址
0498 2480 743 ADD A,#80H ;设置LCD的第一行地址
049A B107 744 CALL WCOM ;写入命令
049C D0E0 745 POP ACC ;由堆栈取出A
049E B114 746 CALL WDATA ;写入数据
04A0 22 747 RET
748 ;=============================================
749 ;在LCD的第二行显示数据字符
750 ;A=ASCII 数据, B=位置变量
751 ;==============================================
04A1 752 LCDP2: ;在LCD的第二行显示字符
A51 MACRO ASSEMBLER DS18B20_LCD1602_温禵縚制 12/20/2006 22:01:59 PAGE 13
04A1 C0E0 753 PUSH ACC ;
04A3 E5F0 754 MOV A,B ;设置显示地址
04A5 24C0 755 ADD A,#0C0H ;设置LCD的第二行地址
04A7 B107 756 CALL WCOM ;写入命令
04A9 D0E0 757 POP ACC ;由堆栈取出A
04AB B114 758 CALL WDATA ;写入数据
04AD 22 759 RET
760 ;=================================================
761 ;对 LCD 做初始化设置
762 ;将自定义字符“℃”存入 LCD1602 的 CGRAM 中
763 ;=================================================
04AE 764 SET_LCD:
04AE C2A2 765 CLR LCD_EN
04B0 91B5 766 CALL INIT_LCD ;初始化 LCD
04B2 51D6 767 CALL STORE_DATA ;将自定义字符存入LCD的CGRAM
04B4 22 768 RET
04B5 769 INIT_LCD:
04B5 7438 770 MOV A,#38H ;双列显示,字形5*7点阵
04B7 B107 771 CALL WCOM ;写入命令
04B9 B141 772 CALL DELAY1 ;延时5MS
04BB 7438 773 MOV A,#38H
04BD B107 774 CALL WCOM ;写入命令
04BF B141 775 CALL DELAY1 ;延时5MS
776
04C1 7438 777 MOV A,#38H
04C3 B107 778 CALL WCOM ;写入命令
04C5 B141 779 CALL DELAY1 ;延时5MS
04C7 740C 780 MOV A,#0CH ;开显示, 不显示光标,光标不闪烁
04C9 B107 781 CALL WCOM ;写入命令
04CB B141 782 CALL DELAY1 ;延时5MS
04CD 7401 783 MOV A,#01H ;清除 LCD 显示屏
04CF B107 784 CALL WCOM ;写入命令
04D1 B141 785 CALL DELAY1 ;延时5MS
04D3 22 786 RET
787 ;==================================================
788 ;在LCD的第一行或第二行显示字符串
789 ;DPTR = 放字符串的地址
790 ;==================================================
04D4 791 LCD_PRINT:
792
04D4 B4010C 793 CJNE A,#1,LINE2 ;判断是否为第一行
04D7 7480 794 LINE1: MOV A,#80H ;设置 LCD 的第一行地址
04D9 B107 795 CALL WCOM ;写入命令
04DB 91F9 796 CALL CLR_LINE ;清除该行字符数据
04DD 7480 797 MOV A,#80H ;设置 LCD 的第一行地址
04DF B107 798 CALL WCOM ;写入命令
04E1 800A 799 JMP FILL
800
04E3 74C0 801 LINE2: MOV A,#0C0H ;设置 LCD 的第二行地址
04E5 B107 802 CALL WCOM ;写入命令
04E7 91F9 803 CALL CLR_LINE ;清除该行字符数据
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -