# 51单片机外部中断控制P2口流水灯与闪烁灯代码 以下是使用51单片机外部中断控制P2口流水灯和闪烁灯的完整代码,包含注释说明: ```c #include <reg51.h> // 包含51单片机头文件 // 定义LED灯连接端口 #define LED_PORT P2 // 函数声明 void delay(unsigned int ms); void flow_led(); void blink_led(); // 变量定义 unsigned char mode = 0; // 0-流水灯模式,1-闪烁灯模式 // 外部中断0服务函数 void ext0_isr() interrupt 0 { mode = !mode; // 切换模式 LED_PORT = 0xFF; // 关闭所有LED } // 主函数 void main() { // 初始化外部中断0 IT0 = 1; // 设置INT0为边沿触发方式 EX0 = 1; // 使能INT0中断 EA = 1; // 开启总中断 while(1) { if(mode == 0) { flow_led(); // 流水灯模式 } else { blink_led(); // 闪烁灯模式 } } } // 流水灯函数 void flow_led() { unsigned char i; for(i = 0; i < 8; i++) { LED_PORT = ~(0x01 << i); // LED从P2.0到P2.7依次点亮 delay(200); // 延时200ms } } // 闪烁灯函数 void blink_led() { LED_PORT = 0x00; // 所有LED亮 delay(500); // 延时500ms LED_PORT = 0xFF; // 所有LED灭 delay(500); // 延时500ms } // 延时函数 void delay(unsigned int ms) { unsigned int i, j; for(i = 0; i < ms; i++) for(j = 0; j < 123; j++); } ``` ## 代码说明 1. 硬件连接: - LED灯连接在P2口,P2.0-P2.7分别连接8个LED - 外部中断0(INT0)连接一个按键,用于切换模式 2. 功能说明: - 默认模式为流水灯,LED依次从P2.0到P2.7点亮 - 按下外部中断按键后切换为闪烁模式,所有LED同时亮灭 - 再次按下按键切换回流水灯模式 3. 中断配置: - IT0=1:设置INT0为边沿触发方式 - EX0=1:使能INT0中断 - EA=1:开启总中断 4. 延时函数: - 使用简单的双重循环实现延时 - 延时时间可根据实际需求调整 ## 使用说明 1. 将代码编译后烧录到51单片机 2. 连接8个LED到P2口 3. 连接一个按键到INT0引脚(P3.2) 4. 上电后LED将开始流水灯效果 5. 按下按键可切换为全LED闪烁模式 6. 再次按下按键返回流水灯模式 注意:实际延时时间可能因晶振频率不同而有所变化,可根据需要调整延时函数中的循环次数。 [2025-06-09 09:12:31 | AI问答 | 770点数解答]