用2*3的矩阵按键控制八个led灯和一个数码管。第一个按键按下时,八个led灯呈现一种不断变化的花样(花样自己拟定),数码管显示1;第二个按键按下时,八个led灯呈现第二种花样,数码管显示2;第三个和第四个按键也是同样功能;第五个按键控制速度,按下时流水灯的速度会变快;第六个按键为系统复位键,按下后系统复位,所有的led灯熄灭,数码管显示0。
时间: 2023-05-11 11:03:07 浏览: 70
Button-control--display-graphics.zip_按键控制8×8LED_点阵 按键
可以使用以下代码实现:
```c
int ledPatterns[4][8] = { // 4种不同的led灯花样
{1, 0, 0, 0, 0, 0, 0, 1},
{0, 1, 0, 0, 0, 0, 1, 0},
{0, 0, 1, 0, 0, 1, 0, 0},
{0, 0, 0, 1, 1, 0, 0, 0}
};
int currentPattern = 0; // 当前的led灯花样
int currentNumber = 0; // 当前的数码管数字
int currentSpeed = 500; // 当前的流水灯速度
void setup() {
for (int i = 2; i <= 9; i++) {
pinMode(i, OUTPUT); // 设置8个led灯的引脚为输出模式
}
pinMode(10, OUTPUT); // 设置数码管的引脚为输出模式
for (int i = 11; i <= 13; i++) {
pinMode(i, INPUT_PULLUP); // 设置3个按键的引脚为输入模式,并开启上拉电阻
}
}
void loop() {
// 检测按键状态
if (digitalRead(11) == LOW) { // 第一个按键
currentPattern = 0;
currentNumber = 1;
} else if (digitalRead(12) == LOW) { // 第二个按键
currentPattern = 1;
currentNumber = 2;
} else if (digitalRead(13) == LOW) { // 第三个和第四个按键
currentPattern = 2 + (millis() / currentSpeed) % 2;
currentNumber = 3 + (currentPattern - 2) % 2;
}
if (digitalRead(5) == LOW) { // 第五个按键
currentSpeed = max(currentSpeed - 50, 50);
}
if (digitalRead(6) == LOW) { // 第六个按键
currentPattern = 0;
currentNumber = 0;
currentSpeed = 500;
}
// 更新led灯状态
for (int i = 0; i < 8; i++) {
digitalWrite(i + 2, ledPatterns[currentPattern][i]);
}
// 更新数码管数字
digitalWrite(10, LOW);
shiftOut(10, 11, MSBFIRST, currentNumber);
digitalWrite(10, HIGH);
// 延时一段时间
delay(currentSpeed);
}
```
这段代码使用了一个二维数组来存储4种不同的led灯花样,使用3个按键来切换led灯花样和数码管数字,使用第5个按键来控制流水灯速度,使用第6个按键来复位系统。在循环中,首先检测按键状态,然后根据当前的led灯花样和数码管数字更新led灯和数码管的状态,最后延时一段时间。
阅读全文