用一段c语言代码实现按键控制led灯

按键一控制正向流水灯(按一下动一下) 按键二控制反向流水灯(按一下动一下) 按键三控制流水灯的数量(1-3个)

参考GPT和自己的思路:好的,这个问题可以用C语言的代码来实现。以下是一个简单的示例:

#include <stdio.h>
#include <wiringPi.h>

#define LED_COUNT_MAX 3   // 最大灯的数量

int main()
{
    int led_count = 1;    // 初始灯的数量
    int led_index = 0;    // 当前轮到哪个灯
    int direction = 1;    // 灯的流动方向,1表示正向,-1表示反向
    int button_pin_1 = 1; // 按钮1的引脚号
    int button_pin_2 = 2; // 按钮2的引脚号
    int button_pin_3 = 3; // 按钮3的引脚号
    int led_pins[] = {4, 5, 6}; // 灯的引脚号列表

    wiringPiSetup(); // 初始化wiringPi库

    // 设置按钮引脚为输入模式,并开启上拉电阻
    pinMode(button_pin_1, INPUT);
    pullUpDnControl(button_pin_1, PUD_UP);
    pinMode(button_pin_2, INPUT);
    pullUpDnControl(button_pin_2, PUD_UP);
    pinMode(button_pin_3, INPUT);
    pullUpDnControl(button_pin_3, PUD_UP);

    // 设置灯的引脚为输出模式
    for (int i = 0; i < LED_COUNT_MAX; i++) {
        pinMode(led_pins[i], OUTPUT);
    }

    while (1) {
        // 检测按钮1的状态,如果按下则切换正向流水灯和关闭所有灯
        if (digitalRead(button_pin_1) == LOW) {
            if (direction == 1) {
                digitalWrite(led_pins[led_index], LOW);
                led_index = (led_index + 1) % led_count;
                digitalWrite(led_pins[led_index], HIGH);
            } else {
                digitalWrite(led_pins[led_index], LOW);
                led_index = (led_index - 1 + led_count) % led_count;
                digitalWrite(led_pins[led_index], HIGH);
            }
            delay(100);
        }

        // 检测按钮2的状态,如果按下则切换反向流水灯和关闭所有灯
        if (digitalRead(button_pin_2) == LOW) {
            direction = -direction;
            digitalWrite(led_pins[led_index], LOW);
            led_index = (led_index + direction + led_count) % led_count;
            digitalWrite(led_pins[led_index], HIGH);
            delay(100);
        }

        // 检测按钮3的状态,如果按下则切换灯的数量
        if (digitalRead(button_pin_3) == LOW) {
            led_count = (led_count % LED_COUNT_MAX) + 1;
            for (int i = led_count; i < LED_COUNT_MAX; i++) {
                digitalWrite(led_pins[i], LOW); // 关闭多余的灯
            }
            delay(100);
        }
    }

    return 0;
}

这个代码使用了wiringPi库来控制GPIO引脚。实现的功能包括按键一控制正向流水灯,按键二控制反向流水灯,按键三控制灯的数量。你可以根据自己的需要修改引脚号、流水灯的速度等参数。

  • 请看👉 :按键控制LED灯实验
  • 除此之外, 这篇博客: 8.定时器中的 流水灯(按键控制LED流水灯左右移动) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • #include "INTRINS.H" //数学函数
    extern unsigned char _crol_    (unsigned char, unsigned char);//左移一位
    extern unsigned char _cror_    (unsigned char, unsigned char);//右移一位
    特殊之处:比如a = 0x01; a = _cror_(a,1); 他到a = 0x80 之后直接变成 a = 0x01;