⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main._c

📁 用AVR atmega16做的一个完整彩色LED控制程序
💻 _C
📖 第 1 页 / 共 5 页
字号:
			BLenghtCount=val_lenght;
			for(j=0;j<val_lenght;j++)
			{
				FLenghtCount++;
				UniteColorRight(value, UNITEC1,UNITEC2,UNITEC3,  UNITEC4,  UNITEC5,FLenghtCount);

				SendSS(1);
				SendSI(16);
	
				if(SpeedDelay(mode & 0x03)) return;;		
			}
		}
	}
}
void		UniteColorLeft(uchar da1,uchar da2,uchar da3,uchar da4,uchar da5,uchar da6,uint  loop)
{
	uint	tim,i;//,mode;
//	uchar	loop1=16,loop2=70;
	if(loop>6)
	{
//		tim=loop;
		for(;loop>=6;loop-=6)
		{
			putSPIchar(da1);
			DelayNs(50);
			putSPIchar(da1);
			DelayNs(50);
			putSPIchar(da2);
			DelayNs(50);
			putSPIchar(da2);
			DelayNs(50);
			putSPIchar(da3);
			DelayNs(50);
			putSPIchar(da3);
			DelayNs(50);
			putSPIchar(da4);
			DelayNs(50);
			putSPIchar(da4);
			DelayNs(50);
			putSPIchar(da5);
			DelayNs(50);
			putSPIchar(da5);
			DelayNs(50);
			putSPIchar(da6);
			DelayNs(50);
			putSPIchar(da6);
			DelayNs(50);

		}
	}
	i=0;
	if(i<loop){
	putSPIchar(da1);
	DelayNs(50);
	putSPIchar(da1);
	DelayNs(50);
	}

	if(i+1<loop){
	putSPIchar(da2);
	DelayNs(50);
	putSPIchar(da2);
	DelayNs(50);
	}

	if(i+2<loop){
	putSPIchar(da3);
	DelayNs(50);
	putSPIchar(da3);
	DelayNs(50);
	}

	if(i+3<loop){
	putSPIchar(da4);
	DelayNs(50);
	putSPIchar(da4);
	DelayNs(50);
	}
	if(i+4<loop){
	putSPIchar(da5);
	DelayNs(50);
	putSPIchar(da5);
	DelayNs(50);
	}
	if(i+5<loop){
	putSPIchar(da6);
	DelayNs(50);
	putSPIchar(da6);
	DelayNs(50);
	}

}
uchar		UniteColorMiddleToEdge(uchar da1,uchar da2,uchar da3,uchar da4,uchar da5,uchar da6,uchar mode)
{
	uint 	tim,i,diff,j;
	//芯片数为双数, 为单数
	HalfLenght=val_lenght/2;
//	left  =0;
//	right=1;
	FLenghtCount=1;
	BLenghtCount=HalfLenght+1;
	
	putSPIchar(da1);
	DelayNs(50);
	putSPIchar(da1);
	DelayNs(50);
	for(i=1;i<BLenghtCount;i++)
	{
		putSPIchar(UNLOCKDATA);
		DelayNs(50);
		putSPIchar(UNLOCKDATA);
		DelayNs(50);
	}	

	SendSS(1);
//	SendSI(loop1);
	
	if(SpeedDelay(mode & 0x03)) return 1;
//	else return 0;

//	AllStarRight(da1, da2,  da3,  da4,mode);
	
	for(i=1;i<BLenghtCount;i++)
	{
		UniteColorLeft(da1, da2,  da3,  da4,da5,da6,i);
	
//		left--;
//		right++;
//		diff=right - left;
		FLenghtCount++;
		UniteColorRight(da1, da2,  da3,  da4,da5,da6,FLenghtCount);

		SendSS(1);
		SendSI(16);
	
		if(SpeedDelay(mode & 0x03)) return 1;		

	}
	return 0;
}

