黄金会员
主题
回帖0
积分9861
阅读权限40
注册时间2009-11-11
最后登录1970-1-1
在线时间 小时
|
org 0000h
ajmp 0030h
org 0030h
rck bit p2.0;显示更新使能脚
reset:
mov scon,#00h
clr es
;;;;;;;;;;;;;;;;;;;;;;;
;;;;; ;lcd初始化;;;;;;;
ACALL ys45 ;上电延时
acall ys45
acall ys45
acall ys45
mov a,#33h
acall xzl
mov a,#30h
acall xzl
mov a,#02h
acall xzl
mov a,#101000b ;4BIT ,2行显示
acall delay1
acall xzl
mov a,#01h ;清屏
acall xzl
mov a,#00000010b ;光标复位
acall xzl
MOV A,#00000110B ;地址增量1,字符不移动
acall xzl
mov a,#00001111b ;显示开,光标有,光标闪
acall xzl
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV A,#83H ;指定显示地址
mov r1,#10 ;显示10个字符
ACALL XZL
mov dptr,#tab
disp:mov a,#00h
movc a,@a+dptr
acall xsj
inc dptr
djnz r1,disp
mov a,#0c6h ;指定显示地址
acall xzl
mov a,#41h ;显示"A"
acall xsj
mov a,#41h
acall xsj
mov a,#41h
acall xsj
mov a,#41h
acall xsj
ajmp $
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;写指令 ;;;;;;;;;;;;;;;;;;
xzl:
mov 30h,a ;指令数据送30H暂存
acall xzl1
mov a,30h
swap a
xzl1: CLR RCK ;拉底RCK
anl a,#0F0h ;屏蔽低4位(4线驱动1602要求先写高4位再写低4位
ORL A,#000000001B;RS=0,E=1(指定是指令)
mov sbuf,a
jnb ti,$
clr ti
SETB RCK ;RCK 为高,存储寄存器内容更新
ACALL DELAY1
CLR rck
ANL A,#11111110B
MOV SBUF,A
jnb ti,$
clr ti
SETB RCK
;ACALL DELAY1
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;写数据 ;;;;;;;;;;;;;;;
xsj:
mov 30h,a ;显示数据送30H暂存
acall xsj1
mov a,30h
swap a
xsj1: CLR RCK ;拉底RCK
anl a,#0f0h ;屏蔽低4位(4线驱动1602要求先写高4位再写低4位)
orl a,#00000011b ;RS=1,E=1 指定写数据
mov sbuf,a
jnb ti,$
clr ti
SETB RCK ;RCK 为高,存储寄存器内容更新(据595文档说给RCK的正脉冲宽度只要几十纳秒)
NOP ;增加5个空操做,这样换用24MHZ晶振时也能很好的显示
NOP
NOP
NOP
NOP
CLR rck
ANL A,#11111110B ;E脚对应位设为0(使能有效,给E一个下降沿)
mov sbuf,a
jnb ti,$
clr ti
SETB rck
;ACALL DELAY1
ret
ys45:mov r7,#0bh
ys1: mov r6,#0cbh
djnz r6,$
djnz r7,ys1
ret
delay1:mov r7,#20 ;这是初始化完成后正常操作1602的延时程序
d11: mov r6,#15
djnz r6,$
djnz r7,d11
ret
tab:db "abcde12345"
end
|
-
-
-
595.rar
18.06 KB, 下载次数: 2468, 下载积分: 一乐金币 -1
|