求:8字数码管动态显示0到99的汇编程序

8字数码管动态显示0到99的汇编程序 要是动态的!

我总共就这么点分数了 拜托!!

写那么长干嘛,p1口接数码管扫描。p0口接8段字符显示,已测试正常。
ORG 0000H
STAER: MOV DPTR,#K1
MOV 41H,#00H
MOV 42H,#00H
MOV R2,#0FFH
A2: ACALL A1;调用显示子程序
DJNZ R2,A2
MOV R2,#0FFH
INC 41H
MOV A,41H
CJNE A,#0AH,A2
MOV 41H,#00H
INC 42H
MOV A,42H
CJNE A,#0AH,A2
LJMP STAER;满100就清零重新开始
A1: MOV P0,#0FFH
MOV P1,#0FEH;取个位数的7段代码
MOV A,41H
MOVC A,@A+DPTR
MOV P0,A ;送出个位的7段代码
ACALL LOOP
MOV P0,#0FFH
MOV P1,#0FDH
MOV A,42H
MOVC A,@A+DPTR
ACALL LOOP
RET
LOOP: MOV R3,#100;1毫秒延时按12MHZ计算
D1: MOV R4,#10
D2: DJNZ R4,D2
DJNZ R3,D1
RET
K1: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
;实验板上的7段数码管0~9数字的共阴显示代码
END

注释比程序还麻烦,自己看了
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-04-25
a_bit equ 20h ;数码管个位数存放内存位置
b_bit equ 21h ;数码管十位数存放内存位置
temp equ 22h ;计数器数值存放内存位置

star: mov temp,#0 ;初始化计数器,从0开始
stlop: acall display;调用显示子程序

ACALL DEL

inc temp;对计数器加1
mov a,temp
cjne a,#100,next ;判断计数器是否满100?
mov temp,#0;满100就清零重新开始
next: ljmp stlop;不满就循环执行

;显示子程序
display: mov a,temp ;将temp中的十六进制数转换成10进制
mov b,#10 ;10进制/10=10进制
div ab
mov b_bit,a ;十位在a
mov a_bit,b ;个位在b

mov dptr,#numtab ;指定查表启始地址
mov r0,#4
dpl1: mov r1,#250 ;
dplop: mov a,a_bit ;取个位数
MOVC A,@A+DPTR ;查个位数的7段代码
mov p0,a ;送出个位的7段代码
clr p1.3 ;开个位显示
acall d1ms ;显示162微秒
setb p1.3;关闭个位显示,防止鬼影
mov a,b_bit ;取十位数
MOVC A,@A+DPTR ;查十位数的7段代码
mov p0,a ;送出十位的7段代码
clr p1.2 ;开十位显示
acall d1ms ;显示162微秒
setb p1.2;关闭十位显示,防止鬼影
djnz r1,dplop ;循环执行250次
djnz r0,dpl1 ;循环执行250X4=1000次
ret

;2+2X80=162微秒,延时按12MHZ计算
D1MS: MOV R7,#80
DJNZ R7,$
RET
DEL:MOV R2,#04H
D1:MOV R3,#0FFH
D2:MOV R4,#0FFH
D3:DJNZ R4,D3
DJNZ R3,D2
DJNZ R2,D1
RET

;实验板上的7段数码管0~9数字的共阴显示代码
numtab: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH

end a_bit equ 20h ;数码管个位数存放内存位置
b_bit equ 21h ;数码管十位数存放内存位置
temp equ 22h ;计数器数值存放内存位置

star: mov temp,#0 ;初始化计数器,从0开始
stlop: acall display;调用显示子程序

ACALL DEL

inc temp;对计数器加1
mov a,temp
cjne a,#100,next ;判断计数器是否满100?
mov temp,#0;满100就清零重新开始
next: ljmp stlop;不满就循环执行

;显示子程序
display: mov a,temp ;将temp中的十六进制数转换成10进制
mov b,#10 ;10进制/10=10进制
div ab
mov b_bit,a ;十位在a
mov a_bit,b ;个位在b

mov dptr,#numtab ;指定查表启始地址
mov r0,#4
dpl1: mov r1,#250 ;
dplop: mov a,a_bit ;取个位数
MOVC A,@A+DPTR ;查个位数的7段代码
mov p0,a ;送出个位的7段代码
clr p1.3 ;开个位显示
acall d1ms ;显示162微秒
setb p1.3;关闭个位显示,防止鬼影
mov a,b_bit ;取十位数
MOVC A,@A+DPTR ;查十位数的7段代码
mov p0,a ;送出十位的7段代码
clr p1.2 ;开十位显示
acall d1ms ;显示162微秒
setb p1.2;关闭十位显示,防止鬼影
djnz r1,dplop ;循环执行250次
djnz r0,dpl1 ;循环执行250X4=1000次
ret

