51单片机4种流水灯

  • 程序说明: LED连接在P2引脚上。
  • 程序现象:
    1、先从右到左逐个亮灭;再从左到右逐个亮灭;
    2、由两侧向中间,再中间向两侧亮灭;
    3、先右再左逐个亮起,不熄灭;再从左到右逐个熄灭;
    4、先左再右逐个亮起,不熄灭;再从右到左逐个熄灭;
#include "reg52.h" 

#define led P2	//对整个P2端口进行操作

/*	延时函数		*/
void delay(unsigned int del) 	//10ms * del
{
	unsigned int i,j;
	for(i=0; i>i);	 //将1右移i位,然后将结果取反赋值到P2口
		delay(20); 
	}	
	led=0xFF; //熄灭所有LED
}
void Led_Pipeline_2() //两侧向中间,再中间向两侧亮灭
{
	unsigned  char i,High,Low;
	delay(20);
	led=0x7E;	//初始状态将两侧点亮
	High=led&0xF0;	//高四位
	Low=led&0x0F;	  //低四位
	delay(30);
	for(i=0;i<3;i++)
	{
		High=~(~High>>1);	 //将0x8右移1位
		Low=~(~Low<<1);	   //将0x1左移1位
		
		led=(High&0xF0)|(Low&0x0F);//保证高位、低位不受到移位影响
		delay(30);
	}	
	led=0xFF; //熄灭所有LED
	delay(20);
	led=0xE7;//初始状态将中间两颗LED点亮
	delay(30);
	for(i=0;i<3;i++)
	{
		High=~(~High<<1);	 //将0x8右移i位
		Low=~(~Low>>1);	 //将0x1左移i位
		
		led=(High&0xF0)|(Low&0x0F);//保证高位、低位不受到移位影响
		delay(30);
	}	
	led=0xFF; //熄灭所有LED
}

void Led_Pipeline_3() //先右再左逐个亮起,不熄灭;再从左到右逐个熄灭;
{
	unsigned  char i;	
	delay(20);
	led=0xfe;	//初始状态将LED0点亮
	delay(10);
	for(i=0;i<8;i++)
	{
		P2=0xFE<>i);	 //将1111 1111右移i位,然后将结果取反赋值到P2口
		delay(10); 
	}	
	led=0xFF; //熄灭所有LED
}

void Led_Pipeline_4() //先左再右逐个亮起,不熄灭;再从右到左逐个熄灭;
{
	unsigned  char i;	
	delay(20);
	led=0x7F;	
	delay(10);
	for(i=0;i<8;i++)
	{
		P2=0x7F>>i;	 
		delay(10); 
	}
	led=0xFF; 
	for(i=0;i<8;i++)
	{
		P2=~(0xFF<

你可能感兴趣的:(51单片机)