流水灯的本质就是使八个LED灯依次点亮,本文所采用的LED灯为低电平有效,故对八个LED灯依次赋低电平。对此,我们通过使用指令(RL:累加器循环左移)实现循环点亮。

代码如下:
ORG 0000H
AJMP MAIN
MAIN:
MOV R0,#50H %给R0,R1赋初值,用于延时函数的循环次数
MOV R1,#0F0H
MOV P2,#0FEH %P2端口与LED灯相连,设置灯的初始状态为1111 1110,即D0亮
S1: %RL为累加器循环左移,故设置P2的状态,需要先将P2的给累加器A
MOV A,P2
RL A
MOV P2,A
LCALL DEL %调用延时子程序
AJMP S1
DEL:
MOV R0,#50H %重新赋值
DJNZ R0,$ %原地跳转,内层循环
DJNZ R1,DEL %外层循环
MOV R1,#0F0H %重新赋值
RET
END