|
发表于 2006-6-20 10:51:39
|
显示全部楼层
我段时间正在搞LCD1602的小实验,我不会用C做我用的是汇编做的,你们能帮我看一下吗?不知道那里出错了,就是不可以用.谢谢!
;LCD程序实验(1602)
DAT EQU 21H
RS BIT P1.2
RW BIT P1.6
E BIT P1.3
;初时化
LCD:CALL TM15MS;延时15MS
MOV A,#38H ;工能设置DL=8位数据口
CALL PR1
CALL TM5MS
MOV A,#38H
CALL PR1
CALL TM5MS
MOV A,#38H
CALL PR2
MOV A,#38H
CALL PR2
MOV A,#08H;设定显示开关为关
CALL PR2
MOV A,#01H;清屏
CALL PR2
MOV A,#06H;设定数据输入法式
CALL PR2
MOV A,#0CH;显示屏开关设定
RET
;显示数据输入
DZP1:MOV A,#06H
CALL PR2
MOV A,#80H
CALL PR2
MOV DPTR,#TAB
MOV R2,#12
MOV R3,#00H
WRIN:MOV A,R3
MOVC A,@A+DPTR
MOV DAT,A
LCALL PR3
LCALL MS_S
INC R3
DJNZ R2,WRIN
SJMP $
TAB:DB 43H,75H,72H,73H,6FH,72H,20H
DB 57H,72H,69H,74H,65H
;15ms延时时间程序
TM15MS:PUSH 07H
PUSH 06H
MOV R6,#30H
D15:MOV R7,#250
DJNZ R7,$
DJNZ R6,D15
POP 06H
POP 07H
RET
;5ms延时时间程序
TM5MS:PUSH 07H
PUSH 06H
MOV R6,#10
D5:MOV R7,#250
DJNZ R7,$
DJNZ R6,D5
POP 06H
POP 07H
RET
;1S延时程序
MS_S:PUSH 07H
PUSH 06H
MOV R6,#0FFH
DZ:MOV R7,#250
DJNZ R7,$
DJNZ R6,DZ
POP 06H
POP 07H
RET
;写指令子程序,不查询忙标志
PR1:CLR RS
CLR RW
SETB E
MOV P0,A
CLR E
MOV P0,#0FFH
RET
;写指令子程序,查询忙标志
PR2:PUSH ACC
CLR RS
CLR RW
SETB E
MOV P0,A
CLR E
MOV P0,#0FFH
SETB RW
PR2_1:SETB E
MOV A,P0
CLR E
JB ACC.7,PR2_1
POP ACC
RET
;写数据程序,查询忙标志
PR3:PUSH ACC
CLR RS
SETB RW
DD: MOV P0,#0FFH
SETB E
MOV A,P0
JB ACC.7,DD
SETB RS
CLR RW
MOV P0,DAT
CLR E
RET
END |
|