📄 lcd.lst
字号:
011F C292 214 CLR LCD_EN
0121 12027B 215 LCALL DL40US
0124 22 216 RET
0125 217 SET_CURSOR_POS:
0125 E51C 218 MOV A,CURSOR_POS
0127 9002F2 219 MOV DPTR,#CURSORTAB
012A 93 220 MOVC A,@A+DPTR
012B 12018B 221 LCALL SET_DDRAM_ADD
012E 22 222 RET
012F 223 HIDE_CURSOR:
012F 75800C 224 MOV P0,#00001100B
0132 D292 225 SETB LCD_EN
0134 12027B 226 LCALL DL40US
0137 C292 227 CLR LCD_EN
0139 22 228 RET
229 ;------------设置移位方式-----------
013A 230 SET_SHIFT_MODE: ;光标移位,左移
013A 00 231 NOP
013B C290 232 CLR LCD_RS
013D C291 233 CLR LCD_RW
013F 758010 234 MOV P0,#10H ;00010000B
0142 D292 235 SETB LCD_EN
0144 12027B 236 LCALL DL40US
0147 C292 237 CLR LCD_EN
0149 12027B 238 LCALL DL40US
014C 22 239 RET
240 ;------------功能设置---------------
014D 241 SET_FUNC_SETTING1:
014D 00 242 NOP
014E C290 243 CLR LCD_RS
0150 C291 244 CLR LCD_RW
0152 758038 245 MOV P0,#00111000B;---DL=8位,N=2行,F=5*7
0155 D292 246 SETB LCD_EN
0157 12027B 247 LCALL DL40US
015A C292 248 CLR LCD_EN
015C 12027B 249 LCALL DL40US
015F 22 250 RET
0160 251 SET_FUNC_SETTING2: ;F=5*10
0160 00 252 NOP
0161 C290 253 CLR LCD_RS
0163 C291 254 CLR LCD_RW
0165 75803C 255 MOV P0,#00111100B
0168 D292 256 SETB LCD_EN
A51 MACRO ASSEMBLER LCD 19/11/04 16:45:55 PAGE 5
016A 12027B 257 LCALL DL40US
016D C292 258 CLR LCD_EN
016F 12027B 259 LCALL DL40US
0172 22 260 RET
261 ;--------------CGRAM地址设置----------------
0173 262 SET_CGRAM_ADD: ;设置CGRAM地址,完发送接收数据
0173 00 263 NOP
0174 C290 264 CLR LCD_RS
0176 C291 265 CLR LCD_RW
0178 E51E 266 MOV A,LCD_CGRAM_ADD
017A 543F 267 ANL A,#3FH ;00111111B
017C 4440 268 ORL A,#40H ;01000000B
017E F580 269 MOV P0,A
0180 D292 270 SETB LCD_EN
0182 12027B 271 LCALL DL40US
0185 C292 272 CLR LCD_EN
0187 12027B 273 LCALL DL40US
018A 22 274 RET
275 ;-------------DDRAM地址设置-----------------
018B 276 SET_DDRAM_ADD:
018B 7400 277 MOV A,#0
018D 4480 278 ORL A,#80H
018F F580 279 MOV P0,A
0191 D292 280 SETB LCD_EN
0193 12027B 281 LCALL DL40US
0196 C292 282 CLR LCD_EN
0198 22 283 RET
0199 284 SET_DDRAM_ADD1:
0199 00 285 NOP
019A C290 286 CLR LCD_RS
019C 00 287 NOP
019D C291 288 CLR LCD_RW
019F 00 289 NOP
01A0 E51F 290 MOV A,LCD_DDRAM_ADD
01A2 547F 291 ANL A,#7FH ;01111111B
01A4 4480 292 ORL A,#80H ;10000000B
01A6 F580 293 MOV P0,A
01A8 D292 294 SETB LCD_EN
01AA 120280 295 LCALL DL80US
01AD C292 296 CLR LCD_EN
01AF 120280 297 LCALL DL80US
01B2 22 298 RET
299 ;---设置DDRAM字程序,参数为A(地址)
01B3 300 SET_DDRAM:
01B3 C290 301 CLR LCD_RS
01B5 4480 302 ORL A,#80H
01B7 F580 303 MOV P0,A
01B9 D292 304 SETB LCD_EN
01BB 12027B 305 LCALL DL40US
01BE C292 306 CLR LCD_EN
01C0 22 307 RET
308 ;------------忙标志/读地址计数器-------------
01C1 309 SET_LCD_CHECK: ;读命令
01C1 00 310 NOP
01C2 751D00 311 MOV LCD_CH,#00H
01C5 C290 312 CLR LCD_RS
01C7 D291 313 SETB LCD_RW
01C9 D292 314 SETB LCD_EN
01CB 00 315 NOP
01CC 00 316 NOP
01CD E580 317 MOV A,P0
01CF 5480 318 ANL A,#80H
01D1 6003 319 JZ FREE
01D3 751DFF 320 MOV LCD_CH,#0FFH
01D6 321 FREE:
01D6 C292 322 CLR LCD_EN
A51 MACRO ASSEMBLER LCD 19/11/04 16:45:55 PAGE 6
01D8 22 323 RET
324 ;-------------从D口读数据----------------
01D9 325 SET_LCD_READ:
01D9 00 326 NOP
01DA D290 327 SETB LCD_RS
01DC D291 328 SETB LCD_RW
01DE D292 329 SETB LCD_EN
01E0 12027B 330 LCALL DL40US
01E3 E580 331 MOV A,P0
01E5 F520 332 MOV LCD_RAM_RD,A
01E7 C292 333 CLR LCD_EN
01E9 12027B 334 LCALL DL40US
01EC 22 335 RET
336 ;-------------从D口写数据----------------
01ED 337 SET_LCD_WRITE:
01ED 00 338 NOP
01EE D290 339 SETB LCD_RS
01F0 00 340 NOP
01F1 C291 341 CLR LCD_RW
01F3 00 342 NOP
01F4 E521 343 MOV A,LCD_RAM_WR
01F6 00 344 NOP
01F7 F580 345 MOV P0,A
01F9 D292 346 SETB LCD_EN
01FB 00 347 NOP
01FC 120280 348 LCALL DL80US
01FF C292 349 CLR LCD_EN
0201 00 350 NOP
0202 120280 351 LCALL DL80US
0205 22 352 RET
353 ;----------显示字符串------------------
354 ;---显示字符串,参数是首地址(DPTR),一行16字
0206 355 DISPLAY_STRING:
0206 7D00 356 MOV R5,#0
0208 357 DISPLAY_STRING_1:
0208 E4 358 CLR A ;LCD显示地址初值A = 00H
0209 93 359 MOVC A,@A+DPTR ;---判断A是否为'#',如果不是,则跳转,
如果是,退出子程序
020A B42303 360 CJNE A,#23H,DISPLAY_STRING_2
020D C290 361 CLR LCD_RS
020F 22 362 RET
0210 363 DISPLAY_STRING_2:
0210 D290 364 SETB LCD_RS
0212 F580 365 MOV P0,A
0214 D292 366 SETB LCD_EN
0216 12027B 367 LCALL DL40US
0219 C292 368 CLR LCD_EN
021B A3 369 INC DPTR
021C 0D 370 INC R5
021D BD10E8 371 CJNE R5,#16,DISPLAY_STRING_1
0220 7440 372 MOV A,#40H ;---第二行显示数据
0222 C290 373 CLR LCD_RS
0224 1201B3 374 LCALL SET_DDRAM
0227 80DF 375 SJMP DISPLAY_STRING_1
376 ;--------------DISP_RAM------------------
377 ;R1地址增量,R0为显示区地址指针
378 ;----------------------------------------
0229 379 RAM:
0229 7900 380 MOV R1,#0H ;DISPLAY RAM
022B 7835 381 MOV R0,#35H ;显示缓冲区首地址指针
022D 00 382 NOP
022E 383 RAM_ALL:
022E E9 384 MOV A,R1
022F 93 385 MOVC A,@A+DPTR ;DPTR=?
0230 B42302 386 CJNE A,#23H,RDIS_NEND ;23H->MODE_NU
0233 800D 387 SJMP RAM_NEND
A51 MACRO ASSEMBLER LCD 19/11/04 16:45:55 PAGE 7
0235 388 RDIS_NEND:
0235 F6 389 MOV @R0,A
0236 08 390 INC R0
0237 09 391 INC R1
0238 B920F3 392 CJNE R1,#20H,RAM_ALL
023B 800B 393 SJMP RALL_END
023D 394 RDIS_END:
023D B92002 395 CJNE R1,#20H,RAM_NEND
0240 8006 396 SJMP RALL_END
0242 397 RAM_NEND:
0242 768F 398 MOV @R0,#8FH
0244 09 399 INC R1
0245 08 400 INC R0
0246 80F5 401 SJMP RDIS_END
0248 402 RALL_END:
0248 22 403 RET
404 ;--------------RAM_WR--------------------
405 ;将35H~54H所有显示数据写如LCD显示RAM中
406 ;R3为地址增量,R0为显示区地址指针
407 ;----------------------------------------
0249 408 RAM_WR:
0249 751F00 409 MOV LCD_DDRAM_ADD,#0H ;INPUT MCS51 RAM INTO ALL OF THE LCD RAM
024C 12018B 410 LCALL SET_DDRAM_ADD ;发ADD_DD地址字符命令
024F 00 411 NOP
0250 7B00 412 MOV R3,#0H
0252 7835 413 MOV R0,#35H
0254 414 RAM_WR1:
0254 00 415 NOP
0255 8621 416 MOV LCD_RAM_WR,@R0 ;35H~54H显示数据区数据,通过显示缓冲区写入LCD显示数
据区
0257 1201ED 417 LCALL SET_LCD_WRITE ;
025A 0B 418 INC R3
025B 08 419 INC R0
025C BB10F5 420 CJNE R3,#10H,RAM_WR1 ;16bytes
025F 00 421 NOP
422 ;第二行显示数据
0260 751F40 423 MOV LCD_DDRAM_ADD,#40H ;第二行起始地址40H
0263 12018B 424 LCALL SET_DDRAM_ADD
0266 00 425 NOP
0267 7B00 426 MOV R3,#0H
0269 427 RAM_WR2:
0269 00 428 NOP
026A 8621 429 MOV LCD_RAM_WR,@R0
026C 1201ED 430 LCALL SET_LCD_WRITE
026F 0B 431 INC R3
0270 08 432 INC R0
0271 BB10F5 433 CJNE R3,#10H,RAM_WR2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -