
看上面原理图是由八只LED发光管,接在89C51的P1口上,从原理图可知只有P1口为低电平(接地)时,发光管才会亮。所以只要循环控制P1口的各个引脚的电平高低变化就可使LED 循环点亮。
网友只要把下面的源程序编译后烧如提供的实验板即可看见效果。
ORG 0000H
LJMP START
ORG 0030H
START:
MOV SP,#6FH;养成习惯将堆栈先保护起来
MOV A,#80H;转换为二进制为10000000
LOOP:
MOV P1,A ;将A中的值送入P1口
RR A;右移
LCALL DELAY;凋延时程序
LJMP LOOP ;返回继续循环
delay: ;延时程序,改变R7的初值看效果如何??
MOV r7,#255
d1: MOV r6,#255
d2: nop
nop
nop
nop
djnz r6,d2
djnz r7,d1
ret
END
上面的程序如您不好理解可以看下面的:
ORG 0000H
START:MOV P1,#01111111B;第八脚的LED点亮
LCALL DELAY;延时1秒
MOV P1,#10111111B;第7脚的LED点亮
LCALL DELAY;延时1秒
MOV P1,#11011111B;第6脚的LED点亮 (以下省略)
LCALL DELAY
MOV P1,#11101111B
LCALL DELAY
MOV P1,#11110111B
LCALL DELAY
MOV P1,#11111011B
LCALL DELAY
MOV P1,#11111101B
LCALL DELAY
MOV P1,#11111110B
LCALL DELAY
MOV P1,#11111111B;完成第一次循环点亮,延时约0.25秒
AJMP START;反复循环
;延时子程序,12M晶振延时约250毫秒
DELAY:
MOV R4,#2
L3: MOV R2 ,#250
L1: MOV R3 ,#250
L2: DJNZ R3 ,L2
DJNZ R2 ,L1
DJNZ R4 ,L3
RET
END
以上两种的亮暗不同的,前种是暗流动,下面的是亮流动;您可以烧写到实验板看效果。。。。。。