基于普中科技51单片机开发板心形灯设计

#include"reg52.h"
#include"Delay.h"
#include"intrins.h"

#define u8 unsigned char
#define u16 unsigned int

#define LED_ONE_PORT	P0
#define LED_TWO_PORT	P1
#define LED_THR_PORT	P2
#define LED_FOU_PORT	P3


void all_light(void);//LED灯全亮
void Ni_onebyeone_light(void);//逆时针逐个检测亮灭
void Shun_onebyeone_light(void);//顺时针逐个检测亮灭
void Ni_onebyeone_all_light(void);//逆时针,逐个全部点亮
void Shun_onebyeone_all_light(void);//顺时针,逐个全部点亮
void Ni_onebyeone_extinguish(void);//逆时针,逐个熄灭
void Shun_onebyeone_extinguish(void);//顺时针,逐个熄灭
void left_light_all_light(void);//左(顺时针)右(逆时针)同时由下至上,依次逐个亮起
void Shun_one_four_all_light(void);//每一组端口,均顺时针/逆时针亮灭
void half_all_light(void);//左右各一半亮灭延时1s	

void main()
{
	while(1)
  {
		all_light();
		Ni_onebyeone_light();
		Shun_onebyeone_all_light();
		Ni_onebyeone_extinguish();
		Shun_onebyeone_light();
		Ni_onebyeone_all_light();
		Shun_onebyeone_extinguish();
		left_light_all_light();
		Shun_one_four_all_light();
		half_all_light();
  }	
} 
//LED流水灯动画1:全亮3s后熄灭:检测LED灯是否均有效
void all_light(void)
{
	LED_ONE_PORT=0x00;//P0.7-P0.0
	LED_TWO_PORT=0x00;//P1.7-P1.0
	LED_THR_PORT=0x00;//P2.7-P2.0
	LED_FOU_PORT=0x00;//P3.7-P3.0
	delay_ms(1500);//亮2s
	LED_ONE_PORT=0xff;
	LED_TWO_PORT=0xff;
	LED_THR_PORT=0xff;
	LED_FOU_PORT=0xff;
	delay_ms(1500);//不亮2s
}
//LED流水灯动画2:逐个点亮一遍(逆时针)
void Ni_onebyeone_light(void)
{
	u8 i,ii,iii,iiii;//定义循环变量
	LED_ONE_PORT=0xfe;//1111 1110----P0.7-P0.0
	delay_ms(100);
	for(i=0;i<7;i++)
	{
		LED_ONE_PORT=_crol_(LED_ONE_PORT,1);
		delay_ms(100);
	}
	LED_ONE_PORT=0xff;
	
	LED_TWO_PORT=0xfe;//1111 1110----P1.7-P1.0
	delay_ms(100);
	for(ii=0;ii<7;ii++)
	{
		LED_TWO_PORT=_crol_(LED_TWO_PORT,1);
		delay_ms(100);
	}
	LED_TWO_PORT=0xff;
	
	LED_THR_PORT=0xfe;//1111 1110----P2.7-P2.0
	delay_ms(100);
	for(iii=0;iii<7;iii++)
	{
		LED_THR_PORT=_crol_(LED_THR_PORT,1);
		delay_ms(100);
	}
	LED_THR_PORT=0xff;
	
	LED_FOU_PORT=0xfe;//1111 1110----P3.7-P3.0	
	delay_ms(100);
	for(iiii=0;iiii<7;iiii++)
	{
		LED_FOU_PORT=_crol_(LED_FOU_PORT,1);
		delay_ms(100);
	}
	LED_FOU_PORT=0xff;
}

//LED流水灯动画2:逐个点亮一遍(顺时针)
void Shun_onebyeone_light(void)
{
	u8 i,ii,iii,iiii;//定义循环变量
	LED_FOU_PORT=0x7f;//1111 1110----P3.7-P3.0	
	delay_ms(100);
	for(iiii=0;iiii<7;iiii++)
	{
		LED_FOU_PORT=_cror_(LED_FOU_PORT,1);
		delay_ms(100);
	}
	LED_FOU_PORT=0xff;
	
	LED_THR_PORT=0x7f;//1111 1110----P2.7-P2.0
	delay_ms(100);
	for(iii=0;iii<7;iii++)
	{
		LED_THR_PORT=_cror_(LED_THR_PORT,1);
		delay_ms(100);
	}
	LED_THR_PORT=0xff;
	
	LED_TWO_PORT=0x7f;//1111 1110----P1.7-P1.0
	delay_ms(100);
	for(ii=0;ii<7;ii++)
	{
		LED_TWO_PORT=_cror_(LED_TWO_PORT,1);
		delay_ms(100);
	}
	LED_TWO_PORT=0xff;	
	
	LED_ONE_PORT=0x7f;//1111 1110----P0.7-P0.0
	delay_ms(100);
	for(i=0;i<7;i++)
	{
		LED_ONE_PORT=_cror_(LED_ONE_PORT,1);
		delay_ms(100);
	}
	LED_ONE_PORT=0xff;
}

