用51单片机汇编语言,数码管静态轮流显示1~F

请问这个程序有什么问题?数码管显示代码没问题,我用的数码管是这么编码的
ORG 0000H
TT: MOV R4,#0FH ;循环16次
MOV A,#0H

KK: MOV DPTR,#TABLE ;存入表的起始地址
MOVC A,@A+DPTR ;按地址取代码并存入A
MOV P0,A ;将代码送P0转变为数字显示

INC A
LCALL DELAY
DJNZ R4,KK
AJMP TT
TABLE: DB 0FCH,60H,0DAH,0F2H ;代码表
DB 66H,0B6H,0BEH,0E0H
DB 0FEH,0F6H,0AAH,3EH
DB 9CH,7AH,9EH,8EH
DELAY: MOV R1,#25 ;延时
L1: MOV R2,#50
L2: MOV R3,#250
L3: DJNZ R3,L3
DJNZ R2,L2
DJNZ R1,L1
RET

END

错误给你找到了,由于在查显示编码表时 要不断地使用累加器A, 累加器A不能用来保存要轮流要显示的数据,可以改用R4.
ORG 0000H
TT: MOV R4,#0 ;循环16次

KK: MOV A,R4
MOV DPTR,#TABLE ;存入表的起始地址
MOVC A,@A+DPTR ;按地址取代码并存入A
MOV P0,A ;将代码送P0转变为数字显示

INC R4
LCALL DELAY
CJNE R4,#16,KK
AJMP TT
TABLE: DB 0FCH,60H,0DAH,0F2H ;代码表
DB 66H,0B6H,0BEH,0E0H
DB 0FEH,0F6H,0AAH,3EH
DB 9CH,7AH,9EH,8EH
DELAY: MOV R1,#25 ;延时
L1: MOV R2,#50
L2: MOV R3,#250
L3: DJNZ R3,L3
DJNZ R2,L2
DJNZ R1,L1
RET
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-07-21
改成下面这样就可以了

ORG 0000H
TT: MOV R4,#16 ;循环16次
MOV DPTR,#TABLE ;存入表的起始地址
KK: MOV A,#0H

MOVC A,@A+DPTR ;按地址取代码并存入A
MOV P0,A ;将代码送P0转变为数字显示
INC DPTR

LCALL DELAY
DJNZ R4,KK
AJMP TT

TABLE: DB 0FCH,60H,0DAH,0F2H ;代码表
DB 66H,0B6H,0BEH,0E0H
DB 0FEH,0F6H,0AAH,3EH
DB 9CH,7AH,9EH,8EH

DELAY: MOV R1,#25 ;延时
L1: MOV R2,#50
L2: MOV R3,#250
L3: DJNZ R3,L3
DJNZ R2,L2
DJNZ R1,L1
RET

END
第2个回答  2012-07-21
编写相应程序,对应数码管顺序,点亮时间等效果要求,最后执行程序段循环命令即可
相似回答