51单片机流水灯方法大全

流水灯作为LED点亮的进阶类实验,在编程难度上稍微提升了一点点,但只要琢磨一下还是非常容易搞懂的,直接上程序。
方法一:最简单易懂的流水灯了,缺点是过于冗长

#include<reg52.h>
#define uint unsigned int
sbit LED1=P2^0;
sbit LED2=P2^1;
sbit LED3=P2^2;
sbit LED4=P2^3;
sbit LED5=P2^4;
sbit LED6=P2^5;
sbit LED7=P2^6;
sbit LED8=P2^7;

void delay(uint i)	
{
	while(i--);	
}

void main()
{
	while(1)
	{
		LED1=0;
		delay(50000);
		LED1=1;
		delay(50000);
		LED2=0;
		delay(50000);
		LED2=1;
		delay(50000);
		LED3=0;
		delay(50000);
		LED3=1;
		delay(50000);
		LED4=0;
		delay(50000);
		LED4=1;
		delay(50000);
		LED5=0;
		delay(50000);
		LED5=1;
		delay(50000);
		LED6=0;
		delay(50000);
		LED6=1;
		delay(50000);
		LED7=0;	
		delay(50000);
		LED7=1;
		delay(50000);
		LED8=0;
		delay(50000);
		LED8=1;
		delay(50000);
	}
}

方法二:利用库函数来实现流水灯效果

#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
void delay(uint i)	
{
	while(i--);	
}

void main()
{
	uchar i;
	i=0xFE;
	while(1)
	{
		P2=i;
		i=_crol_(i,1);
		delay(50000);	
	}
}

方法三:通过移位来完成流水灯,个人认为比方法二稍微难懂一些

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
void delay(uint i)	
{
	while(i--);	
}

void main()
{
	while(1)
	{
		uchar a,i;
		a=0xfe;
		for(i=0;i<8;i++)
		{
			P2=a;
			a<<=1;
			a|=0X01;
			delay(50000);
		}
	}
}

方法四:利用数组的方式来完成

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar code led[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
void delay(uint i)	
{
	while(i--);	
}
void main()
{
	while(1)
	{
		uchar i;
		for(i=0;i<8;i++)
		{
			P2=led[i];
			delay(50000);	
		}
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_49046017/article/details/107597575