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

📄 pwmdispose.c

📁 本人用AVR mega32写的一个关于输出32路PWM的程序
💻 C
字号:
#define   EXT_PWMDISPOSE_GLOBALS
#include "includes.h"

void PwmInitial(void)
{
	unsigned char lcv_i;
	for(lcv_i=0;lcv_i<32;lcv_i++)
	{
		PulseDispose[lcv_i].PwmPulse=0x7f;
	}
}
/************************************************************
 Function Name:  T2Init
 Function:       Timer0 initial
 Paramenter:     None               
 Return value:   None                     
 Author:         Chen yuan zhen May.30.2008 
*************************************************************/
void PwmPortInitial(void)
{

//	PulseDispose[0].PwmPulse=0x14;
    PulseDispose[0].Pwm0=0xFE;
    PulseDispose[0].Pwm7=0xFF;
    PulseDispose[0].Pwm15=0xFF;
    PulseDispose[0].Pwm23=0xFF;

//  PulseDispose[1].PwmPulse=0x15;
    PulseDispose[1].Pwm0=0xFD;
    PulseDispose[1].Pwm7=0xFF;
    PulseDispose[1].Pwm15=0xFF;
    PulseDispose[1].Pwm23=0xFF;

//    PulseDispose[2].PwmPulse=0x20;
    PulseDispose[2].Pwm0=0xFB;
    PulseDispose[2].Pwm7=0xFF;
    PulseDispose[2].Pwm15=0xFF;
    PulseDispose[2].Pwm23=0xFF;

//  PulseDispose[3].PwmPulse=0x15;
    PulseDispose[3].Pwm0=0xF7;
    PulseDispose[3].Pwm7=0xFF;
    PulseDispose[3].Pwm15=0xFF;
    PulseDispose[3].Pwm23=0xFF;

 //   PulseDispose[4].PwmPulse=0x14;
    PulseDispose[4].Pwm0=0xEF;
    PulseDispose[4].Pwm7=0xFF;
    PulseDispose[4].Pwm15=0xFF;
    PulseDispose[4].Pwm23=0xFF;

  //  PulseDispose[5].PwmPulse=0x00;
    PulseDispose[5].Pwm0=0xDF;
    PulseDispose[5].Pwm7=0xFF;
    PulseDispose[5].Pwm15=0xFF;
    PulseDispose[5].Pwm23=0xFF;

  //  PulseDispose[6].PwmPulse=0x00;
    PulseDispose[6].Pwm0=0xBF;
    PulseDispose[6].Pwm7=0xFF;
    PulseDispose[6].Pwm15=0xFF;
    PulseDispose[6].Pwm23=0xFF;

  //  PulseDispose[7].PwmPulse=0x00;
    PulseDispose[7].Pwm0=0x7F;
    PulseDispose[7].Pwm7=0xFF;
    PulseDispose[7].Pwm15=0xFF;
    PulseDispose[7].Pwm23=0xFF;

  //  PulseDispose[8].PwmPulse=0x00;
    PulseDispose[8].Pwm0=0xFF;
    PulseDispose[8].Pwm7=0xFE;
    PulseDispose[8].Pwm15=0xFF;
    PulseDispose[8].Pwm23=0xFF;

  //  PulseDispose[9].PwmPulse=0x00;
    PulseDispose[9].Pwm0=0xFF;
    PulseDispose[9].Pwm7=0xFD;
    PulseDispose[9].Pwm15=0xFF;
    PulseDispose[9].Pwm23=0xFF;

 //   PulseDispose[10].PwmPulse=0x00;
    PulseDispose[10].Pwm0=0xFF;
    PulseDispose[10].Pwm7=0xFB;
    PulseDispose[10].Pwm15=0xFF;
    PulseDispose[10].Pwm23=0xFF;

  //PulseDispose[11].PwmPulse=0x00;
    PulseDispose[11].Pwm0=0xFF;
    PulseDispose[11].Pwm7=0xF7;
    PulseDispose[11].Pwm15=0xFF;
    PulseDispose[11].Pwm23=0xFF;

  //  PulseDispose[12].PwmPulse=0x00;
    PulseDispose[12].Pwm0=0xFF;
    PulseDispose[12].Pwm7=0xEF;
    PulseDispose[12].Pwm15=0xFF;
    PulseDispose[12].Pwm23=0xFF;

    //PulseDispose[13].PwmPulse=0x00;
    PulseDispose[13].Pwm0=0xFF;
    PulseDispose[13].Pwm7=0xDF;
    PulseDispose[13].Pwm15=0xFF;
    PulseDispose[13].Pwm23=0xFF;

   // PulseDispose[14].PwmPulse=0x00;
    PulseDispose[14].Pwm0=0xFF;
    PulseDispose[14].Pwm7=0xBF;
    PulseDispose[14].Pwm15=0xFF;
    PulseDispose[14].Pwm23=0xFF;

   // PulseDispose[15].PwmPulse=0x00;
    PulseDispose[15].Pwm0=0xFF;
    PulseDispose[15].Pwm7=0x7F;
    PulseDispose[15].Pwm15=0xFF;
    PulseDispose[15].Pwm23=0xFF;

    //PulseDispose[16].PwmPulse=0x00;
    PulseDispose[16].Pwm0=0xFF;
    PulseDispose[16].Pwm7=0xFF;
    PulseDispose[16].Pwm15=0xFE;
    PulseDispose[16].Pwm23=0xFF;

    //PulseDispose[17].PwmPulse=0x00;
    PulseDispose[17].Pwm0=0xFF;
    PulseDispose[17].Pwm7=0xFF;
    PulseDispose[17].Pwm15=0xFD;
    PulseDispose[17].Pwm23=0xFF;

    //PulseDispose[18].PwmPulse=0x00;
    PulseDispose[18].Pwm0=0xFF;
    PulseDispose[18].Pwm7=0xFF;
    PulseDispose[18].Pwm15=0xFB;
    PulseDispose[18].Pwm23=0xFF;

    //PulseDispose[19].PwmPulse=0x00;
    PulseDispose[19].Pwm0=0xFF;
    PulseDispose[19].Pwm7=0xFF;
    PulseDispose[19].Pwm15=0xF7;
    PulseDispose[19].Pwm23=0xFF;

   // PulseDispose[20].PwmPulse=0x00;
    PulseDispose[20].Pwm0=0xFF;
    PulseDispose[20].Pwm7=0xFF;
    PulseDispose[20].Pwm15=0xEF;
    PulseDispose[20].Pwm23=0xFF;

	//PulseDispose[21].PwmPulse=0x00;
    PulseDispose[21].Pwm0=0xFF;
    PulseDispose[21].Pwm7=0xFF;
    PulseDispose[21].Pwm15=0xDF;
    PulseDispose[21].Pwm23=0xFF;

   // PulseDispose[22].PwmPulse=0x00;
    PulseDispose[22].Pwm0=0xFE;
    PulseDispose[22].Pwm7=0xFF;
    PulseDispose[22].Pwm15=0xBF;
    PulseDispose[22].Pwm23=0xFF;

   // PulseDispose[23].PwmPulse=0x00;
    PulseDispose[23].Pwm0=0xFF;
    PulseDispose[23].Pwm7=0xFF;
    PulseDispose[23].Pwm15=0x7F;
    PulseDispose[23].Pwm23=0xFF;

   // PulseDispose[24].PwmPulse=0x00;
    PulseDispose[24].Pwm0=0xFF;
    PulseDispose[24].Pwm7=0xFF;
    PulseDispose[24].Pwm15=0xFF;
    PulseDispose[24].Pwm23=0xFE;

  //  PulseDispose[25].PwmPulse=0x00;
    PulseDispose[25].Pwm0=0xFF;
    PulseDispose[25].Pwm7=0xFF;
    PulseDispose[25].Pwm15=0xFF;
    PulseDispose[25].Pwm23=0xFD;

  //  PulseDispose[26].PwmPulse=0x00;
    PulseDispose[26].Pwm0=0xFF;
    PulseDispose[26].Pwm7=0xFF;
    PulseDispose[26].Pwm15=0xFF;
    PulseDispose[26].Pwm23=0xFB;

  //  PulseDispose[27].PwmPulse=0x00;
    PulseDispose[27].Pwm0=0xFF;
    PulseDispose[27].Pwm7=0xFF;
    PulseDispose[27].Pwm15=0xFF;
    PulseDispose[27].Pwm23=0xF7;

  //  PulseDispose[28].PwmPulse=0x00;
    PulseDispose[28].Pwm0=0xFF;
    PulseDispose[28].Pwm7=0xFF;
    PulseDispose[28].Pwm15=0xFF;
    PulseDispose[28].Pwm23=0xEF;

  //  PulseDispose[29].PwmPulse=0x00;
    PulseDispose[29].Pwm0=0xFF;
    PulseDispose[29].Pwm7=0xFF;
    PulseDispose[29].Pwm15=0xFF;
    PulseDispose[29].Pwm23=0xDF;

  //  PulseDispose[30].PwmPulse=0x00;
    PulseDispose[30].Pwm0=0xFF;
    PulseDispose[30].Pwm7=0xFF;
    PulseDispose[30].Pwm15=0xFF;
    PulseDispose[30].Pwm23=0xBF;

  //  PulseDispose[31].PwmPulse=0x00;
    PulseDispose[31].Pwm0=0xFF;
    PulseDispose[31].Pwm7=0xFF;
    PulseDispose[31].Pwm15=0xFF;
    PulseDispose[31].Pwm23=0x7F;

}

