怎么用一个定时器使3个LED灯闪烁,闪烁时间分别为1s、0.5s、2s且不互相影响?

代码怎么打呢?不理解函数
2025-03-10 21:05:54
推荐回答(1个)
回答1:

1S 0·5S 2s是周期吗?
那么它们翻转时间是0·5S 0·25S 1S
最大1S 是0·5和0·25的倍数
我们定时50ms,然后计中断次数
中断10次第1个LED翻转 5次第二个LED翻转 20次第3个LED翻转,并将计中断次数的变量清0
程序如下
sbit led1=P1^0; sbit led2=P1^1;sbit led3=P1^2;
uchar a;
TMOD=1;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
ET0=1;EA=1;
TR0=1;
while(1);
中断程序:
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
a++;
if(a%5==0) led1=!led1;
if(a%10==0) led2=!led2;
if(a==20) { led3=!led3;a=0;}
}