mã
; LCD Thanh ghi địa chỉ
LCD_CMD_WR equ 0
LCD_DATA_WR equ 1
LCD_BUSY_RD equ 2
LCD_DATA_RD equ 3
; LCD Commands
LCD_CLS equ 1
LCD_HOME equ 2
LCD_SETMODE equ 4
LCD_SETVISIBLE equ 8
LCD_SHIFT equ 16
LCD_SETFUNCTION equ 32
LCD_SETCGADDR equ 64
LCD_SETDDADDR equ 128
; Thiết lập lại vector
org 0000h
jmp bắt đầu
; Bắt đầu của chương trình
org 0100h
string1a: db '!! ELECTRONICPHT !! '
0 pc
string1b: db '!! ELECTRONICPHT !! '
0 pc
string2:db ' CHAY CHU TREN LCD '
0 pc
Chuỗi3: db 'DESIGNER HOÀNG THỊNH'
0 pc
Chuỗi4: db '8.051 bộ xử lý! "
0 pc
khởi đầu:
mov A, # 038h
gọi wrcmd
vòng lặp:
mov A, # LCD_SETVISIBLE + 6
gọi wrcmd
mov R7, # 2
loop2:
mov DPTR, # string1a
gọi wrstr
mov DPTR, # 200
wtms cuộc gọi
mov A, # LCD_CLS
gọi wrcmd
mov DPTR, # string1b
gọi wrstr
mov DPTR, # 200
wtms cuộc gọi
mov A, # LCD_CLS
gọi wrcmd
djnz R7, loop2
mov DPTR, # string1a
gọi wrstr
mov DPTR, # 400
wtms cuộc gọi
mov A, # LCD_SETDDADDR + 64
gọi wrcmd
mov DPTR, # string2
gọi wrslow
mov DPTR, # 200
wtms cuộc gọi
mov A, # LCD_CLS
gọi wrcmd
mov DPTR, # Chuỗi3
gọi wrslow
mov A, # LCD_SETDDADDR + 64
gọi wrcmd
mov DPTR, # Chuỗi4
gọi wrslow
mov A, # LCD_SETVISIBLE + 7
gọi wrcmd
mov DPTR, # 2000
wtms cuộc gọi
mov A, # LCD_CLS
gọi wrcmd
jmp loop
wrstr:
mov R0, # LCD_DATA_WR
wrstr1:
clr A
MOVC A, @ A + DPTR
lm wrstr2
MOVX @ R0, A
gọi wtbusy
inc DPTR
đẩy DPL
đẩy DPH
pop DPH
pop DPL
jmp wrstr1
wrstr2:
đúng
wrslow:
mov R0, # LCD_DATA_WR
wrslw1:
clr A
MOVC A, @ A + DPTR
lm wrslw2
MOVX @ R0, A
gọi wtbusy
inc DPTR
đẩy DPL
đẩy DPH
mov DPTR, # 100
wtms cuộc gọi
pop DPH
pop DPL
jmp wrslw1
wrslw2: đúng
wrcmd: mov R0, # LCD_CMD_WR
MOVX @ R0, A
jmp wtbusy
wrchar: mov R0, # LCD_DATA_WR
MOVX @ R0, A
wtbusy:
mov R1, # LCD_BUSY_RD
MOVX A, @ r1
JB ACC.7, wtbusy
đúng
wtsec:
đẩy ACC
wtms cuộc gọi
pop ACC
Tháng Mười Hai A
jnz wtsec
đúng
wtms:
xrl DPL, # 0FFh
xrl DPH, # 0FFh
inc DPTR
wtms1: mov TL0, # 09Ch
mov TH0, # 0FFh
mov TMOD, # 1
setb TCON.4
wtms2:
JNB TCON.5, wtms2
clr TCON.4
clr TCON.5
inc DPTR
mov A, DPL
orl A, DPH
jnz wtms1
đúng
KẾT THÚC