003-流水灯效果

流水灯效果

  • 功能:实现LED模块的流水灯效果

方案一:从左至右依次每次亮一个小灯(直接IO口给对应亮灭小灯赋值)

#include<reg52.h>

void main()
{
	unsigned int i;

	while(1)
	{
	 	P2 = 0xFE;    //第一个灯亮
		for(i=0; i<20000; i++);      //延时
		P2 = 0xFD;    //第二个灯亮
		for(i=0; i<20000; i++);      //延时
		P2 = 0xFB;
		for(i=0; i<20000; i++);
		P2 = 0xF7;
		for(i=0; i<20000; i++);
		P2 = 0xEF;
		for(i=0; i<20000; i++);
		P2 = 0xDF;
		for(i=0; i<20000; i++);
		P2 = 0xBF;
		for(i=0; i<20000; i++);
		P2 = 0x7F;
		for(i=0; i<20000; i++);
	}
}

 

方案二:从左至右依次每次亮一个小灯(采用移位的方式实现流水效果)

#include<reg52.h>

void main()
{
	unsigned char cnt = 0;
	unsigned int i;

	while(1)
	{
		P2 = ~(0x01 << cnt);
		for(i=0; i<30000; i++);
		cnt++;
		if(cnt>7)
		{
			cnt = 0;
		}
	}
}

 

方案三:从右至左依次每次灭一个小灯(采用移位的方式实现流水效果)

#include<reg52.h>

void main()
{
	unsigned char cnt = 0;
	unsigned int i;

	while(1)
	{
		P2 = (0x80 >> cnt);
		for(i=0; i<30000; i++);
		cnt++;
		if(cnt>7)
		{
			cnt = 0;
		}
	}
}

 

方案四:控制LED模块先流水左移,紧接着右移

#include<reg52.h>	//头文件

//控制LED模块先流水左移,紧接着右移							  

void main()		//主函数
{
	unsigned int i;
	unsigned char kong_zhi = 0x01;	//控制小灯初始状态
	unsigned char direction = 0;	//控制移动方向:0左移;1右移

	while(1)
	{	//流水循环
		P2 = ~kong_zhi;		//初始:控制小灯的开关
		for(i=0; i<30000; i++);	//延时
		if(direction == 0)	//如果direction为0,左移
		{
			kong_zhi = kong_zhi << 1;
			if(kong_zhi == 0x80)	//判断是否左移到头,如果是,改变移动方向
			{
				direction = 1;	
			}	
		}
		else	//如果direction为1,右移
		{
			kong_zhi = kong_zhi >> 1;
			if(kong_zhi == 0x01)	//判断是否右移到头,如果是,改变移动方向
			{
				direction = 0;	
			}	
		}
	}
}
posted @ 2021-01-31 12:52  shihao_Yang  阅读(556)  评论(0编辑  收藏  举报