Một số hiệu ứng điều khiển led khi dùng 74hc595

supergoodfriends

Trứng gà
Mình có sơ đồ kết nối bên dưới

Đường data nối với PIO2_9, Latch PIO2_10 Shift PIO2_11
Dưới đây là một số hiệu ứng mình viết ra đã test.
Hi vọng có thể giúp ích cho các bạn.Cũng như mong các bạn bổ sung thêm một số hiệu ứng nữa.
Code:
#define dataport	2
#define databit	9
#define latchport	2
#define latchbit	10
#define shiftport	2
#define shiftbit	11

void Init_Led()
{
	init_timer32(0,TIME_INTERVAL);
	enable_timer32(0);
	GPIOSetDir(dataport,databit,1);
	GPIOSetDir(shiftport,shiftbit,1);
	GPIOSetDir(latchport,latchbit,1);
	GPIOSetValue(latchport,latchbit,0);
}
void Shift_Register32(uint32_t x)
{	uint32_t temp;
	int8_t i;
	for (i=0;i<32;i++)
	{
		temp=x;
		temp=x&(0x80000000);
		if (temp==0x80000000)
			GPIOSetValue(dataport,databit,1);
		else
			GPIOSetValue(dataport,databit,0);
		x*=2; //tuong voi lenh dich trai 1 bit bien data
		GPIOSetValue(shiftport,shiftbit,0);//tạo xung canh len tren chan shift
		GPIOSetValue(shiftport,shiftbit,1);
	}
	GPIOSetValue(latchport,latchbit,0); //tạo xung cạnh lên tren chan latch
	GPIOSetValue(latchport,latchbit,1);
}
/**********************************************************************
 * led sang tu tu
 * 0 sang từ 0-31
 * 1 sang từ 31-0
 *********************************************************************/
void ledsangtutu(uint8_t sense)
{ 	uint32_t data;
	int8_t i;
	if (sense==0)
	{
		data=0xFFFFFFFF;
		for (i=0;i<=32;i++)
		{
		Shift_Register32(data);
		delay32Ms(0,100);
		data=data&(~(1<<i));
		}
	}
	else
	{
		data=0xFFFFFFFF;
		for (i=32;i>=0;i--)
		{
			Shift_Register32(data);
			delay32Ms(0,100);
			data=data&(~(1<<(i-1)));
		}
	}
}
/**********************************************************************
 * led sang tu vị trí thứ i
 * 0 sang từ i-31
 * 1 sang từ 31-i
 *********************************************************************/
void ledsangvitri(uint8_t sense, int8_t j)
{ 	uint32_t data;
	int8_t i;
	if (sense==0)
	{
		data=0xFFFFFFFF;
		for (i=j;i<=32;i++)
		{
		Shift_Register32(data);
		delay32Ms(0,100);
		data=data&(~(1<<i));
		}
	}
	else
	{
		data=0xFFFFFFFF;
		for (i=32;i>=j;i--)
		{
			Shift_Register32(data);
			delay32Ms(0,100);
			data=data&(~(1<<(i-1)));
		}
	}
}
/************************************************************
 * Led tat tu tu
 * 0 tắt từ 0 về 32
 * 1 tắt từ 32 về 0
 *************************************************************/
void ledtattutu(uint8_t sense)
{	uint32_t data;
	int8_t i;
	if (sense==0)
	{
		data=0x00000000;
		for (i=0;i<=32;i++)
		{
		Shift_Register32(data);
		delay32Ms(0,100);
		data=data|(1<<i);
		}
	}
	else
	{
			data=0x00000000;
			for (i=32;i>=0;i--)
			{
				Shift_Register32(data);
				delay32Ms(0,100);
				data=data|(1<<(i-1));
			}
	}
}
/************************************************************
 * Led tat tu vi tri thu j
 * sense = 0 tắt từ 0 về 32
 * sense = 1 tắt từ 32 về 0
 *************************************************************/
void ledtatvitri(uint8_t sense, int8_t j)
{	uint32_t data;
	int8_t i;
	if (sense==0)
	{
		data=0x00000000;
		for (i=1;i<=j;i++)  // edit lại data trước khi cho tắt dần
		data=data|(1<<(i-1)); // Tất cả các led từ j trở về 0 đểu phải
		for (i=j;i<=32;i++)
		{
		Shift_Register32(data);
		delay32Ms(0,100);
		data=data|(1<<i);
		}
	}
	else
	{	data=0x00000000;

			for (i=1;i<=j;i++)  // edit lại data trước khi cho tắt dần
			data=data|(1<<(i-1)); // Tất cả các led từ j trở về 0 đểu phải tắt

			for (i=32;i>=j;i--)
			{
				Shift_Register32(data);
				delay32Ms(0,100);
				data=data|(1<<(i-1));
			}
	}
}
/************************************************************
 * Led sáng từ trong ra ngoài và từ ngoài vào trong
 * sense = 0 sáng từ vị trí thứ i ra ngoai 31
 * sense = 1 sáng từ ngoài vào vị trí thứ i
 *************************************************************/
void ledsanghaoquang(uint8_t sense, int8_t j)
{	uint32_t data;
	int8_t i,k;
	if (sense==0)
	{
		data=0xFFFFFFFF;
		k=j;
		for (i=j;i<32;i++)
		{
			data=data&(~(1<<i));
			data=data&(~(1<<k));
		Shift_Register32(data);
		delay32Ms(0,100);
		k=k-1;
		}

	}
	else
	{
		data=0xFFFFFFFF;
		k=0;
		for (i=32;i>=j;i--)
		{
			data=data&(~(1<<i));
			data=data&(~(1<<k));
		Shift_Register32(data);
		delay32Ms(0,100);
		k=k+1;
		}
	}
}
 
Top