eda 第一次按下按键,第一个LED灯亮起1s后熄灭;第二次按下按键,第二个LED灯亮起1s后熄灭...总共控制的LED灯数量由学生自行决定,必须≥2
时间: 2024-05-05 11:22:31 浏览: 38
好的,这个任务可以使用单片机来实现。以下是一个基于Arduino的示例代码,控制4个LED灯的按键输入和输出:
```C++
const int buttonPin = 2; // 定义按键输入引脚
const int ledPin1 = 3; // 定义第一个LED灯输出引脚
const int ledPin2 = 4; // 定义第二个LED灯输出引脚
const int ledPin3 = 5; // 定义第三个LED灯输出引脚
const int ledPin4 = 6; // 定义第四个LED灯输出引脚
int ledState1 = LOW; // 第一个LED灯的状态
int ledState2 = LOW; // 第二个LED灯的状态
int ledState3 = LOW; // 第三个LED灯的状态
int ledState4 = LOW; // 第四个LED灯的状态
unsigned long lastTime = 0; // 记录上一次按键按下的时间
int ledIndex = 0; // 当前应该亮起的LED灯的编号
void setup() {
pinMode(buttonPin, INPUT_PULLUP); // 设置按键输入引脚为上拉输入模式
pinMode(ledPin1, OUTPUT); // 设置第一个LED灯输出引脚为输出模式
pinMode(ledPin2, OUTPUT); // 设置第二个LED灯输出引脚为输出模式
pinMode(ledPin3, OUTPUT); // 设置第三个LED灯输出引脚为输出模式
pinMode(ledPin4, OUTPUT); // 设置第四个LED灯输出引脚为输出模式
}
void loop() {
int buttonState = digitalRead(buttonPin); // 读取按键状态
if (buttonState == LOW && (millis() - lastTime) > 1000) { // 如果按键被按下且距离上一次按下已经超过1秒
lastTime = millis(); // 记录当前按下的时间
// 关闭上一个LED灯
switch (ledIndex) {
case 0:
digitalWrite(ledPin1, LOW);
break;
case 1:
digitalWrite(ledPin2, LOW);
break;
case 2:
digitalWrite(ledPin3, LOW);
break;
case 3:
digitalWrite(ledPin4, LOW);
break;
}
// 计算下一个应该亮起的LED灯的编号
ledIndex = (ledIndex + 1) % 4;
// 打开当前LED灯
switch (ledIndex) {
case 0:
digitalWrite(ledPin1, HIGH);
break;
case 1:
digitalWrite(ledPin2, HIGH);
break;
case 2:
digitalWrite(ledPin3, HIGH);
break;
case 3:
digitalWrite(ledPin4, HIGH);
break;
}
}
}
```
在这个示例代码中,我们使用了一个变量`ledIndex`来记录当前应该亮起的LED灯的编号。每次按键按下后,我们先关闭上一个亮着的LED灯,然后计算下一个应该亮起的LED灯的编号,并打开它。我们使用了`switch`语句来控制每个LED灯的输出状态。在`setup`函数中,我们使用`pinMode`函数来设置每个引脚的输入输出模式。在`loop`函数中,我们使用`digitalRead`函数来读取按键的状态,并使用`digitalWrite`函数来控制LED灯的输出状态。
阅读全文