#include "STC12C5A60S2.h" #define uint unsigned int #define uchar unsigned char sbit addPWM = P0^7;//通过两个口低电平来加减来变化pwm sbit cutPWM = P0^6; void delay(uchar ms); void init_PWM(); void PWM0_change(uchar type,uchar change); void PWM0_set(uchar empty); void delay(uchar ms) { uint i; while(ms--) { for(i=0;i<850;i++); } } void init_PWM() { CCON = 0x00; CH = 0; CL = 0; CMOD =0x02; PWM0_set(0X00); PCA_PWM0=0x00; CCAPM0=0X42;//8位PWM无中断 CR=1; } void PWM0_set(uchar empty) { CCAP0L=empty; CCAP0H=empty; } void PWM0_change(uchar type,uchar change) { if(type==0) { if(CCAP0L<0xE6) { CCAP0L+=change; CCAP0H+=change; } } else { if(CCAP0L>0X19) //>10% CCAP0L-=change; CCAP0H-=change; } } void main() { init_PWM(); while(1); { if(addPWM==0) { delay(500); while(addPWM==0); PWM0_change(1,0X0C); } if(cutPWM==0) { delay(500); while(cutPWM==0); PWM0_change(0,0X0C); } } }