你这程序没有让他再回去运行的途径,他可就乱跑飞了。只是不在你想的这程序中运行了。
;试试如下程序:
ORG 0000H
NUM1:
MOV SP, #70H
NUM12:
CALL PLACE_1_8
;----------------------------
MOV R6, #3
N1:
CALL DISP_0D8S
DJNZ R6, N1
;----------------------------
MOV R6, #8
N2:
CALL LEFT_ONE
CALL DISP_0D8S
DJNZ R6, N2
JMP NUM12
;-----------------------------------
LEFT_ONE:
MOV R0, #40H
MOV R1, #41H
MOV R2, #7
L0:
MOV A, @R1
MOV @R0, A
INC R0
INC R1
DJNZ R2, L0
MOV @R0, #0 ;空白
RET
;-----------------------------------
PLACE_1_8:
MOV 40H, #01H
MOV 41H, #02H
MOV 42H, #03H
MOV 43H, #04H
MOV 44H, #05H
MOV 45H, #06H
MOV 46H, #07H
MOV 47H, #08H
RET
;-----------------------------------
DISP_0D8S: ;显示约0.8s
MOV R7, #100
D1:
CALL DISP
DJNZ R7, D1
RET
;-----------------------------------
DISP:
PUSH PSW
PUSH ACC
SETB RS0
MOV R0, #40H
MOV R1, #8
D_LOOP:
MOV DPTR, #DUAN
MOV A, @R0
MOVC A, @A + DPTR
MOV P0, A ;段选
MOV DPTR, #WEI
MOV A, R1
MOVC A, @A + DPTR
MOV P2, A ;位选
DJNZ R7, $
DJNZ R7, $
MOV P2, #255 ;关闭
INC R0
DJNZ R1, D_LOOP
POP ACC
POP PSW
RET
DUAN: DB 00H, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH ;空,1~8
WEI: DB 00H, 7FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDH,0FEH ;选通1-8
;-----------------------------------
END
用 P2 口控制位选,画图时,布线方便一些。
程序问题很大的,为什么有“主循环”,你得有一个循环呀,不然,就如流水一样,逝者如斯乎了,飞走了,你在
djnz r1,num123
mov r1,#100
之后加一句
sjmp $
或者ljmp num123也可以
逻辑有些混乱,最后好象没有完... mov r1,#100
????/
应该用循环方式处理....