、在1的基础上增加两个按键KEY1、KEY2,其中KEY1控制LED流水灯的启动,了个灯 先依次闪烁,时间间隔1s,然后3个灯同时闪烁且时间间隔1s,KEY2控制停止,使定 时器不工作,将灯保持现在状态参考代码
时间: 2024-02-25 13:55:22 浏览: 49
用定时器T1中断控制两个LED以不同周期闪烁.zip
5星 · 资源好评率100%
好的,根据你的要求,我来为你提供一份参考代码,代码如下:
```
#include <reg52.h>
sbit LED1 = P1^0;
sbit LED2 = P1^1;
sbit LED3 = P1^2;
sbit KEY1 = P3^0;
sbit KEY2 = P3^1;
void delay(unsigned int time)
{
unsigned int i,j;
for(i=0;i<time;i++)
{
for(j=0;j<125;j++);
}
}
void main()
{
TMOD = 0x01; //设置定时器0为模式1
TH0 = 0xFC; //设置定时器0初值
TL0 = 0x18;
TR0 = 1; //启动定时器0
ET0 = 1; //允许定时器0中断
EA = 1; //开启总中断
while(1)
{
if(KEY1 == 0) //按下KEY1,启动LED流水灯
{
LED1 = 1;
delay(1000);
LED1 = 0;
LED2 = 1;
delay(1000);
LED2 = 0;
LED3 = 1;
delay(1000);
LED3 = 0;
LED1 = 1;
LED2 = 1;
LED3 = 1;
delay(1000);
}
if(KEY2 == 0) //按下KEY2,停止定时器0
{
TR0 = 0;
}
}
}
void Timer0() interrupt 1 //定时器0中断函数
{
static unsigned int cnt = 0;
cnt++;
if(cnt == 500) //500个时钟周期为1s
{
cnt = 0;
LED1 = ~LED1; //LED1取反
LED2 = ~LED2; //LED2取反
LED3 = ~LED3; //LED3取反
}
}
```
这份代码中,我们增加了两个按键,KEY1 和 KEY2,分别用来控制 LED 流水灯的启动和停止。当按下 KEY1 时,LED 会依次闪烁,时间间隔为 1s,然后 3 个 LED 同时闪烁且时间间隔为 1s;当按下 KEY2 时,定时器就会停止工作,LED 就会保持现在状态。希望对你有帮助!
阅读全文