51单片机两路pwm波输出程序(可根据情况设置多路) #include<reg52.h> unsigned char count; sbit pwm1=P1^0; sbit pwm2=P3^1; sbit jia=P2^2; sbit jan=P2^3; sbit zuo=P2^4; sbit you=P2^5; unsigned char jd1,jd2,m1,m2; //延时程序 void delay(unsigned int x) { unsigned char i,j; for(i=x;i>0;i--) for(j=125;j>0;j--); } //定时0.1ms, void Timer0_Init() { TMOD=0x01; IE=0x82; TH0=0xff;//65436/256; TL0=0x9c;//65436%256 TR0=1; } void Timer0_Int() interrupt 1//中断程序 { TH0=0xff; TL0=0x9c; //m1=count; //m2=count; if(m1<jd1) pwm1=1; else pwm1=0; if(m2<jd2) pwm2=1; else pwm2=0; count++; count%=200; //20m秒需要数200次 m1=count; m2=count; /********************************************************/ 根据io口及pwm需要情况可加m3,m4,m5…… /******************************************************/ } void keyscan() { if(jia==0) { delay(10); if(jia==0) { jd1+=1; //count=0; if(jd1>=31) jd1=30; while(jia==0); } } if(jan==0) { delay(10); if(jan==0) { jd1--; if(jd1<=0) jd1=1; while(jan==0); } } if(zuo==0) { delay(10); if(zuo==0) { jd2+=1; if(jd2>=31) jd2=30; while(zuo==0); } } if(you==0) { delay(10); if(you==0) { jd2-=1; if(jd2<=0) jd2=1; while(you==0); } } } void main() { jia=1; jan=1; pwm1=1; pwm2=1; zuo=1; you=1; jd1=1; jd2=1; count=0; Timer0_Init(); while(1) { keyscan(); } }
|