单片机汇编语言让数码管显示0到9

ORG 00H
LJMP MAIN
ORG 30H
MOV DPTR,#TABLE
MAIN:MOV R7,#10
MOV A,#00H
LOOP:LCALL DISPLAY
LCALL DELAY
INC A
DJNZ R7,LOOP
LJMP MAIN
DISPLAY:PUSH ACC
MOVC A,@A+DPTR
MOV P1,A
POP ACC
RET
DELAY: MOV R4,#250
DEL1:MOV R6,#100
DEL2:MOV R5,#20
DEL3:DJNZ R5,DEL3
DJNZ R6,DEL2
DJNZ R4,DEL1
RET
TABLE:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
这是我的陈旭,p1口一直是0x00 0x33 调了大半天了,找不到问题,求助,

    ORG   00H
    LJMP  MAIN
    ORG   30H
MAIN:
    MOV   DPTR, #TABLE
    MOV   R7, #10
    MOV   A, #0
LOOP:
    LCALL  DISPLAY
    LCALL  DELAY
    INC   A
    DJNZ  R7, LOOP
    LJMP  MAIN

DISPLAY:
    PUSH  ACC
    MOVC  A, @A+DPTR
    MOV   P1, A
    POP   ACC
    RET

DELAY:

DL1:DJNZ  R6, DL1
DL2:DJNZ  R6, DL2
    DJNZ  R7, DL1
    RET

TABLE:
    DB   3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6FH

END


再试试看。

追问

谢谢,我知道了,MOV DPTR,#TABLE
放到main函数里就信啦,不过这是为什么呢?

追答

哦,程序中,R7 用重复了。
改换一个,即可。

我的习惯:
R567,用于循环延时。
R234,用于主程序的循环控制。

和你的用法,有些不同。

追问

MOV DPTR,#TABLE
放到main函数里和放外面与什么区别吗?
是不是完成一个循环后再重新跳到main函数时,由于MOV DPTR,#TABLE在main函数外面,没有被执行,查表是依旧从上一个循环截至处查表?
说的我自己都绕了。

追答

你原来,是把 MOV D...,放在 MAIN 前面。
这样,他就不会被执行。

复位后,首先就跳转到 MAIN;
后来循环时,也是从 MAIN 循环。

那么,放在 MAIN 前面的 MOV D...,从开始,就没有执行过。
而且,永远不会执行。

温馨提示:答案为网友推荐,仅供参考
相似回答