//从中间向两边。
void		UniteColorProcess_2(uchar kind,uchar mode)
{
	uchar	i,value;
		
	for(i=0;i<7;i++)
	{	
		value=KindGroudData[kind][i];
		if(value!=0x00)
		{
//			GetMiddleColor(value);
			if(UniteColorMiddleToEdge(value, UNITEC1,UNITEC2,UNITEC3,  UNITEC4,  UNITEC5,mode)==1) break;
		}
	}
}

uchar		UniteColorEdgeToMiddle(uchar da1,uchar da2,uchar da3,uchar da4,uchar da5,uchar da6,uchar mode)
{
	uint 	tim,i,diff,j;
	//芯片数为双数, 为单数
	HalfLenght=val_lenght/2;
//	left  =0;
//	right=1;
	FLenghtCount=1;
	BLenghtCount=val_lenght-2;
	
	for(i=1;i<=HalfLenght;i++)
	{
	       UniteColorRight(da1, da2,  da3,  da4,da5,da6,0);
	
//		left--;
//		right++;
//		diff=right - left;
		FLenghtCount++;
		UniteColorLeft(da1, da2,  da3,  da4,da5,da6,i);
		
		SendSS(1);
		SendSI(16);
	
		if(SpeedDelay(mode & 0x03)) return 1;
		if(BLenghtCount==1)
		{
			BLenghtCount=0;
		       UniteColorRight(da1, da2,  da3,  da4,da5,da6,0);
//			FLenghtCount++;
			UniteColorLeft(da1, da2,  da3,  da4,da5,da6,i+1);
			SendSS(1);
			SendSI(16);
			if(SpeedDelay(mode & 0x03)) return 1;
			return 0;
		}		
		else
			BLenghtCount-=2;
	}
	return 0;
}

//从两边向中间.
void		UniteColorProcess_3(uchar kind,uchar mode)
{
	uchar	i,value;
		
	for(i=0;i<7;i++)
	{	
		value=KindGroudData[kind][i];
		if(value!=0x00)
		{
//			GetMiddleColor(value);
			if(UniteColorEdgeToMiddle(value, UNITEC1,UNITEC2,UNITEC3,  UNITEC4,  UNITEC5,mode)==1) break;
		}
	}
}
void		AllStarProcess(uchar kind,uchar mode)
{
	uchar	tim,i,value;

	for(i=0;i<7;i++)
	{	
		value=KindGroudData[kind][i];
		if(value!=0x00)
		{
			GetMiddleColor(value);
			if(AllStar( value, color1,  color2,  ALLBLACK,mode)==1) return;
		}
	}
}


