LCD1602显示问题

2024-11-20 10:35:36
推荐回答(3个)
回答1:

RS EQU P3.0 ;决定要传送的是命令还是数据
RW EQU P3.1 ;决定要读还是写,一般写的时候多.
E EQU P3.2 ;时钟信号
ORG 0000H

main:

MOV p1,#00000001B ;清屏
ACALL ENABLE

MOV p1,#00000001B ;清屏
ACALL ENABLE

MOV p1,#00111000B ;设置16*2显示,5*7点阵8位数据口
ACALL ENABLE

MOV p1,#00001100B ;开显示,显示光标光标闪烁
ACALL ENABLE

MOV p1,#00000110B ;读写一个字符地址指针加一,整屏不移动
ACALL ENABLE

LCALL DELAY1
LCALL DELAY1
MOV p1,#080H ;第一行显示起宏棚始地址
ACALL ENABLE

MOV dptr,#tab3
LCALL write1
LCALL DELAY1
LCALL DELAY1

mov p1,#0c0h ;第二行显示起始地址
call enable ;调用写指令
mov dptr,#tab2 ;第二行表头位置
call write1 ;调用第二行写子程序
AJMP $

key:
mov a,p2
jb acc.0,key
call delay1
jb acc.0,key
ret

ENABLE:
CLR RS ;写指令

CLR RW

CLR E

ACALL DELAY

SETB E

RET

DELAY:
MOV p1,#0FFH

CLR RS

SETB RW

CLR E

NOP

SETB E

JB p1.7,DELAY ;忙岩宏检测

RET

delay1:
mov r7,#250
d:mov r6,#250
djnz r6,$
djnz r7,d
ret
write1: ;写数据串
mov r1,#00h ;将R1清0
a1:

mov a,r1 ;把R1的值送到ACC
movc a,@a+dptr ;查表取将显示的数据并把要显示的数送入ACC
call write2 ;调用写程序写入单个字节
inc r1 ;将工作蔽枣则寄存器指针加一
mov a,r1 ;把R1的内容送到ACC
cjne a,#16,a1 ;acc的值加到16后就返回到a1处
ret
write2: ;写数据
mov p1,a
SETB RS
CLR RW
CLR E
JB p1.7,$
SETB E
lcall delay1
ret
tab3: db "123456789abcdefg"
tab2: db "1234567890-=\!@#"
END

汇编是我复制来的,我自己有C的,没汇编的~这个汇编和你的差不多,我测试通过~希望能帮到你

回答2:

单者拦配片机 以前搞过,现在也忘记的差不多了! 在这里你是问不衡斗出来答案的.

到首指中国工控网上去发贴吧!

回答3:

你要是静态显示的话,可以用让族斗查表

哎,我也是lcd1602加单片机坦磨做的穗神,需要动态显示,不知道怎么办