//LED流水灯动画3:逐个全部点亮(逆时针)
void Ni_onebyeone_all_light(void)
{
	u8 j,jj,jjj,jjjj;//定义循环变量

	for(j=0;j<8;j++)//1111 1111逻辑左移
	{
		LED_ONE_PORT=0xff<<(j+1);
		delay_ms(100);
	}

	for(jj=0;jj<8;jj++)
	{
		LED_TWO_PORT=0xff<<(jj+1);
		delay_ms(100);
	}

	for(jjj=0;jjj<8;jjj++)
	{
		LED_THR_PORT=0xff<<(jjj+1);
		delay_ms(100);
	}

	for(jjjj=0;jjjj<8;jjjj++)
	{
		LED_FOU_PORT=0xff<<(jjjj+1);
		delay_ms(100);
	}
}

//LED流水灯动画4:逐个全部点亮(顺时针)
void Shun_onebyeone_all_light(void)
{
	u8 j,jj,jjj,jjjj;
	
	for(j=0;j<8;j++)//0111 1111----P0.7-P0.0
	{
		LED_FOU_PORT=0xff>>(j+1);//逻辑右移
		delay_ms(100);
	}
	
	for(jj=0;jj<8;jj++)
	{
		LED_THR_PORT=0xff>>(jj+1);
		delay_ms(100);
	}	
	
	LED_TWO_PORT=0xff;
	for(jjj=0;jjj<8;jjj++)
	{
		LED_TWO_PORT=0xff>>(jjj+1);
		delay_ms(100);		
	}
	
	LED_ONE_PORT=0xff;
	for(jjjj=0;jjjj<8;jjjj++)
	{
		LED_ONE_PORT=0xff>>(jjjj+1);
		delay_ms(100);		
	}	
}


//LED流水灯动画5:逆时针逐个熄灭(前提:所有灯全亮)  
void Ni_onebyeone_extinguish(void)
{
	u8 j,jj,jjj,jjjj;//定义循环变量
	for(j=0;j<8;j++)
	{
		LED_ONE_PORT=~(0xff<<(j+1));
		delay_ms(100);
	}
	
	for(jj=0;jj<8;jj++)
	{
		LED_TWO_PORT=~(0xff<<(jj+1));
		delay_ms(100);
	}
	
	for(jjj=0;jjj<8;jjj++)
	{
		LED_THR_PORT=~(0xff<<(jjj+1));
		delay_ms(100);
	}
	
	for(jjjj=0;jjjj<8;jjjj++)
	{
		LED_FOU_PORT=~(0xff<<(jjjj+1));
		delay_ms(100);
	}
}

//LED流水灯动画6:顺时针逐个熄灭(前提:所有灯全亮)
void Shun_onebyeone_extinguish(void)
{
	u8 j,jj,jjj,jjjj;//定义循环变量
	for(jjjj=0;jjjj<8;jjjj++)
	{
		LED_FOU_PORT=~(0xff>>(jjjj+1));
		delay_ms(100);
	}
	for(jjj=0;jjj<8;jjj++)
	{
		LED_THR_PORT=~(0xff>>(jjj+1));
		delay_ms(100);
	}
	for(jj=0;jj<8;jj++)
	{
		LED_TWO_PORT=~(0xff>>(jj+1));
		delay_ms(100);
	}
	for(j=0;j<8;j++)
	{
		LED_ONE_PORT=~(0xff>>(j+1));
		delay_ms(100);
	}
}

//LED流水灯动画7:左(顺时针)右(逆时针)同时由下至上,依次逐个亮起
void left_light_all_light(void)
{
	u8 i;
	for(i=0;i<8;i++)//左顺4,3			右逆1,2
	{
		LED_FOU_PORT=0xff>>(i+1);//逻辑右移
		LED_ONE_PORT=0xff<<(i+1);//逻辑左移
		delay_ms(100);		
	}
	for(i=0;i<8;i++)
	{
		LED_THR_PORT=0xff>>(i+1);//逻辑右移
		LED_TWO_PORT=0xff<<(i+1);//逻辑左移
		delay_ms(100);		
	}
}
//LED流水灯动画8:每一组端口,均顺时针/逆时针亮灭
void Shun_one_four_all_light(void)
{
	u8 i;
	for(i=0;i<8;i++)
	{
		LED_FOU_PORT=0xff>>(i+1);
		LED_THR_PORT=0xff>>(i+1);
		LED_TWO_PORT=0xff>>(i+1);
		LED_ONE_PORT=0xff>>(i+1);//顺
		delay_ms(100);
	}
	for(i=0;i<8;i++)
	{
		LED_FOU_PORT=0xff<<(i+1);
		LED_THR_PORT=0xff<<(i+1);
		LED_TWO_PORT=0xff<<(i+1);
		LED_ONE_PORT=0xff<<(i+1);//逆
		delay_ms(100);
	}
	for(i=0;i<8;i++)//4,3顺			1,2逆
	{
		LED_FOU_PORT=0xff>>(i+1);
		LED_THR_PORT=0xff>>(i+1);
		LED_TWO_PORT=0xff<<(i+1);
		LED_ONE_PORT=0xff<<(i+1);
		delay_ms(100);
	}
}
//LED流水灯动画9:左右各一半亮灭延时1s
void half_all_light(void)
{
	LED_FOU_PORT=LED_THR_PORT=0x00;//左半全亮
	delay_ms(1000);
	LED_FOU_PORT=LED_THR_PORT=0xff;//左半全灭
	LED_TWO_PORT=LED_ONE_PORT=0x00;//右半全亮
	delay_ms(1000);
	LED_TWO_PORT=LED_ONE_PORT=0xff;//左半全灭
}