三个IO口控制两个灯一个按键

三个IO口控制一个按键以及两个LED灯;
按键按下一次后其中一个灯常亮,再次按下后另一个灯做闪烁提示

以下是一个使用C语言编写的程序,用于控制一个按键和两个LED灯。当按键被按下一次时,其中一个LED灯会常亮;当按键再次被按下时,另一个LED灯会闪烁。

#include <stdio.h>
#include <stdlib.h>

// 定义IO口
#define IO_KEY 0
#define IO_LED1 1
#define IO_LED2 2

// 延时函数
void delay(int ms) {
    for (int i = 0; i < ms; i++) {
        for (int j = 0; j < 120; j++) {
            // 这里空循环用于延时
        }
    }
}

int main() {
    int key_state = 0; // 按键状态,0表示未按下,1表示按下
    int led1_state = 0, led2_state = 0; // LED状态,0表示熄灭,1表示亮起

    while (1) {
        // 检查按键状态
        if (getchar() == IO_KEY) {
            key_state = 1; // 按键按下
        } else {
            key_state = 0; // 按键未按下
        }

        // 根据按键状态控制LED灯
        if (key_state == 1 && led1_state == 0) {
            printf("\033[1;1HLED1 ON"); // 打开LED1
            led1_state = 1;
        } else if (key_state == 1 && led1_state == 1) {
            printf("\033[1;1HLED2 BLINK"); // LED2闪烁
            led2_state = 0;
        } else if (key_state == 0 && led2_state == 0) {
            printf("\033[1;1HLED1 OFF"); // LED1熄灭
            led1_state = 0;
        } else if (key_state == 0 && led2_state == 1) {
            printf("\033[1;1HLED2 OFF"); // LED2熄灭
            led2_state = 0;
        }
    }
    return 0;
}

【以下回答由 GPT 生成】

首先,你需要确定具体的硬件平台,例如使用的单片机或开发板型号,以及具体的IO口引脚编号。这样才能进行相应的编程和连接。

以下是一个基于常见单片机的示例代码,可以实现该功能。

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

// 定义按键和LED引脚编号
#define BUTTON_PIN  17
#define LED_PIN1    18
#define LED_PIN2    19

int main(void) {
    // 初始化WiringPi库
    if (wiringPiSetupGpio() == -1) {
        perror("wiringPiSetupGpio失败");
        return 1;
    }

    // 设置引脚模式和初始状态
    pinMode(BUTTON_PIN, INPUT);
    pinMode(LED_PIN1, OUTPUT);
    pinMode(LED_PIN2, OUTPUT);

    // 初始化标志变量
    bool led1On = false;
    bool led2Blinking = false;

    while (true) {
        // 检测按键状态
        int buttonState = digitalRead(BUTTON_PIN);

        // 当检测到按下按键时
        if (buttonState == HIGH) {
            delay(200);  // 延迟一段时间做去抖动处理

            // 判断是否是第一次按下按键
            if (led1On == false && led2Blinking == false) {
                digitalWrite(LED_PIN1, HIGH);  // 点亮LED1
                led1On = true;  // 更新标志变量
            }
            // 判断是否是再次按下按键
            else if (led1On == true && led2Blinking == false) {
                led2Blinking = true;  // 更新标志变量
            }
        }

        // 根据标志变量控制LED2的闪烁
        if (led2Blinking) {
            digitalWrite(LED_PIN2, HIGH);  // 点亮LED2
            delay(500);
            digitalWrite(LED_PIN2, LOW);  // 熄灭LED2
            delay(500);
        }
    }

    return 0;
}

请注意,以上代码是一个示例,具体的引脚编号和平台相关设置需要根据你所使用的硬件进行调整。确保按键和LED引脚的连接正确,且能被程序正常读取和控制。

另外,如果你使用的是其他开发板或单片机,请参考相应的文档和示例代码,进行相关的IO口控制。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^