别看别人的单片机上有什么,看自己的就行了,有什么用什么,这个是我写的,基本一看就明白,至于你想改成什么样子,看明白了自己就可以搞定了,注,这是我以前写的,那时很菜鸟,函数名比较长,用汉语拼音拼的,你自己用汉语拼音读就明白了
#include<reg51.h>

#define uint unsigned int
#define uchar unsigned char
uint TH0_1,TL0_1;TH0_2,TL0_2,TH0_3,TL0_3;
sbit key1=P3^2;
sbit key2=P3^3;
sbit key3=P3^4;
sbit out=P1^0;
void dingshiqi_chushihua()
{
out=0;
TR1=1;
EA=1;
TMOD=0x10;
ET1=1;
TR1=1;
TH0_1=(65536-500)/256;
TL0_1=(65536-500)%256;
TH0_2=(65536-1000)/256;
TL0_2=(65536-1000)%256;
TH0_3=(65536-1500)/256;
TL0_3=(65536-1500)%256;
}
void dingshiqi_chuli() interrupt 3
{
out=~out;
if(key1==0)
{
TH1=TH0_1; //旋转到180°
TL1=TL0_1;
}
if(key2==0)
{
TH1=TH0_2; //旋转到0°
TL1=TL0_2;
}

if(key3==0)
{
TH1=TH0_3; //旋转到90°
TL1=TL0_3;
}
}
void main()
{
dingshiqi_chushihua();
while(1)
{
}
}
这个可以用三个I/o口,用定时器0分时启动三路PWM波,代码的话,每次中断给计数器赋下次中断的时间,void T0_time() interrupt 1 //通过定时器0产生多路PWM,每次中断赋值下一次中断的时间,
{ //两个t[]一组,在20ms周期内分时启动各路PWM高电平,
TH0=(65536-9.216*t[i])/256; //各路的高电平只需1-2ms
TL0=(65536-9.216*t[i])/256;
i++;
switch(i)
{
case 1:
k1=1;
break;
case 2:
k1=0;
break;
case 3:
k2=1;
break;
case 4:
k2=0;
break;
case 5:
k3=1;

break;
case 6:
k3=0;
break;
}


