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

📄 p_drive.c

📁 基于STC89C52的彗星灯效果的控制 21路软件PWM 控制
💻 C
字号:
#include "dport.h"
#include <reg51.h>

uint8	ch_pwm[21]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
uint8	ch1_pwm_ctr[21]; 
uint8	t0_counter=31;
uint8	t1_counter=0;
uint8	l=0;
uint8	m=0;
uint8	n=0;
uint8	rpt2=0;
uint8	s[21]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
uint8	sig[21]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

void pwm_update(void);	
void Tmr_Init(void) 
{IP=0;
 IPH=0;
 TMOD=0x11;
 TCON=0x50;
 	TH0=0xfc;
 	TL0=0x17;
  TH1=0xF8;
 	TL1=0x2f;

 EA=1;
 ET1=1;
 ET0=1;
}
void port_set(void) 
{	 uint8 k=0;
			for(k=0;k<21;k++)
		{
	if(ch1_pwm_ctr[k]!=0)
			{switch(k)
			{case 0:
			 ch0=1;
			 break; 

			 case 1:
			 ch1=1;
			 break;  

			 case 2:
			 ch2=1;
			 break; 

			 case 3:
			 ch3=1;
			  break; 

			 case 4:
			 ch4=1;
			  break; 

			 case 5:
			 ch5=1;
			 break;  

			 case 6:
			 ch6=1;
			  break; 

			 case 7:
			 ch7=1;
			 break; 

			 case 8:
			 ch8=1;
			 break;  

			 case 9:
			 ch9=1;
			  break; 

			 case 10:
			 ch10=1;
			  break; 

			 case 11:
			 ch11=1;
			  break;  

			 case 12:
			 ch12=1;
			  break; 

			 case 13:
			 ch13=1;
			  break;  

			 case 14:
			 ch14=1;
			  break; 

			 case 15:
			 ch15=1;
			  break;  

			 case 16:
			 ch16=1;
			 break; 

			 case 17:
			 ch17=1;
			  break; 

			 case 18:
			 ch18=1;
			 break; 

			 case 19:
			 ch19=1;
			  break; 

			 case 20:
			 ch20=1;
			       }
			 }

}}

void port_clr(void) 
{	 uint8 k=0;
			for(k=0;k<21;k++)
		{
	if(ch1_pwm_ctr[k]==0)
			{switch(k)
			{case 0:
			 ch0=0;
			 break; 

			 case 1:
			 ch1=0;
			 break;  

			 case 2:
			 ch2=0;
			 break; 

			 case 3:
			 ch3=0;
			  break; 

			 case 4:
			 ch4=0;
			  break; 

			 case 5:
			 ch5=0;
			 break;  

			 case 6:
			 ch6=0;
			  break; 

			 case 7:
			 ch7=0;
			 break; 

			 case 8:
			 ch8=0;
			 break;  

			 case 9:
			 ch9=0;
			  break; 

			 case 10:
			 ch10=0;
			  break; 

			 case 11:
			 ch11=0;
			  break;  

			 case 12:
			 ch12=0;
			  break; 

			 case 13:
			 ch13=0;
			  break;  

			 case 14:
			 ch14=0;
			  break; 

			 case 15:
			 ch15=0;
			  break;  

			 case 16:
			 ch16=0;
			 break; 

			 case 17:
			 ch17=0;
			  break; 

			 case 18:
			 ch18=0;
			 break; 

			 case 19:
			 ch19=0;
			  break; 

			 case 20:
			 ch20=0;
			       }
			 }

}}


void Timer0_Interrupt(void) interrupt 1
{       uint8 i=0;
 	TH0=0xfc;
 	TL0=0x17;
	
	t0_counter++;
if(t0_counter==32)
	{t0_counter=0;
		for(i=0;i<21;i++)
		{ch1_pwm_ctr[i]=ch_pwm[i];

		}
		P1=0;
		P2=0;
		P3=0;
		port_set();
	
	}
else
	{for(i=0;i<21;i++)
		{if(ch1_pwm_ctr[i]!=0)
		ch1_pwm_ctr[i]--;
		}
		port_clr();

	}
 }

