用单片机中断处理PWM,控制普通三色LED,输出七种不同颜色,呼吸变化。不占用程序运行时间。
单片机源程序如下:
}
else //白色由亮变暗
{
time-=t;
G_OUT=time;
B_OUT=time;
R_OUT=time;
if(time<=MIN)
{
dir=0;
time=0;
index=0;
}
}
break;
}
}
//定时器1配置
void configtime1()
{
TH1=0x80;
TL1=TH1;
TMOD&=0x0f;
TMOD|=0x20;
TR1=1;
ET1=1;
}
//定时器0配置
void configtime0(unsigned int ms)
{
unsigned long tmp;
tmp=11059200/12;
tmp=tmp*ms/1000;
tmp=65536-tmp;
T0RH=(unsigned char)(tmp>>8);
T0RL=(unsigned char)tmp;
TH0=T0RH;
TL0=T0RL;
TMOD&=0xf0;
TMOD|=0x01;
TR0=1;
ET0=1;
}
//定时器0中断涵数,每5ms刷新一次占空比
void timer0() interrupt 1
{
static unsigned int tmr;
TH0=T0RH;
TL0=T0RL;
tmr++;
if(tmr>=5)
{
tmr=0;
ConfigPWM(1);
}
}
//定时器1中断涵数,输出占空比
void timer1() interrupt 3
{
unsigned char cnt;
for(cnt=0;cnt { if(cnt R_LED=1; //红色占空比大于计数值时红灯亮 else R_LED=0; //否则就关闭红色 if(cnt G_LED=1; //绿色占空比大于计数值时绿灯亮 else G_LED=0; //否则就关闭绿色 if(cnt B_LED=1; //蓝色占空比大于计数值时蓝灯亮 else B_LED=0; //否则就关闭蓝色 } }
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』