;2+2X80=162微秒,延时按12MHZ计算
D1MS: MOV R7,#80
DJNZ R7,$
RET
DEL:MOV R2,#04H
D1:MOV R3,#0FFH
D2:MOV R4,#0FFH
D3:DJNZ R4,D3
DJNZ R3,D2
DJNZ R2,D1
RET

;实验板上的7段数码管0~9数字的共阴显示代码
numtab: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH

end
第2个回答  2009-04-25
//*楼下的真他娘的贱,直接复制我的答案*//

a_bit equ 20h ;数码管个位数存放内存位置
b_bit equ 21h ;数码管十位数存放内存位置
temp equ 22h ;计数器数值存放内存位置

star: mov temp,#0 ;初始化计数器,从0开始
stlop: acall display;调用显示子程序

ACALL DEL

inc temp;对计数器加1
mov a,temp
cjne a,#100,next ;判断计数器是否满100?
mov temp,#0;满100就清零重新开始
next: ljmp stlop;不满就循环执行

;显示子程序
display: mov a,temp ;将temp中的十六进制数转换成10进制
mov b,#10 ;10进制/10=10进制
div ab
mov b_bit,a ;十位在a
mov a_bit,b ;个位在b

mov dptr,#numtab ;指定查表启始地址
mov r0,#4
dpl1: mov r1,#250 ;
dplop: mov a,a_bit ;取个位数
MOVC A,@A+DPTR ;查个位数的7段代码
mov p0,a ;送出个位的7段代码
clr p1.3 ;开个位显示
acall d1ms ;显示162微秒
setb p1.3;关闭个位显示,防止鬼影
mov a,b_bit ;取十位数
MOVC A,@A+DPTR ;查十位数的7段代码
mov p0,a ;送出十位的7段代码
clr p1.2 ;开十位显示
acall d1ms ;显示162微秒
setb p1.2;关闭十位显示,防止鬼影
djnz r1,dplop ;循环执行250次
djnz r0,dpl1 ;循环执行250X4=1000次
ret

;2+2X80=162微秒,延时按12MHZ计算
D1MS: MOV R7,#80
DJNZ R7,$
RET
DEL:MOV R2,#04H
D1:MOV R3,#0FFH
D2:MOV R4,#0FFH
D3:DJNZ R4,D3
DJNZ R3,D2
DJNZ R2,D1
RET

;实验板上的7段数码管0~9数字的共阴显示代码
numtab: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH

end
第3个回答  2020-03-02
写那么长干嘛,p1口接数码管扫描。p0口接8段字符显示,已测试正常。
ORG0000H
STAER:MOVDPTR,#K1
MOV41H,#00H
MOV42H,#00H
MOVR2,#0FFH
A2:ACALLA1;调用显示子程序
DJNZR2,A2
MOVR2,#0FFH
INC41H
MOVA,41H
CJNEA,#0AH,A2
MOV41H,#00H
INC42H
MOVA,42H
CJNEA,#0AH,A2
LJMPSTAER;满100就清零重新开始
A1:MOVP0,#0FFH
MOVP1,#0FEH;取个位数的7段代码
MOVA,41H
MOVCA,@A+DPTR
MOVP0,A;送出个位的7段代码
ACALLLOOP
MOVP0,#0FFH
MOVP1,#0FDH
MOVA,42H
MOVCA,@A+DPTR
ACALLLOOP
RET
LOOP:MOVR3,#100;1毫秒延时按12MHZ计算
D1:MOVR4,#10
D2:DJNZR4,D2
DJNZR3,D1
RET
K1:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
;实验板上的7段数码管0~9数字的共阴显示代码
END
注释比程序还麻烦,自己看了
第4个回答  2013-02-17
下列程序,即可显示 00~99:

ORG 0000H
START:
MOV P2, #0
MOV R2, #10
M1: MOV R3, #10
M2: MOV R4, #0
M3: MOV A, R3
SETB P2.0
CALL OP0
CLR P2.0
MOV A, R2
SETB P2.1
CALL OP0
CLR P2.1
DJNZ R4, M3
DJNZ R2, M2
MOV R2, #10
DJNZ R3, M2
SJMP M1
;--------------------------
OP0:ADD A, #(K1 - $ - 4)
MOVC A, @A + PC
MOV P0, A ;送出段代码
DJNZ R7, $
DJNZ R7, $
RET
K1: DB 90H,80H,0F8H,82H,92H,99H,0B0H,0A4H,0F9H,0C0H
END
相似回答