不用中断!单片机按键控制 8 个 LED 三种流水模式循环,计数器与定时器实现
以下是使用 C 语言实现上述功能的示例代码: ```c #include <reg51.h> // 包含 51 单片机的头文件 unsigned char count = 0; // 记录按键触发次数 unsigned char mode = 0; // 模式标志 void delay(unsigned int t) // 延时函数 { unsigned int i, j; for (i = 0; i < t; i++) for (j = 0; j < 125; j++); } void main() { P1 = 0xFF; // 初始时所有 LED 熄灭 TMOD = 0x01; // 定时器 0 工作在模式 1 TH0 = (65536 - 50000) / 256; // 50ms 定时 TL0 = (65536 - 50000) % 256; TR0 = 1; // 启动定时器 0 while (1) { if (TF0 == 1) // 定时时间到 { TF0 = 0; TH0 = (65536 - 50000) / 256; TL0 = (65536 - 50000) % 256; if (P3_4 == 0) // 检测按键按下 { delay(10); // 消抖 if (P3_4 == 0) { count++; if (count == 5) // 触发 5 次 { count = 0; mode++; if (mode == 3) // 循环 3 种模式 mode = 0; } } } switch (mode) { case 0: // 从右到左流水 P1 = _crol_(P1, 1); break; case 1: // 从左到右流水 P1 = _cror_(P1, 1); break; case 2: // 两侧向内再流回外侧 if (P1 == 0x7F) // 两侧向内 P1 = 0xFE; else if (P1 == 0xFE) // 流回外侧 P1 = 0x7F; else P1 = (P1 << 1) | (P1 >> 1); break; } } } } ``` 额外需要注意的逻辑点: 1. 注意定时器的初值设置,以保证定时精度。 2. 消抖处理时,延时时间要适当,避免误触发。 3. 代码中的模式切换逻辑要清晰,确保各种模式的正常切换。 ######[AI写代码神器 | 692点数解答 | 2025-04-03 10:56:05]
- C51 程序:利用外部中断 0 边沿触发实现 P2 口 8 个 LED 依次点亮及代码分析(DeepSeek | 228点数解答 | 2025-06-22 23:18:42)174
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)341
- 8051单片机代码详解:按钮控制LED闪烁及消抖原理(讯飞星火 | 697点数解答 | 2024-10-29 14:54:31)289
- 51单片机外部中断0实现LED流水灯:代码详解与要点提醒(DeepSeek | 214点数解答 | 2025-06-22 23:19:09)206
- 51 单片机按键控 LED:代码详解、优化与注意事项揭秘(DeepSeek | 326点数解答 | 2025-06-22 23:19:40)222
- 8051单片机代码:按钮控制LED状态切换代码详细注释解析(讯飞星火 | 830点数解答 | 2024-10-29 15:29:41)310
- 8051单片机代码:带详细注释的按键控制LED程序解析(讯飞星火 | 693点数解答 | 2024-10-29 15:31:00)431
- 8051 单片机:修正代码实现按钮控制 LED 及去抖逻辑(讯飞星火 | 570点数解答 | 2024-10-29 15:32:29)273
- 数字时钟模块代码:深入剖析输入输出与内部信号(字节豆包 | 36点数解答 | 2024-11-15 10:12:43)265
- Verilog代码:数字时钟模块的详细设计与实现(GPT | 3130点数解答 | 2024-11-15 10:14:41)257
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)369
- 职中生用PHP+MySQL+HTML搭建湘绣文化网站,功能全易上手!(DeepSeek | 3146点数解答 | 2025-05-08 23:00:48)217