ORG 00H ;程序的开始地址
LJMP START ;跳到程序的起始位置
ORG 30H ;主要是为了跳过堆栈段
START: ;只是一个标号
MOV A,#00H ;数据的传送
mov 90H,#0B
mov 91H,#1B
mov 92H,#1B
mov 93H,#1B
mov 94H,#0B
mov 95H,#0
mov 96H,#0
mov 97H,#0
LOOP:
mov P0,A
LCALL DELAY;调用延时子程序
CPL A ;取反
JMP LOOP
;============================延时子程序
DELAY:
MOV R7,#5
LOOP3:
MOV R5,#0
LOOP2:
MOV R6,#0
LOOP1:
DJNZ R6,LOOP1
DJNZ R5,LOOP2
DJNZ R7,LOOP3
RET ;子程序返回指令
;===================================
END
本来想这段程序应该会是所有的led灯亮灭交替,但是实际上市点阵上最上面一排进行亮灭交替
当我把代码改为:
ORG 00H ;程序的开始地址
LJMP START ;跳到程序的起始位置
ORG 30H ;主要是为了跳过堆栈段
START: ;只是一个标号
mov P1=0X0EH
LOOP:
mov P0,A
//NOP;空操作
LCALL DELAY;调用延时子程序
CPL A ;取反
JMP LOOP
;============================延时子程序
DELAY:
MOV R7,#5
LOOP3:
MOV R5,#0
LOOP2:
MOV R6,#0
LOOP1:
DJNZ R6,LOOP1
DJNZ R5,LOOP2
DJNZ R7,LOOP3
RET ;子程序返回指令
;===================================
END
此时所有led亮灭交替,第二段程序中的P1=0X0EH和第一段程序红色文字应该是等价的,问什么情况不一样
本文探讨了两段51单片机程序,分别实现LED灯的亮灭交替效果。第一段程序仅使点阵上的顶部一行LED灯闪烁,而修改后的第二段程序实现了所有LED灯的交替闪烁。通过对比分析,探究导致不同现象的原因。
1082

被折叠的 条评论
为什么被折叠?



