#include<reg51.h>
typedef unsigned int uint;
typedef unsigned char uchar;
uchar pwm_data_a,pwm_data_b,pwm_data_c,pwm_a,pwm_b,pwm_c;
sbit pwm_1=P1^5;
sbit pwm_2=P1^6;
sbit pwm_3=P1^7;
void init_time0(void)//定时器0初始化函数
{
TMOD=(TMOD&0Xf0)|0X01;//定时器0工作在模式2(16位定时器)(做PWM频率)
TH0=0Xd8;
TL0=0Xf0;//定时器周期为512US(频率2K)
TR0=1;//启动定时器0
ET0=1;//开定时器0的中断
EA=1;//开总中断
}
void init_time1(void)//定时器1初始化函数
{
TMOD=(TMOD&0X0f)|0X20;//定时器0工作在模式3(自动重装载的模式下)(做PWM宽度调
TH1=0Xd8;
TL1=0Xd8;//定时器周期为2US(频率512K)
TR1=1;//启动定时器0
ET1=1;//开定时器0的中断
EA=1;//开总中断
}
void intr_time0(void) interrupt 1//定时器0中断服务函数
{
TH0=0Xd8;
TL0=0Xf0;//定时器周期为512US(频率2K)
pwm_1=pwm_2=pwm_3=1;
pwm_a=pwm_b=pwm_c=0;
}
void intr_time1(void) interrupt 3//定时器1中断服务函数
{
if(pwm_a<pwm_data_a)
{
pwm_a++;
}
else
{
pwm_1=0;
}
if(pwm_b<pwm_data_b)
{
pwm_b++;
}
else
{
pwm_2=0;
}
if(pwm_c<pwm_data_c)
{
pwm_c++;
}
else
{
pwm_3=0;
}
}
void main(void)
{
pwm_data_a=240;
pwm_data_b=200;
pwm_data_c=160;
init_time1();
init_time0();
while(1)
{}
}
其它功能自己加
typedef unsigned int uint;
typedef unsigned char uchar;
uchar pwm_data_a,pwm_data_b,pwm_data_c,pwm_a,pwm_b,pwm_c;
sbit pwm_1=P1^5;
sbit pwm_2=P1^6;
sbit pwm_3=P1^7;
void init_time0(void)//定时器0初始化函数
{
TMOD=(TMOD&0Xf0)|0X01;//定时器0工作在模式2(16位定时器)(做PWM频率)
TH0=0Xd8;
TL0=0Xf0;//定时器周期为512US(频率2K)
TR0=1;//启动定时器0
ET0=1;//开定时器0的中断
EA=1;//开总中断
}
void init_time1(void)//定时器1初始化函数
{
TMOD=(TMOD&0X0f)|0X20;//定时器0工作在模式3(自动重装载的模式下)(做PWM宽度调
TH1=0Xd8;
TL1=0Xd8;//定时器周期为2US(频率512K)
TR1=1;//启动定时器0
ET1=1;//开定时器0的中断
EA=1;//开总中断
}
void intr_time0(void) interrupt 1//定时器0中断服务函数
{
TH0=0Xd8;
TL0=0Xf0;//定时器周期为512US(频率2K)
pwm_1=pwm_2=pwm_3=1;
pwm_a=pwm_b=pwm_c=0;
}
void intr_time1(void) interrupt 3//定时器1中断服务函数
{
if(pwm_a<pwm_data_a)
{
pwm_a++;
}
else
{
pwm_1=0;
}
if(pwm_b<pwm_data_b)
{
pwm_b++;
}
else
{
pwm_2=0;
}
if(pwm_c<pwm_data_c)
{
pwm_c++;
}
else
{
pwm_3=0;
}
}
void main(void)
{
pwm_data_a=240;
pwm_data_b=200;
pwm_data_c=160;
init_time1();
init_time0();
while(1)
{}
}
其它功能自己加