void		AllStarProcess_1(uchar kind,uchar mode)
{
	uchar	i,value,j;
		
	for(i=0;i<7;i++)
	{	
		value=KindGroudData[kind][i];
		if(value!=0x00)
		{
			GetMiddleColor(value);

			FLenghtCount=0;
			BLenghtCount=val_lenght;
			for(j=0;j<val_lenght;j++)
			{
				FLenghtCount++;
				AllStarRight(value, color1,  color2,  ALLBLACK,FLenghtCount);

				SendSS(1);
				SendSI(16);
	
				if(SpeedDelay(mode & 0x03)) return;;		
			}
		}
	}
}
void		AllStarLeft(uchar da1,uchar da2,uchar da3,uchar da4,uint  loop)
{
	uint	tim,i;//,mode;
//	uchar	loop1=16,loop2=70;
	if(loop>4)
	{
//		tim=loop;
		for(;loop>=4;loop-=4)
		{
			putSPIchar(da1);
			DelayNs(50);
			putSPIchar(da1);
			DelayNs(50);
			putSPIchar(da2);
			DelayNs(50);
			putSPIchar(da2);
			DelayNs(50);
			putSPIchar(da3);
			DelayNs(50);
			putSPIchar(da3);
			DelayNs(50);
			putSPIchar(da4);
			DelayNs(50);
			putSPIchar(da4);
			DelayNs(50);

		}
	}
	i=0;
	if(i<loop){
	putSPIchar(da1);
	DelayNs(50);
	putSPIchar(da1);
	DelayNs(50);
	}

	if(i+1<loop){
	putSPIchar(da2);
	DelayNs(50);
	putSPIchar(da2);
	DelayNs(50);
	}

	if(i+2<loop){
	putSPIchar(da3);
	DelayNs(50);
	putSPIchar(da3);
	DelayNs(50);
	}

	if(i+3<loop){
	putSPIchar(da4);
	DelayNs(50);
	putSPIchar(da4);
	DelayNs(50);
	}

}
void		AllStarRight(uchar da1,uchar da2,uchar da3,uchar da4,uint init)
{
//	uchar	tim;//,i;
	uchar	loop1=16,loop2=70;
	uint 		val1=0x00,i;

	if(FLenghtCount!=0)
	{
		val1=hmod(FLenghtCount,4);
		switch(val1)
		{
		case	3:
			putSPIchar(da3);
			DelayNs(50);
			putSPIchar(da3);
			DelayNs(50);
		case	2:
			putSPIchar(da2);
			DelayNs(50);
			putSPIchar(da2);
			DelayNs(50);
		case	1:
			putSPIchar(da1);
			DelayNs(50);
			putSPIchar(da1);
			DelayNs(50);
			break;
		default:
			break;
		}	
		if(FLenghtCount>val1)
		{
			i=val1;
			for(;i<FLenghtCount;i+=4)
			{
				putSPIchar(da4);
				DelayNs(50);
				putSPIchar(da4);
				DelayNs(50);
				putSPIchar(da3);
				DelayNs(50);
				putSPIchar(da3);
				DelayNs(50);
				putSPIchar(da2);
				DelayNs(50);
				putSPIchar(da2);
				DelayNs(50);
				if(BLenghtCount==0 && (i+4)>=FLenghtCount)break;
				else{
				putSPIchar(da1);
				DelayNs(50);
				putSPIchar(da1);
				DelayNs(50);
					}
			}
		}
		
	}

	i=init;
	for(;i<BLenghtCount;i++)
	{
		putSPIchar(UNLOCKDATA);
		DelayNs(50);
		putSPIchar(UNLOCKDATA);
		DelayNs(50);
	}	

//	SendSS(1);
//	SendSI(loop1);
	
//	if(SpeedDelay(mode & 0x03)) return 1;
//	else return 0;
}
uchar		AllStarMiddleToEdge(uchar da1,uchar da2,uchar da3,uchar da4,uchar mode)
{
	uint 	tim,i,diff,j;
	//芯片数为双数, 为单数
	HalfLenght=val_lenght/2;
//	left  =0;
//	right=1;
	FLenghtCount=1;
	BLenghtCount=HalfLenght+1;
	
	putSPIchar(da1);
	DelayNs(50);
	putSPIchar(da1);
	DelayNs(50);
	for(i=1;i<BLenghtCount;i++)
	{
		putSPIchar(UNLOCKDATA);
		DelayNs(50);
		putSPIchar(UNLOCKDATA);
		DelayNs(50);
	}	

	SendSS(1);
//	SendSI(loop1);
	
	if(SpeedDelay(mode & 0x03)) return 1;
//	else return 0;

//	AllStarRight(da1, da2,  da3,  da4,mode);
	
	for(i=1;i<BLenghtCount;i++)
	{
		AllStarLeft(da1, da2,  da3,  da4,i);
	
//		left--;
//		right++;
//		diff=right - left;
		FLenghtCount++;
		AllStarRight(da1, da2,  da3,  da4,FLenghtCount);

		SendSS(1);
		SendSI(16);
	
		if(SpeedDelay(mode & 0x03)) return 1;		

	}
	return 0;
}

