#include "pwm.h" #include "pwm_cfg.h" #include "task_hal_cfg.h" #include #include #define PWM_LOAD (FOSC/8UL/PWM_FREQ-1) //PWM_LOAD = FOSC/FREQ/PreScale-1 //FREQ = FOSC/(PreScale*(PWMLOAD+1)) XDATA uint8_t PWMInfo[9]; void InitPWMTimer(void) { uint16_t Light = PWM_DEFAULT_DUTY; int j; uint16_t PWMValue = PWM_LOAD; PWM_Init(PWM_PRESSEL_FOSC_D8, PWMValue); //PWM时钟源8分频,周期为(PWM_LOAD+1)*8/FOSC PWM_OutputStateConfig(PWM0, PWM_OUTPUTSTATE_ENABLE);//使能PWM0 PWM_OutputStateConfig(PWM1, PWM_OUTPUTSTATE_ENABLE);//使能PWM1 PWM_OutputStateConfig(PWM2, PWM_OUTPUTSTATE_ENABLE);//使能PWM2 PWM_OutputStateConfig(PWM3, PWM_OUTPUTSTATE_ENABLE);//使能PWM3 PWM_OutputStateConfig(PWM4, PWM_OUTPUTSTATE_ENABLE);//使能PWM4 PWM_PolarityConfig(PWM0, PWM_POLARITY_NON_INVERT); //设置PWM0不反向 PWM_PolarityConfig(PWM1, PWM_POLARITY_NON_INVERT); //设置PWM1不反向 PWM_PolarityConfig(PWM2, PWM_POLARITY_NON_INVERT); //设置PWM2不反向 PWM_PolarityConfig(PWM3, PWM_POLARITY_NON_INVERT); //设置PWM3不反向 PWM_PolarityConfig(PWM4, PWM_POLARITY_NON_INVERT); //设置PWM4不反向 PWM_Cmd(ENABLE); //打开PWM总开关 for( j=0;j<5;j++) { SetPWMDuty(j,Light); } //PWM_ITConfig(ENABLE, LOW); //打开PWM中断 } void InitPWM(void) { GPIO_Init(GPIOR,LED_PIN_R,GPIO_MODE_OUT_PP); GPIO_Init(GPIOG,LED_PIN_G,GPIO_MODE_OUT_PP); GPIO_Init(GPIOB,LED_PIN_B,GPIO_MODE_OUT_PP); GPIO_Init(GPIOC,LED_PIN_C,GPIO_MODE_OUT_PP); GPIO_Init(GPIOW,LED_PIN_W,GPIO_MODE_OUT_PP); InitPWMTimer(); } code PWM_OutputPin_TypeDef PWMChl[] = {PWM0,PWM1,PWM2,PWM3,PWM4,PWM5}; void SetPWMDuty(unsigned char channel,unsigned int duty) { PWM_IndependentModeConfig(PWMChl[channel],duty); } void SetPWMInfo(uint16_t *pPwmInfo,uint8_t len1) { uint8_t i = 0; for(i=0;i