/************************************************************
 Function Name:  T2Init
 Function:       Timer0 initial
 Paramenter:     None               
 Return value:   None                     
 Author:         Chen yuan zhen May.30.2008 
*************************************************************/
void MakeArray(void)                    //.PwmPulse从小到大给 PulseDispose结构排序。
{
    int  LcvXX,LcvYY,Min;
	PWMDef temp;
    for(LcvXX=0;LcvXX<31;LcvXX++)
	{
        Min=LcvXX;
		for(LcvYY=LcvXX+1;LcvYY<32;LcvYY++)
		{
		    if(PulseDispose[Min].PwmPulse>PulseDispose[LcvYY].PwmPulse)
			{
			     temp=PulseDispose[Min];
				 PulseDispose[Min]=PulseDispose[LcvYY];
				 PulseDispose[LcvYY]=temp;
			}
		}
	}
}



/************************************************************
 Function Name:  T2Init
 Function:       Timer0 initial
 Paramenter:     None               
 Return value:   None                     
 Author:         Chen yuan zhen May.30.2008 
*************************************************************/
void  DisposePwm(void)
{
    MakeArray( );
    TrueStep=0;
    unsigned char LcvNN=0;
	unsigned char LcvMM=0;
	

	for(LcvMM=LcvNN;LcvMM<32;LcvMM=LcvNN)               //合并.PwmPulse相同的
	{
	    PulseDispose[TrueStep]=PulseDispose[LcvNN];
	    while((PulseDispose[LcvMM].PwmPulse==PulseDispose[LcvMM+1].PwmPulse)&&(LcvMM<31))
		{
		    PulseDispose[TrueStep].Pwm0 &=PulseDispose[LcvMM+1].Pwm0;
			PulseDispose[TrueStep].Pwm7 &=PulseDispose[LcvMM+1].Pwm7;
			PulseDispose[TrueStep].Pwm15 &=PulseDispose[LcvMM+1].Pwm15;
			PulseDispose[TrueStep].Pwm23 &=PulseDispose[LcvMM+1].Pwm23;
			LcvMM++;
		}
        LcvNN=LcvMM+1;
		TrueStep++;                                          //TrueStep最大为32
	}
	for(LcvMM=0;LcvMM<TrueStep-1;LcvMM++)                   //使PWM合并,一起处理
	{
		PulseDispose[LcvMM+1].Pwm0 &=PulseDispose[LcvMM].Pwm0;
	    PulseDispose[LcvMM+1].Pwm7 &=PulseDispose[LcvMM].Pwm7;
		PulseDispose[LcvMM+1].Pwm15 &=PulseDispose[LcvMM].Pwm15;
		PulseDispose[LcvMM+1].Pwm23 &=PulseDispose[LcvMM].Pwm23;
	}
}


void TransferStruct(void)
{
    unsigned char i;
    for(i=0;i<TrueStep;i++)                           //用另一数组保存PWM
	{   
	    PwmPulse[i]= PulseDispose[i].PwmPulse;
        PwmStepBuffer0[i]= PulseDispose[i].Pwm0;
		PwmStepBuffer7[i]= PulseDispose[i].Pwm7;
		PwmStepBuffer15[i]= PulseDispose[i].Pwm15;
		PwmStepBuffer23[i]= PulseDispose[i].Pwm23;
    }
	for(i=TrueStep;i<33;i++)                         //给0
	{   
	    PwmPulse[i]= 255;
        PwmStepBuffer0[i]  = 0;
		PwmStepBuffer7[i]  = 0;
		PwmStepBuffer15[i] = 0;
		PwmStepBuffer23[i] = 0;
    }
}


void FinalDispose(void)
{
    PwmPortInitial( );
    for(unsigned char LcvCounter=0;LcvCounter<32;LcvCounter++)
	{
	    PulseDispose[LcvCounter].PwmPulse=StepData[LcvCounter];
	}
	DisposePwm( );
	TransferStruct( );
}
                          
					
		
                            

⌨️ 快捷键说明

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