51单片机的流水灯程序—

来源:百度知道 编辑:UC知道 时间:2024/09/26 00:20:44
;此程序是用查表实现的流水灯程序,但是不能仿真成功,我找不出错误。
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN: MOV SP,#60H;
MOV P1,#0FFH;
MOV DPTR, #LED_TABLE;
LIGHT:
MOV R7, #42H;
LOOP: MOV A,#42;
SUBB A,R7;
MOVC A, @A+DPTR;
MOV P1, A;
LCALL DELAY;
DJNZ R7, LOOP;
SJMP LIGHT;
DELAY:MOV R7,#10H;
DELAY0:MOV R6,#7FH;
DELAY1:MOV R5,#7FH;
DJNZ R5,$;
DJNZ R6,DELAY1;
DJNZ R7,DELAY0;
RET
LED_TABLE:
DB:0FFH,
DB:0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH, ;依次逐个点亮
DB:0FEH,0FCH,0F8H,0F0H,0EFH,0C0H,080H,000H, ;依次逐个叠加
DB:080H,0C0H,0E0H,0F0H,0F8H,0FCH,0FEH,0FFH, ;依次逐个递减
DB:07EH,0BDH,0DBH,0E7H,0E7H,0DBH,0BDH,07EH, ;两边靠拢后分开
DB:07EH,03CH,018H,000H,000H,018H,03CH,07EH, ;从两边叠加后递减
DB:000H ;全部点亮
END

MOV DPTR, #LED_TABLE;

r7在赋了42H后就不能在延时程序里再用了。因为在延时程序里用的话,当从延时程序里跳出后,R7的值就不是42H了。
把这三句(DJNZ R7, LOOP; DELAY:MOV R7,#10H; DJNZ R7,DELAY0;)里的r7改成R4 试试。