通过51单片机使用外部中断去控制8盏led灯实现3种流水灯花样
时间: 2023-06-18 07:05:25 浏览: 145
基于51单片机的花样流水灯
通过外部中断控制8盏LED灯实现3种流水灯花样,可以按照以下步骤进行:
1. 确定外部中断引脚和LED灯的控制引脚,这里以P3口为例,P3.0~P3.7为控制LED灯的引脚,P3.2为外部中断引脚。
2. 初始化外部中断,使能中断并设置触发方式为下降沿触发。
3. 编写中断服务函数,在中断服务函数中编写控制LED灯的代码,实现流水灯的效果。
4. 编写主函数,初始化LED灯引脚,并进入循环等待中断触发。
下面是一个简单的示例代码,实现了三种不同的流水灯效果:
```c
#include <reg52.h>
sbit LED1 = P3^0;
sbit LED2 = P3^1;
sbit LED3 = P3^2;
sbit LED4 = P3^3;
sbit LED5 = P3^4;
sbit LED6 = P3^5;
sbit LED7 = P3^6;
sbit LED8 = P3^7;
void InitExternalInterrupt()
{
IT0 = 1; // 设置外部中断0的触发方式为下降沿触发
EX0 = 1; // 使能外部中断0
EA = 1; // 使能总中断
}
void ExternalInterrupt0() interrupt 0
{
static unsigned char led_pattern = 0;
led_pattern++;
if (led_pattern > 3) {
led_pattern = 1;
}
switch (led_pattern) {
case 1:
LED1 = 1; LED2 = 0; LED3 = 0; LED4 = 0; LED5 = 0; LED6 = 0; LED7 = 0; LED8 = 0;
break;
case 2:
LED1 = 0; LED2 = 1; LED3 = 0; LED4 = 0; LED5 = 0; LED6 = 0; LED7 = 0; LED8 = 0;
break;
case 3:
LED1 = 0; LED2 = 0; LED3 = 1; LED4 = 0; LED5 = 0; LED6 = 0; LED7 = 0; LED8 = 0;
break;
default:
break;
}
}
void main()
{
LED1 = 0; LED2 = 0; LED3 = 0; LED4 = 0; LED5 = 0; LED6 = 0; LED7 = 0; LED8 = 0;
InitExternalInterrupt();
while (1) {}
}
```
这个示例代码中,中断服务函数ExternalInterrupt0()会被触发,每次触发时会切换到下一个LED灯的状态,从而实现了不同的流水灯效果。可以根据需要修改代码,实现更多的流水灯效果。
阅读全文