wl012.lst

来自「买板子时赠的实验例子」· LST 代码 · 共 516 行 · 第 1/3 页

LST
516
字号
00D7 E533            152              MOV  A,SEC0         ;10ms 计数值加1
00D9 B4642A          153              CJNE  A,#100,TT
00DC 753300          154              MOV  SEC0,#0
00DF 0532            155              INC  SEC            ;秒加1
00E1 E532            156              MOV  A,SEC
00E3 B43C20          157              CJNE  A,#60,TT
00E6 0531            158              INC  MIN            ;分加1
00E8 753200          159              MOV  SEC,#0
00EB E531            160              MOV  A,MIN
00ED B43C16          161              CJNE  A,#60,TT
00F0 0530            162              INC  HOUR           ;时加1
00F2 753100          163              MOV  MIN,#0
00F5 E530            164              MOV  A,HOUR
00F7 B4180C          165              CJNE  A,#24,TT
00FA 753300          166              MOV  SEC0,#0
00FD 753200          167              MOV  SEC,#0          ;秒、分、时单元清0
0100 753100          168              MOV  MIN,#0
0103 753000          169              MOV  HOUR,#0
0106 D0E0            170      TT:     POP  ACC
0108 32              171              RETI
                     172     ;-------------------------------------------------------
                     173     ;   在第二行显示数字
                     174     ;-------------------------------------------------------
0109                 175     SHOW_DIG2:                    ;在 LCD 的第二行显示数字
0109 75F00A          176               MOV  B,#10         ;设置被除数
010C 84              177               DIV  AB            ;结果A存商数,B存余数
010D 2430            178               ADD  A,#30H        ;A为十位数,转换为字符
010F C0F0            179               PUSH  B            ;B放入堆栈暂存
0111 8536F0          180               MOV  B,X           ;设置 LCD 显示的位置
0114 31F0            181               CALL  LCDP2        ;由 LCD 显示出来
0116 D0F0            182               POP  B             ;
A51 MACRO ASSEMBLER  WL012                                                                03/29/2005 15:59:05 PAGE     4

0118 E5F0            183               MOV  A,B           ;B为个位数
011A 2430            184               ADD  A,#30H        ;转换为字符
011C 0536            185               INC  X             ;LCD 显示位置加1
011E 8536F0          186               MOV  B,X           ;设置 LCD 显示的位置
0121 31F0            187               CALL  LCDP2        ;由 LCD 显示出来
0123 22              188               RET
                     189     ;-------------------------------------------
                     190     ;转换为 ASCII 码并显示
                     191     ;-------------------------------------------
0124                 192     CONV:
0124 E530            193               MOV  A,HOUR        ;加载小时数据
0126 753605          194               MOV  X,#5          ;设置位置
0129 3109            195               CALL  SHOW_DIG2    ;显示数据
012B 0536            196               INC  X             ;
012D 743A            197               MOV  A,#':'        ;
012F 8536F0          198               MOV  B,X           ;
0132 31F0            199               CALL  LCDP2        ;
0134 E531            200               MOV  A,MIN         ;加载分钟数据
0136 0536            201               INC  X             ;设置位置
0138 3109            202               CALL  SHOW_DIG2    ;显示数据
013A 0536            203               INC  X             ;
013C 743A            204               MOV  A,#':'        ;
013E 8536F0          205               MOV  B,X           ;
0141 31F0            206               CALL  LCDP2        ;
0143 E532            207               MOV  A,SEC         ;加载秒数数据
0145 0536            208               INC  X             ;设置位置
0147 3109            209               CALL  SHOW_DIG2    ;显示数据
0149 0536            210               INC  X             ;
014B 743A            211               MOV  A,#':'        ;
014D 8536F0          212               MOV  B,X           ;
0150 31F0            213               CALL  LCDP2        ;
0152 E533            214               MOV  A,SEC0        ;加载秒数数据
0154 0536            215               INC  X             ;设置位置
0156 3109            216               CALL  SHOW_DIG2
0158 22              217               RET
                     218     ;---------------------------------------------------------
                     219     ;  LCD  CONTROL
                     220     ;---------------------------------------------------------
0159                 221     SET_LCD:                     ;对 LCD 做初始化设置及测试
0159 C2A2            222               CLR  EN
015B 31CC            223               CALL  INIT_LCD     ;初始化 LCD
015D 7D0A            224               MOV  R5,#10
015F 31FD            225               CALL  DELAY
0161 90008A          226               MOV  DPTR,#LMESS1  ;指针指到显示消息1
0164 7401            227               MOV  A,#1          ;显示在第一行
0166 318E            228               CALL  LCD_PRINT
0168 90009B          229               MOV  DPTR,#LMESS2  ;指针指到显示消息2
016B 7402            230               MOV  A,#2          ;显示在第二行
016D 318E            231               CALL  LCD_PRINT
016F 22              232               RET
                     233     ;----------------------------------------------------------
