51单片机汇编语言动态显示程序,求解释,尽可能解释明白为什么最后可以做成显示的效果!本人初学者
ORG0000HSTART:MOVR0,#0FEHMOVR1,#0MAIN:MOVDPTR,#TABMOVP3,R0MOVA,R1MOVCA,@A+DPTRMOVP0,A...
ORG 0000H
START: MOV R0,#0FEH
MOV R1,#0
MAIN:
MOV DPTR,#TAB
MOV P3,R0
MOV A,R1
MOVC A,@A+DPTR
MOV P0,A
LCALL DL10MS
MOV A,R0
RL A
MOV R0,A
INC R1
CJNE R1,#8,MAIN
LJMP START
DL10MS:MOV R2,#1
D1:MOV R3,2
D2:MOV R4,250
DJNZ R4,$
DJNZ R3,D2
DJNZ R2,D1
RET
TAB:
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END
在线等,急求! 展开
START: MOV R0,#0FEH
MOV R1,#0
MAIN:
MOV DPTR,#TAB
MOV P3,R0
MOV A,R1
MOVC A,@A+DPTR
MOV P0,A
LCALL DL10MS
MOV A,R0
RL A
MOV R0,A
INC R1
CJNE R1,#8,MAIN
LJMP START
DL10MS:MOV R2,#1
D1:MOV R3,2
D2:MOV R4,250
DJNZ R4,$
DJNZ R3,D2
DJNZ R2,D1
RET
TAB:
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END
在线等,急求! 展开
展开全部
START: MOV R0,#0FEH;R0初始化
MOV R1,#0
MAIN:
MOV DPTR,#TAB;定义表头TAB
MOV P3,R0;开始给P3.0位清0
MOV A,R1;
MOVC A,@A+DPTR
MOV P0,A;查表,R1为0,显示0
LCALL DL10MS
MOV A,R0
RL A;左移位,R1为1,数码管第二位显示1,当R1为7,数码管第二位显示7
MOV R0,A
INC R1
CJNE R1,#8,MAIN;当R1为8时重新从第一位开始显示
LJMP START
MOV R1,#0
MAIN:
MOV DPTR,#TAB;定义表头TAB
MOV P3,R0;开始给P3.0位清0
MOV A,R1;
MOVC A,@A+DPTR
MOV P0,A;查表,R1为0,显示0
LCALL DL10MS
MOV A,R0
RL A;左移位,R1为1,数码管第二位显示1,当R1为7,数码管第二位显示7
MOV R0,A
INC R1
CJNE R1,#8,MAIN;当R1为8时重新从第一位开始显示
LJMP START
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2012-11-24
展开全部
通过查TAB表把相应要显示的数字送到P0口,使第一个数码管显示一个数字,同理再显示第二个数字.....第三个数字......
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
ORG 0000H
START: MOV R0,#0FEH ; 给R0赋值11111110 用作位选
MOV R1,#0 ;给R1赋值 用来查表
MAIN: ;
MOV DPTR,#TAB ; 将DPTR指向数据表开始位置
MOV P3,R0 ; 将R0送给P3 位选(用来选择是那个数码管亮)
MOV A,R1 ; 给R1的值给A
MOVC A,@A+DPTR ; 取出数据表的第A个值,并赋值给A
MOV P0,A ; 将A的值给P0,段码(用来选择显示的图形)
LCALL DL10MS ; 延时10ms
MOV A,R0 ; 将R0给A
RL A ;将A中的数右移(选中下一个数码管)
MOV R0,A ;将A中右移后的的值重新赋给R0
INC R1 ;R1加1
CJNE R1,#8,MAIN ;不为8则跳转 循环8次,刚好8个数码管
LJMP START ;跳到开始位置,循环执行程序
DL10MS:MOV R2,#1 ;延时程序
D1:MOV R3,2
D2:MOV R4,250
DJNZ R4,$
DJNZ R3,D2
DJNZ R2,D1
RET
TAB:
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;共阳数码管数据表
; 0 1 2 3 4 5 6 7 8 9
END
START: MOV R0,#0FEH ; 给R0赋值11111110 用作位选
MOV R1,#0 ;给R1赋值 用来查表
MAIN: ;
MOV DPTR,#TAB ; 将DPTR指向数据表开始位置
MOV P3,R0 ; 将R0送给P3 位选(用来选择是那个数码管亮)
MOV A,R1 ; 给R1的值给A
MOVC A,@A+DPTR ; 取出数据表的第A个值,并赋值给A
MOV P0,A ; 将A的值给P0,段码(用来选择显示的图形)
LCALL DL10MS ; 延时10ms
MOV A,R0 ; 将R0给A
RL A ;将A中的数右移(选中下一个数码管)
MOV R0,A ;将A中右移后的的值重新赋给R0
INC R1 ;R1加1
CJNE R1,#8,MAIN ;不为8则跳转 循环8次,刚好8个数码管
LJMP START ;跳到开始位置,循环执行程序
DL10MS:MOV R2,#1 ;延时程序
D1:MOV R3,2
D2:MOV R4,250
DJNZ R4,$
DJNZ R3,D2
DJNZ R2,D1
RET
TAB:
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;共阳数码管数据表
; 0 1 2 3 4 5 6 7 8 9
END
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
所以 这个程序 最后显示的八个数字是多少
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询