酷代码 AI
菜单
全部AI  /  热门  /  AI写代码神器
服务商

51单片机含中断程序,八个灯,一个按钮按下,从上往下次亮,另一个按钮按下,从下往上依次亮

# 51单片机中断控制LED流水灯程序 这是一个基于51单片机的程序,使用两个外部中断按钮控制8个LED灯的流动方向:一个按钮触发从上往下流动,另一个按钮触发从下往上流动。 ```c #include <reg51.h> #define LED_PORT P1 // 假设8个LED连接在P1端口 // 定义按钮引脚 sbit UP_BUTTON = P3^2; // INT0 (P3.2) sbit DOWN_BUTTON = P3^3; // INT1 (P3.3) // 全局变量存储当前流动方向 unsigned char flow_direction = 0; // 0:从上往下, 1:从下往上 // 延时函数 void delay_ms(unsigned int ms) { unsigned int i, j; for(i = 0; i < ms; i++) for(j = 0; j < 123; j++); } // 外部中断0服务函数 (从上往下) void int0_isr() interrupt 0 { flow_direction = 0; } // 外部中断1服务函数 (从下往上) void int1_isr() interrupt 2 { flow_direction = 1; } void main() { // 初始化LED端口 LED_PORT = 0xFF; // 初始状态LED全灭 // 设置中断触发方式 IT0 = 1; // INT0下降沿触发 IT1 = 1; // INT1下降沿触发 // 开启中断 EX0 = 1; // 允许INT0中断 EX1 = 1; // 允许INT1中断 EA = 1; // 开启总中断 while(1) { if(flow_direction == 0) { // 从上往下流动 LED_PORT = 0xFE; // 11111110 (第一个灯亮) delay_ms(200); LED_PORT = 0xFD; // 11111101 delay_ms(200); LED_PORT = 0xFB; // 11111011 delay_ms(200); LED_PORT = 0xF7; // 11110111 delay_ms(200); LED_PORT = 0xEF; // 11101111 delay_ms(200); LED_PORT = 0xDF; // 11011111 delay_ms(200); LED_PORT = 0xBF; // 10111111 delay_ms(200); LED_PORT = 0x7F; // 01111111 (最后一个灯亮) delay_ms(200); } else { // 从下往上流动 LED_PORT = 0x7F; // 01111111 (最后一个灯亮) delay_ms(200); LED_PORT = 0xBF; // 10111111 delay_ms(200); LED_PORT = 0xDF; // 11011111 delay_ms(200); LED_PORT = 0xEF; // 11101111 delay_ms(200); LED_PORT = 0xF7; // 11110111 delay_ms(200); LED_PORT = 0xFB; // 11111011 delay_ms(200); LED_PORT = 0xFD; // 11111101 delay_ms(200); LED_PORT = 0xFE; // 11111110 (第一个灯亮) delay_ms(200); } } } ``` ## 程序说明 1. 使用P1端口连接8个LED灯 2. 使用P3.2(INT0)和P3.3(INT1)连接两个按钮 3. 按下INT0按钮触发从上往下流动 4. 按下INT1按钮触发从下往上流动 5. 使用delay_ms函数控制LED流动速度 ## 硬件连接注意事项 1. LED需要串联限流电阻(通常220Ω-1kΩ) 2. 按钮需要连接上拉电阻(通常10kΩ) 3. 确保按钮按下时产生稳定的低电平信号 ## 优化建议 1. 可以使用查表法简化LED显示代码 2. 可以增加按键消抖处理 3. 可以添加更多的流动模式 ## 三条额外需要注意的逻辑点 1. 中断服务函数中不应执行耗时操作,这里只是简单改变方向标志 2. 实际应用中应考虑按键消抖,可以在中断中设置标志,在主循环中处理 3. 如果需要更精确的延时,可以使用定时器代替软件延时 [2025-04-26 10:34:16 | AI写代码神器 | 999点数解答]

相关提问