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 + -
显示快捷键?