1、原理图与实现原理:
说明:P00 –P07接单片机的P0.0-P0.7端口;PR3为9脚的4.7K的排阻。
实现原理:让单片机的P0.0-P0.7依次置低电平0,那么L1-----L7就分别点亮,循环起来就像流水。
2、程序源码与试验结论:
2.1 实现的源码C51部分
//----------------------------------------------------------
//程序作用:LED实现流水灯
//----------------------------------------------------------
#include<reg51.h>
#include <intrins.h>
void delayms(unsigned char ms)
// 延时子程序
{
unsigned char i;
while(ms--)
{
for(i = 0; i < 120; i++);
}
}
void main(void)
{
unsigned char LED;
LED = 0xfe; //赋初值
P0 = LED; //定义LED端口P0
while(1)
{
delayms(250);//延时子程序调用
LED = _crol_(LED,1);//循环左移1位,点亮下一个LED
P0 = LED;
}
}
2.2 实现的源码汇编部分
;----------------------------------------------------------
;程序作用:流水灯
;----------------------------------------------------------
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV P0,#0FEH ; 初始点亮LED1
MOV R7,#0FEH ; 保存P0
MAIN_LP:
LCALL DELAY ; 延时
MOV A,R7 ;
RL A ; 循环移位
MOV R7,A ; 保存到R7
MOV P0,A ; 点亮下一个LED
JMP MAIN_LP ; 不停循环
DELAY: ; 延时子程序
MOV R0,#0FFH
MOV R1,#0FFH
DLY_LP:
NOP
NOP
DJNZ R0,DLY_LP
MOV R0,#0FFH
DJNZ R1,DLY_LP
RET
END
|