PWM波模板

转载请注明出处,谢谢http://blog.csdn.net/metalseed/article/details/7989263     by---MetalSeed

PWM波的调制有三种方式

1:C语言编程实现

2:定时器实现

3:片内PWM


方式1:

/*将PORTA(AVR上PA.0)等价于P1.0(51)*/
void pwm (unsigned char x, unsigned int y)    /*X 为占空比 Y为函数使用时间*/
{   
	uint i, j, a;
	for(i = y; i > 0; --i)                          //定时外函数
	{
		for(j = 7; j > 0; --j)                       //定时内函数
		{
			for(a = x; a > 0; --a)                  //PWM波高电平宽度
			{
				PORTA = 0X01;
			}
			for(a = 100 - x; a > 0; --a)             //PWM低电平宽度
			{
				PORTA = 0X00;
			}
		}
	}
}


呼吸灯

void breathPWM (unsigned char x, unsigned int y)    /*X 为占空比 Y为函数使用时间*/  
{     
    int i, j, a; 
 
    for(i = y; i > 0; --i)                            
    {  
        for(j = 7; j > 0; --j)                        
        {  
            for(a = x / 4; a > 0; --a)  
            {  
                P1 = 0xff;  
            } 
            for(a = (30 - x ) / 4; a > 0; --a)             
            {  
                P1 = 0x00;  
            }
			for(a = x / 4; a > 0; --a)                    
            {  
                P1 = 0xff;  
            } 
			for(a = (30 - x ) / 4; a > 0; --a)
            {  
                P1 = 0x00;  
            } 
            for(a = x / 4; a > 0; --a)                  
            {  
                P1 = 0xff;  
            } 
            for(a = (30 - x ) / 4; a > 0; --a)  
            {  
                P1 = 0x00;  
            }
			for(a = x / 4; a > 0; --a)                  
            {  
                P1 = 0xff;  
            } 
			for(a = (30 - x ) / 4; a > 0; --a)     
            {  
                P1 = 0x00;  
            } 
        }  
    }  
} 

void breath(int X)
{
	int i, j;
	while(X--)
	{
		i = 30, j = 100;
		while(i > 0)
		{
		   	breathPWM(i -= 1, 20);
		}
		while(i < 30)
		{
			breathPWM(i += 1, 20);
		}
	}
} 


你可能感兴趣的:(编程,c,语言)