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);
		}
	}
} 


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值