初学者:一个让我头痛的问题
;一个让我很头痛的LDE显示子程序
;不能正常显示出数据寄存器里的值,切只能显示从左到右3位,第4 位不亮,而且串显相当严
重
;请各位朋友们指点 在下先行谢谢了
;###############################################################################
##########
;此程序为一个4位LED 显示子程序,由T1中断来控制刷 新率
;对此子程序中断所用到的赋值项做一下说明:
WDZ EQU 16H
MOV WDZ,#08H ;(08H 09H 10H 11H是4 个数据寄存器)
MOV R0,WDZ ;将数据寄存器的起始地址写入R0
MOV R1,0FEH ;从低到高开始显示
;===========================================================================
;T1中断程序
DSZD1:
PUSH PSW
CJNE R1,#0FEH,W2 ;检查是否显示到第一位
MOV P0,#0FFH
MOV A,@R0
MOVC A,@A+DPTR
MOV P0,A
MOV P2,R1
MOV R1,#0FDH
INC R0
LJMP W5
W2:
CJNE R1,#0FDH,W3 ;检查是否显示到第二位
MOV P0,#0FFH ;将0FFH传到P0,P2是为了防止显示串位
MOV P2,#0FFH
MOV A,@R0 ;将数据写入ACC
MOVC A,@A+DPTR ;查BCD码表
MOV P0,A ;将查到的BCD码 传 到P0口(数据口)
MOV P2,R1 ;将位地址码传到P2口(位控制口)
MOV R1,#0FBH ;将下一个需要显示的位地址写入R1
INC R0 ;数据寄存器地址加1
LJMP W5
W3:
CJNE R1,#0FBH,W4 ;检查是否显示到第三位
MOV P0,#0FFH
MOV P2,#0FFH
MOV A,@R0
MOVC A,@A+DPTR
MOV P0,A
MOV P2,R1
MOV R1,#0F7H
INC R0
LJMP W5
W4: ;直接显示第四位
MOV P0,#0FFH
MOV P2,#0FFH
MOV A,@R0
MOVC A,@A+DPTR
MOV P0,A
MOV P2,R1
MOV R1,#0FEH
MOV R0,WDZ
W5:
POP PSW
RETI
发表时间:2002年2月7日12:40:00