求这道数码管单片机程序的每一步含义

数码管显示0-9ORG 0000H
MM0 EQU 50H
MM1 EQU 51H
MM2 EQU 52H
LJMP MAIN
ORG 0030H
MAIN:MOV P3,#0F0H
MOV DPTR,#TAB
MOV R7,#0
LOOP:MOV A,R7
MOVC A,@A+DPTR
MOV P2,A
LCALL DELAY1S
INC R7
CJNE R7,#10,LOOP
MOV R7,#0
SJMP LOOP
DELAY1S:MOV MM0,#10
DELAY1S0:MOV MM1,#200
DELAY1S1:MOV MM2,#248
DJNZ MM2,$
NOP
DJNZ MM1,DELAY1S1
DJNZ MM0,DELAY1S0
RET

TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

END

嘿嘿 还是俺来帮你回答吧
;数码管显示0-9
;用等价伪指令 EQU 将50H、51H、52H定义为3个软件计数器即MM0、MM1、MM3
MM0 EQU 50H
MM1 EQU 51H
MM2 EQU 52H
ORG 0000H ; 0000H 为单片机起始地址
LJMP MAIN ;跳转至主程序
ORG 0030H
MAIN:MOV P3,#0F0H ;主程序 P3口的高四位为1,第四位为0
MOV DPTR,#TAB ;数据指针指向TAB表的首地址
MOV R7,#0 ;偏移量初始值为0
LOOP:MOV A,R7
MOVC A,@A+DPTR ;将TAB表中的偏移量对应的数据 即要显示的数的显示编码送A
MOV P2,A ;送到P2口显示
LCALL DELAY1S ;调用延时程序 延时1秒钟
INC R7 ;偏移量加1 即要显示的数加1
CJNE R7,#10,LOOP ;0~9十个数没有显示完 则转继续LOOP继续显示
MOV R7,#0 ;10个数据显示完毕,重新进行偏移量初始化
SJMP LOOP//继续上述过程
DELAY1S:MOV MM0,#10 ;延时1秒子程序 外循环次数MM0为10
DELAY1S0:MOV MM1,#200 ;第一层内循环 循环次数MM1为200
DELAY1S1:MOV MM2,#248 ;第二层内循环 循环次数MM1为248
DJNZ MM2,$
NOP ;空操作 延时1微妙
DJNZ MM1,DELAY1S1 ;循环次数MM1 减1 不等于0 转DELAY1S1继续循环
DJNZ MM0,DELAY1S0 ;循环次数MM0 减1 不等于0 转DELAY1S2继续循环
RET ;子程序返回

TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
;按字节定义0~9的显示编码

END ;汇编结束
呵呵 满意就给加分阿
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-10-19
数码管显示0-9ORG 0000H //定义起始地址
MM0 EQU 50H
MM1 EQU 51H
MM2 EQU 52H//没什么具体意思,完全可以用其他寄存器代替,如R2,R4,R5;这样浪费内存
LJMP MAIN //跳转至主程序
ORG 0030H
MAIN:MOV P3,#0F0H //P3口的高四位为1,第四位为0
MOV DPTR,#TAB //指针指向TAB的首地址
MOV R7,#0 //偏移量
LOOP:MOV A,R7
MOVC A,@A+DPTR //将TAB表中的第个数据读入A寄存器
MOV P2,A //送到P2口显示
LCALL DELAY1S //调用延时程序
INC R7//偏移量加1
CJNE R7,#10,LOOP //TAB表中的10个数据未全送入P2口显示,则继续完成上述过程
MOV R7,#0//10个数据显示完毕,将计数器计数偏移量的R7清0
SJMP LOOP//继续上述过程
DELAY1S:MOV MM0,#10 //延时程序
DELAY1S0:MOV MM1,#200
DELAY1S1:MOV MM2,#248
DJNZ MM2,$
NOP
DJNZ MM1,DELAY1S1
DJNZ MM0,DELAY1S0
RET