void Timer1_Interrupt(void) interrupt 4
{  uint8 j=0;
  TH1=0xF8;
 	TL1=0x2f;	 
	t1_counter++;
	if(t1_counter==30)
	{ t1_counter=0;
	pwm_update();	  
	

	/*for(j=0;j<21;j++)
	{ch_pwm[j]--;
	if(ch_pwm[j]==0)
	ch_pwm[j]=6;	
	} */
	}
}	 
void	pwm_update(void)
{ uint8	rpt=0;
uint8	rpt1=0;


 if(n>=0&s[0])
	{sig[0]++;

	 if(sig[0]<=12)
		{
	ch_pwm[0]=31;
		if(sig[0]==3)
			n++;
		}
	 else if(ch_pwm[0]!=0)
		{			if(ch_pwm[0]>=17)
			{for(rpt=0;rpt<5;rpt++)
				ch_pwm[0]--;

				
			}

				 
			else if(ch_pwm[0]<17)
			{ch_pwm[0]--;
							if(ch_pwm[0]==0)
							{s[0]=0;sig[0]=0;}
			}
		}

	}

if(n>=1&s[1])
	{sig[1]++;

	 if(sig[1]<=12)
		{
	ch_pwm[1]=31;
		if(sig[1]==3)
			n++;
		}
	 else if(ch_pwm[1]!=0)
		{			if(ch_pwm[1]>=17)
			{for(rpt=0;rpt<5;rpt++)
				ch_pwm[1]--;

				
			}

				 
			else if(ch_pwm[1]<17)
			{ch_pwm[1]--;
							if(ch_pwm[1]==0)
							{s[1]=0;sig[1]=0;}
			}
		}

	}
if(n>=2&s[2])
	{sig[2]++;

	 if(sig[2]<=12)
		{
	ch_pwm[2]=31;
		if(sig[2]==3)
			n++;
		}
	 else if(ch_pwm[2]!=0)
		{			if(ch_pwm[2]>=17)	
				
			{for(rpt=0;rpt<5;rpt++)
				ch_pwm[2]--;

				
			}
			else if(ch_pwm[2]<17)
			{ch_pwm[2]--;
							if(ch_pwm[2]==0)
							{s[2]=0;sig[2]=0;}
			}
		}

	}
if(n>=3&s[3])
	{sig[3]++;

	 if(sig[3]<=12)
		{
	ch_pwm[3]=31;
		if(sig[3]==3)
			n++;
		}
	 else if(ch_pwm[3]!=0)
		{			if(ch_pwm[3]>=17)	
						
			{for(rpt=0;rpt<5;rpt++)
				ch_pwm[3]--;

				
			}
			else if(ch_pwm[3]<17)
			{ch_pwm[3]--;
							if(ch_pwm[3]==0)
							{s[3]=0;sig[3]=0;}
			}
		}

	}
if(n>=4&s[4])
	{sig[4]++;

	 if(sig[4]<=12)
		{
	ch_pwm[4]=31;
		if(sig[4]==3)
			n++;
		}
	 else if(ch_pwm[4]!=0)
		{			if(ch_pwm[4]>=17)	

			{for(rpt=0;rpt<5;rpt++)
				ch_pwm[4]--;

				
			}			
			else if(ch_pwm[4]<17)
			{ch_pwm[4]--;
							if(ch_pwm[4]==0)
							{s[4]=0;sig[4]=0;}
			}
		}

	}
if(n>=5&s[5])
	{sig[5]++;

	 if(sig[5]<=12)
		{
	ch_pwm[5]=31;
		if(sig[5]==3)
			n++;
		}
	 else if(ch_pwm[5]!=0)
		{			if(ch_pwm[5]>=17)	

			{for(rpt=0;rpt<5;rpt++)
				ch_pwm[5]--;

				
			}			
			else if(ch_pwm[5]<17)
			{ch_pwm[5]--;
							if(ch_pwm[5]==0)
							{s[5]=0;sig[5]=0;}
			}
		}

	}
if(n>=6&s[6])
	{sig[6]++;

	 if(sig[6]<=12)
		{
	ch_pwm[6]=31;
		if(sig[6]==3)
			n++;
		}
	 else if(ch_pwm[6]!=0)
		{			if(ch_pwm[6]>=17)	

			{for(rpt=0;rpt<5;rpt++)
				ch_pwm[6]--;

				
			}			

			else if(ch_pwm[6]<17)
			{ch_pwm[6]--;
							if(ch_pwm[6]==0)
							{s[6]=0;sig[6]=0;}
			}
		}

	}
if(n>=7&s[7])
	{sig[7]++;

	 if(sig[7]<=12)
		{
	ch_pwm[7]=31;
		if(sig[7]==3)
			n++;
		}
	 else if(ch_pwm[7]!=0)
		{			if(ch_pwm[7]>=17)	

			{for(rpt=0;rpt<5;rpt++)
				ch_pwm[7]--;
	
				
			}
			else if(ch_pwm[7]<17)
			{ch_pwm[7]--;
						if(ch_pwm[7]==0)
						{s[7]=0;sig[7]=0;}
			}
		}

	}
if(n>=8&s[8])
	{sig[8]++;

	 if(sig[8]<=12)
		{
	ch_pwm[8]=31;
		if(sig[8]==3)
			n++;
		}
	 else if(ch_pwm[8]!=0)
		{			if(ch_pwm[8]>=17)	

			{for(rpt=0;rpt<5;rpt++)
				ch_pwm[8]--;

				
			}			

			else if(ch_pwm[8]<17)
			{ch_pwm[8]--;
							if(ch_pwm[8]==0)
							{s[8]=0;sig[8]=0;}
			}
		}

	}
if(n>=9&s[9])
	{sig[9]++;

	 if(sig[9]<=12)
		{
	ch_pwm[9]=31;
		if(sig[9]==3)
			n++;
		}
	 else if(ch_pwm[9]!=0)
		{			if(ch_pwm[9]>=17)	

			{for(rpt=0;rpt<5;rpt++)
				ch_pwm[9]--;

				
			}

			else if(ch_pwm[9]<17)
			{ch_pwm[9]--;
							if(ch_pwm[9]==0)
							{s[9]=0;sig[9]=0;}
			}
		}

	}
if(n>=10&s[10])
	{sig[10]++;

	 if(sig[10]<=12)
		{
	ch_pwm[10]=31;
		if(sig[10]==3)
			n++;
		}
	 else if(ch_pwm[10]!=0)
		{			if(ch_pwm[10]>=17)	

			{for(rpt=0;rpt<5;rpt++)
				ch_pwm[10]--;

				
			}	

			else if(ch_pwm[10]<17)
			{ch_pwm[10]--;
							if(ch_pwm[10]==0)
							{s[10]=0;sig[10]=0;}
			}
		}

	}
if(n>=11&s[11])
	{sig[11]++;

	 if(sig[11]<=12)
		{
	ch_pwm[11]=31;
		if(sig[11]==3)
			n++;
		}
	 else if(ch_pwm[11]!=0)
		{			if(ch_pwm[11]>=17)	

	
			{for(rpt=0;rpt<5;rpt++)
				ch_pwm[11]--;

				
			}
			else if(ch_pwm[11]<17)
			{ch_pwm[11]--;
							if(ch_pwm[11]==0)
							{s[11]=0;sig[11]=0;}
			}
		}

	}
if(n>=12&s[12])
	{sig[12]++;

	 if(sig[12]<=12)
		{
	ch_pwm[12]=31;
		if(sig[12]==3)
			n++;
		}
	 else if(ch_pwm[12]!=0)
		{			if(ch_pwm[12]>=17)	

			{for(rpt=0;rpt<5;rpt++)
				ch_pwm[12]--;

				
			}

			else if(ch_pwm[12]<17)
			{ch_pwm[12]--;
							if(ch_pwm[12]==0)
							{s[12]=0;sig[12]=0;}
			}
		}

	}
if(n>=13&s[13])
	{sig[13]++;

	 if(sig[13]<=12)
		{
	ch_pwm[13]=31;
		if(sig[13]==3)
			n++;
		}
	 else if(ch_pwm[13]!=0)
		{			if(ch_pwm[13]>=17)	

			{for(rpt=0;rpt<5;rpt++)
				ch_pwm[13]--;

				
			}

			else if(ch_pwm[13]<17)
			{ch_pwm[13]--;
							if(ch_pwm[13]==0)
							{s[13]=0;sig[13]=0;}
			}
		}

	}
if(n>=14&s[14])
	{sig[14]++;

	 if(sig[14]<=12)
		{
	ch_pwm[14]=31;
		if(sig[14]==3)
			n++;
		}
	 else if(ch_pwm[14]!=0)
		{			if(ch_pwm[14]>=17)	

			{for(rpt=0;rpt<5;rpt++)
				ch_pwm[14]--;

				
			}

			else if(ch_pwm[14]<17)
			{ch_pwm[14]--;
							if(ch_pwm[14]==0)
							{s[14]=0;sig[14]=0;}
			}
		}

	}
if(n>=15&s[15])
	{sig[15]++;

	 if(sig[15]<=12)
		{
	ch_pwm[15]=31;
		if(sig[15]==3)
			n++;
		}
	 else if(ch_pwm[15]!=0)
		{			if(ch_pwm[15]>=17)	

			{for(rpt=0;rpt<5;rpt++)
				ch_pwm[15]--;

				
			}	

			else if(ch_pwm[15]<17)
			{ch_pwm[15]--;
							if(ch_pwm[15]==0)
							{s[15]=0;sig[15]=0;}
			}
		}

	}
if(n>=16&s[16])
	{sig[16]++;

	 if(sig[16]<=12)
		{
	ch_pwm[16]=31;
		if(sig[16]==3)
			n++;
		}
	 else if(ch_pwm[16]!=0)
		{			if(ch_pwm[16]>=17)	

			{for(rpt=0;rpt<5;rpt++)
				ch_pwm[16]--;

				
			}

			else if(ch_pwm[16]<17)
			{ch_pwm[16]--;
							if(ch_pwm[16]==0)
							{s[16]=0;sig[16]=0;}
			}
		}

	}
if(n>=17&s[17])
	{sig[17]++;

	 if(sig[17]<=12)
		{
	ch_pwm[17]=31;
		if(sig[17]==3)
			n++;
		}
	 else if(ch_pwm[17]!=0)
		{			if(ch_pwm[17]>=17)	

			{for(rpt1=0;rpt1<5;rpt1++)
				ch_pwm[17]--;

				
			}	

			else if(ch_pwm[17]<17)
			{ch_pwm[17]--;
							if(ch_pwm[17]==0)
							{s[17]=0;sig[17]=0;}
			}
		}

	}
if(n>=18&s[18])
	{sig[18]++;

	 if(sig[18]<=12)
		{
	ch_pwm[18]=31;
		if(sig[18]==3)
			n++;
		}
	 else if(ch_pwm[18]!=0)
		{			if(ch_pwm[18]>=17)	

			{for(rpt1=0;rpt1<5;rpt1++)
				ch_pwm[18]--;

				
			}

			else if(ch_pwm[18]<17)
			{ch_pwm[18]--;
							if(ch_pwm[18]==0)
							{s[18]=0;sig[18]=0;}
			}
		}

	}
if(n>=19&s[19])
	{sig[19]++;

	 if(sig[19]<=12)
		{
	ch_pwm[19]=31;
		if(sig[19]==3)
			n++;
		}
	 else if(ch_pwm[19]!=0)
		{			if(ch_pwm[19]>=17)	

			{for(rpt=0;rpt<5;rpt++)
				ch_pwm[19]--;


			}

			else if(ch_pwm[19]<17)
			{ch_pwm[19]--;
							if(ch_pwm[19]==0)
							{s[19]=0;sig[19]=0;}
			}
		}

	}
if(n>=20&s[20])
	{sig[20]++;

	 if(sig[20]<=12)
		{
	ch_pwm[20]=31;
		if(sig[20]==3)
			n++;
		}
	 else if(ch_pwm[20]!=0)
		{			if(ch_pwm[20]>=17)	

			{for(rpt=0;rpt<5;rpt++)
				ch_pwm[20]--;

				
			}

			else if(ch_pwm[20]<17)
			{ch_pwm[20]--;
					if(ch_pwm[20]==0)
					{s[20]=0;rpt2=0;sig[20]=0;}
			}
		}

	}
	if(n>=21)
	{rpt2++;
	if(rpt2==60)
	{m=0;n=0;l=0;
	for(rpt=0;rpt<21;rpt++)
	s[rpt]=1;
	}
	} 
	
} 



⌨️ 快捷键说明

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