//从中间向两边。
void		AllStarProcess_2(uchar kind,uchar mode)
{
	uchar	i,value;
		
	for(i=0;i<7;i++)
	{	
		value=KindGroudData[kind][i];
		if(value!=0x00)
		{
			GetMiddleColor(value);
			if(AllStarMiddleToEdge(value, color1,  color2,  ALLBLACK,mode)==1) break;
		}
	}
}

uchar		AllStarEdgeToMiddle(uchar da1,uchar da2,uchar da3,uchar da4,uchar mode)
{
	uint 	tim,i,diff,j;
	//芯片数为双数, 为单数
	HalfLenght=val_lenght/2;
//	left  =0;
//	right=1;
	FLenghtCount=1;
	BLenghtCount=val_lenght-2;
	
	for(i=1;i<=HalfLenght;i++)
	{
	       AllStarRight(da1, da2,  da3,  da4,0);
	
//		left--;
//		right++;
//		diff=right - left;
		FLenghtCount++;
		AllStarLeft(da1, da2,  da3,  da4,i);
		
		SendSS(1);
		SendSI(16);
	
		if(SpeedDelay(mode & 0x03)) return 1;
		if(BLenghtCount==1)
		{
			BLenghtCount=0;
		       AllStarRight(da1, da2,  da3,  da4,0);
//			FLenghtCount++;
			AllStarLeft(da1, da2,  da3,  da4,i+1);
			SendSS(1);
			SendSI(16);
			if(SpeedDelay(mode & 0x03)) return 1;
			return 0;
		}		
		else
			BLenghtCount-=2;
	}
	return 0;
}

void		AllStarProcess_3(uchar kind,uchar mode)
{
	uchar	i,value;
		
	for(i=0;i<7;i++)
	{	
		value=KindGroudData[kind][i];
		if(value!=0x00)
		{
			GetMiddleColor(value);
			if(AllStarEdgeToMiddle(value, color1,  color2,  ALLBLACK,mode)==1) break;
		}
	}
}

void		SevenColorProcess(uchar kind,uchar mode)
{
	uchar	tim,i,value;

	for(i=0;i<7;i++)
	{	
		value=KindGroudData[kind][i];
		if(value!=0x00)
		{
//			SendFirstToEnd(value,mode & 0x0f,CLASSNUMBER,1);
			SendFirstToEnd(value,mode & 0x0f,0x00,1);
			for(tim=1;tim<val_lenght ;tim++)
			{
				if(SendFirstToEnd(UNLOCKDATA,mode & 0x0f,CLASSNUMBER,1)==1) return;
			}

		}
	}
}
void		SevenColorProcess_1(uchar kind,uchar mode)
{
	uchar	tim,i,value;

	for(i=0;i<7;i++)
	{	
		value=KindGroudData[kind][i];
		if(value!=0x00)
		{
			FLenghtCount=0;
			SendEndToFirst(value,mode & 0x0f,UNLOCKDATA,0,1);
			for(tim=1;tim<val_lenght;tim++)
			{
				FLenghtCount++;
				if(SendEndToFirst(value,mode & 0x0f,UNLOCKDATA,CLASSNUMBER,1)==1) return;
			}
		}
	}
	
}
void		SixColorProcess(uchar kind,uchar mode)
{
	uchar	tim,i,value;

	for(i=0;i<7;i++)
	{	
		value=KindGroudData[kind][i];
		if(value!=0x00)
		{
			for(tim=0;tim<val_lenght ;tim++)
			{
				if(SendFirstToEnd(value,mode & 0x0f,0,1)==1) return;
			}

		}
	}
}
void		SixColorProcess_1(uchar kind,uchar mode)
{
	uchar	tim,i,value;

	for(i=0;i<7;i++)
	{	
		value=KindGroudData[kind][i];
		if(value!=0x00)
		{
			FLenghtCount=0;
//			SendEndToFirst(value,mode & 0x0f,ALLBLACK);
			SendEndToFirst(value,mode & 0x0f,UNLOCKDATA,CLASSNUMBER,1);
			for(tim=1;tim<val_lenght;tim++)
			{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -