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的,没汇编的~这个汇编和你的差不多,我测试通过~希望能帮到你
单者拦配片机 以前搞过,现在也忘记的差不多了! 在这里你是问不衡斗出来答案的.
到首指中国工控网上去发贴吧!
你要是静态显示的话,可以用让族斗查表
哎,我也是lcd1602加单片机坦磨做的穗神,需要动态显示,不知道怎么办