0170                 234     INIT_LCD1:                   ;LCD 控制指令初始化
0170 7438            235               MOV  A,#38H        ;双列显示,字形5*7点阵
0172 31E4            236               CALL  WCOM         ;
0174 5108            237               call  delay1
0176 740C            238               MOV  A,#0CH        ;开显示,显示光标,光标不闪烁
0178 31E4            239               CALL  WCOM         ;
017A 5108            240               call  delay1
017C 7401            241               MOV  A,#01H        ;清除 LCD 显示屏
017E 31E4            242               CALL  WCOM         ;
0180 5108            243               call  delay1
0182 22              244               RET
                     245     ;----------------------------------------------------------
0183                 246     ENABLE:                       ;写指令
0183 C2A0            247               CLR RS              ;RS=L,RW=L,E=高脉冲
0185 C2A1            248               CLR RW              ;D0-D7=指令码
A51 MACRO ASSEMBLER  WL012                                                                03/29/2005 15:59:05 PAGE     5

0187 D2A2            249               SETB EN
0189 5108            250               ACALL DELAY1          
018B C2A2            251               CLR EN
018D 22              252               RET
                     253     ;----------------------------------------------------------
018E                 254     LCD_PRINT:       ;在LCD的第一行或第二行显示字符
                     255     
018E B4010C          256               CJNE  A,#1,LINE2  ;判断是否为第一行
0191 7480            257       LINE1:  MOV  A,#80H       ;设置 LCD 的第一行地址
0193 31E4            258               CALL  WCOM        ;写入命令
0195 31B3            259               CALL  CLR_LINE    ;清除该行字符数据
0197 7480            260               MOV  A,#80H       ;设置 LCD 的第一行地址
0199 31E4            261               CALL  WCOM        ;写入命令
019B 800A            262               JMP  FILL
019D 74C0            263       LINE2:  MOV  A,#0C0H      ;设置 LCD 的第二行地址
019F 31E4            264               CALL  WCOM        ;写入命令
01A1 31B3            265               CALL  CLR_LINE    ;清除该行字符数据
01A3 74C0            266               MOV  A,#0C0H      ;设置 LCD 的第二行地址
01A5 31E4            267               CALL  WCOM
01A7 E4              268       FILL:   CLR  A            ;填入字符
01A8 93              269               MOVC  A,@A+DPTR   ;由消息区取出字符
01A9 B40001          270               CJNE  A,#0,LC1    ;判断是否为结束码
01AC 22              271               RET
01AD 31E9            272       LC1:    CALL  WDATA       ;写入数据
01AF A3              273               INC  DPTR         ;指针加1
01B0 80F5            274               JMP  FILL         ;继续填入字符
01B2 22              275               RET
                     276     ;-------------------------------------------------------
01B3                 277     CLR_LINE:                  ;清除该行 LCD 的字符
01B3 7818            278               MOV  R0,#24
01B5 7420            279        CL1:   MOV  A,#' '
01B7 31E9            280               CALL  WDATA
01B9 D8FA            281               DJNZ  R0,CL1
01BB 22              282               RET
                     283     ;-------------------------------------------------------
01BC 7FFA            284        DE:    MOV  R7,#250      ;延时500微秒
01BE DFFE            285               DJNZ  R7,$
01C0 22              286               RET
                     287     ;-------------------------------------------------------
01C1                 288        EN1:
01C1 C2A1            289               CLR   RW
01C3 D2A2            290               SETB  EN         ;短脉冲产生启用信号
01C5 31BC            291               CALL  DE
01C7 C2A2            292               CLR  EN
01C9 31BC            293               CALL  DE
01CB 22              294               RET
                     295     ;------------------------------------------------------
01CC                 296     INIT_LCD:                  ;8位I/O控制 LCD 接口初始化
01CC 758038          297               MOV  P0,#38H     ;双列显示,字形5*7点阵
01CF 3183            298               call  enable
01D1 5108            299               call  delay1
01D3 758038          300               MOV  P0,#38H     ;双列显示,字形5*7点阵
01D6 3183            301               call  enable
01D8 5108            302               call  delay1
01DA 758038          303               MOV  P0,#38H     ;双列显示,字形5*7点阵
01DD 3183            304               call  enable
01DF 5108            305               call  delay1
01E1 3170            306               CALL  INIT_LCD1
01E3 22              307               RET
                     308     ;-----------------------------------------------------
01E4                 309     WCOM:                     ;以8位控制方式将命令写至LCD
01E4 F580            310               MOV  P0,A       ;写入命令
01E6 3183            311               call  enable
01E8 22              312               RET
                     313     ;-----------------------------------------------------
01E9                 314     WDATA:                    ;以8位控制方式将数据写至LCD
A51 MACRO ASSEMBLER  WL012                                                                03/29/2005 15:59:05 PAGE     6

01E9 F580            315               MOV  P0,A       ;写入数据
01EB D2A0            316               SETB  RS        ;设置写入数据
01ED 31C1            317               CALL  EN1

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?