mình là cái mạch xuất thông điệp đơn giản ra lcd dùng at89s52 và lcd 16x2
không hiểu sao chữ H biến thành L , chữ A biến thành E, chữ K biến thành O, chữ S biến thành W ....
code mình chép trong sách vày nè
e bit p2.0
rw bit p2.1
rs bit p2.2
byteout equ p0
org 0000h
mov 0a2h,#0
lcall khtaolcd
lcall first_line
lcall second_line
sjmp $
;---------------------------------------------
khtaolcd:
setb e
clr rs
clr rw
mov a,#38h
lcall ktao
lcall ddelay41
mov a,#38h
lcall ktao
lcall ddelay100
mov a,#38h
lcall ktao
mov a,#0ch
lcall ktao
mov a,#01h
lcall ktao
mov a,#06h
lcall ktao
mov a,#80h
lcall ktao
mov a,#0fh
lcall ktao
ret
;-------------------------------------
ddelay41: mov r6,#90h
del412: mov r7,#200
djnz r7,$
djnz r6,del412
ret
;-------------------------------------
ddelay100: mov r7,#00
djnz r7,$
ret
;-------------------------------------
command_byte:
clr rs
ljmp bdelay
data_byte: setb rs
bdelay:
clr rw
clr e
nop
setb e
nop
nop
mov byteout,#0ffh
setb rw
clr rs
clr e
nop
nop
setb e
lcall ddelay100
ret
;---------------------------------------
first_line:
mov a,#080h
lcall ktao
mov dptr,#FD
lcall write
ret
;---------------------------------------
second_line:
mov a,#0c0h
lcall ktao
mov dptr,#SD
lcall write
ret
;---------------------------------------
ktao: mov byteout,a
lcall command_byte
ret
;---------------------------------------
write: mov a,#0
movc a,@a+dptr
cjne A,#99h,writea
ret
writea: mov byteout,a
acall data_byte
inc dptr
sjmp write
;---------------------------------------
FD: DB 'ABCDEFGHIJKLMNOP',099h
SD: DB 'QRSTUVWXYZ',099h
END
không hiểu sao chữ H biến thành L , chữ A biến thành E, chữ K biến thành O, chữ S biến thành W ....
code mình chép trong sách vày nè
e bit p2.0
rw bit p2.1
rs bit p2.2
byteout equ p0
org 0000h
mov 0a2h,#0
lcall khtaolcd
lcall first_line
lcall second_line
sjmp $
;---------------------------------------------
khtaolcd:
setb e
clr rs
clr rw
mov a,#38h
lcall ktao
lcall ddelay41
mov a,#38h
lcall ktao
lcall ddelay100
mov a,#38h
lcall ktao
mov a,#0ch
lcall ktao
mov a,#01h
lcall ktao
mov a,#06h
lcall ktao
mov a,#80h
lcall ktao
mov a,#0fh
lcall ktao
ret
;-------------------------------------
ddelay41: mov r6,#90h
del412: mov r7,#200
djnz r7,$
djnz r6,del412
ret
;-------------------------------------
ddelay100: mov r7,#00
djnz r7,$
ret
;-------------------------------------
command_byte:
clr rs
ljmp bdelay
data_byte: setb rs
bdelay:
clr rw
clr e
nop
setb e
nop
nop
mov byteout,#0ffh
setb rw
clr rs
clr e
nop
nop
setb e
lcall ddelay100
ret
;---------------------------------------
first_line:
mov a,#080h
lcall ktao
mov dptr,#FD
lcall write
ret
;---------------------------------------
second_line:
mov a,#0c0h
lcall ktao
mov dptr,#SD
lcall write
ret
;---------------------------------------
ktao: mov byteout,a
lcall command_byte
ret
;---------------------------------------
write: mov a,#0
movc a,@a+dptr
cjne A,#99h,writea
ret
writea: mov byteout,a
acall data_byte
inc dptr
sjmp write
;---------------------------------------
FD: DB 'ABCDEFGHIJKLMNOP',099h
SD: DB 'QRSTUVWXYZ',099h
END
Comment