在上一个试验中,我们让一个灯熄灭、点亮、熄灭、点亮的闪烁着。那么,我们如果在第一个灯熄灭之后,不是再点亮第一个灯了,而是去点亮第二个等。在第二个灯熄灭之后,再去点亮第三个灯,一次类推,不就成了流水灯了吗!下面我们来看看这个流水灯具体是如何做的。
我们的《编程试验一体板》已经接好8个发光二极管,不需要任何改动,就可以做这个试验。接线图和上一个试验一样,参考上一个试验的图片。
流水灯程序及含义如下:
star: ;程序开始
clr p1.0 ;清除p1.0,使其=0,LED1点亮
acall delay ;调用延时子程序
setb p1.0 ;置高p1.0,使其=1,LED1熄灭
clr p1.1 ;点亮LED2
acall delay
setb p1.1 ;熄灭LED2
clr p1.2 ;点亮LED3
acall delay
setb p1.2 ;熄灭LED3
clr p1.3 ;点亮LED4
acall delay
setb p1.3 ;熄灭LED4
clr p1.4 ;点亮LED5
acall delay
setb p1.4 ;熄灭LED5
clr p1.5 ;点亮LED6
acall delay
setb p1.5 ;熄灭LED6
clr p1.6 ;点亮LED7
acall delay
setb p1.6 ;熄灭LED7
clr p1.7 ;点亮LED8
acall delay
setb p1.7 ;熄灭LED8
ljmp star ;返回到开始循环
delay: ;延时子程序
mov r1,#50
del0:
mov r2,#100
del1:
mov r3,#100
djnz r3,$
djnz r2,del1
djnz r1,del0
ret ;延时子程序结束,返回到调用处的下一句
end
请将上面的程序保存为 Test.asm,进行编译,并烧写到stc89c51中,你就可以看到“流水”啦!