通过51单片机使用外部中断去控制3种流水灯花样。
时间: 2023-06-18 11:05:24 浏览: 187
首先,你需要连接三个LED灯到51单片机的IO口上。然后,你需要使用外部中断来控制这些灯的闪烁模式。以下是一个简单的示例代码,可以实现3种不同的流水灯花样:
```C
#include <reg52.h>
sbit LED1 = P1^0;
sbit LED2 = P1^1;
sbit LED3 = P1^2;
int mode = 1;
void delay(unsigned int t) {
while(t--);
}
void INT0_ISR() interrupt 0 {
mode++;
if (mode > 3) {
mode = 1;
}
}
void main() {
EX0 = 1; // 开启外部中断0
IT0 = 1; // 设置为边沿触发
EA = 1; // 开启总中断
while (1) {
switch(mode) {
case 1:
LED1 = 1; LED2 = 0; LED3 = 0;
delay(50000);
LED1 = 0; LED2 = 1; LED3 = 0;
delay(50000);
LED1 = 0; LED2 = 0; LED3 = 1;
delay(50000);
break;
case 2:
LED1 = 1; LED2 = 0; LED3 = 0;
delay(50000);
LED1 = 0; LED2 = 1; LED3 = 0;
delay(50000);
LED1 = 0; LED2 = 0; LED3 = 1;
delay(50000);
LED1 = 0; LED2 = 1; LED3 = 0;
delay(50000);
LED1 = 1; LED2 = 0; LED3 = 0;
delay(50000);
LED1 = 0; LED2 = 0; LED3 = 1;
delay(50000);
break;
case 3:
LED1 = 1; LED2 = 0; LED3 = 0;
delay(50000);
LED1 = 0; LED2 = 1; LED3 = 0;
delay(50000);
LED1 = 0; LED2 = 0; LED3 = 1;
delay(50000);
LED1 = 0; LED2 = 1; LED3 = 0;
delay(50000);
LED1 = 1; LED2 = 0; LED3 = 0;
delay(50000);
LED1 = 1; LED2 = 1; LED3 = 0;
delay(50000);
LED1 = 0; LED2 = 1; LED3 = 1;
delay(50000);
LED1 = 1; LED2 = 0; LED3 = 1;
delay(50000);
break;
default:
break;
}
}
}
```
在这个示例代码中,我们使用了外部中断0来切换不同的流水灯模式。当按下外部中断0时,中断服务程序会将模式加1,并循环从1到3,当模式达到3时再从1开始。在主程序中,我们根据不同的模式来控制灯的闪烁方式,例如,当模式为1时,三个灯会依次闪烁;当模式为2时,三个灯会依次闪烁两次;当模式为3时,三个灯会依次闪烁三次。这样,就可以实现3种不同的流水灯花样了。
阅读全文