用2*3的矩阵按键控制八个led灯和一个数码管。第-个按键按下时,八个led灯呈现一种不断变化的花样( 花样自己拟定),数码管 显示1;第二个按键按下时,八个led灯呈现第二种花样,数码管显示2;第三个和第四个按键也是同样功能;第五个按键控制速度,按下时流水灯的速度会变快;第六个按键为系统复位键,按下后系统复位,所有的led灯熄灭,数码管显示0。
时间: 2023-05-23 21:02:42 浏览: 117
51单片机按键输入(一个按键控制一个led发光二极管+4*4矩阵控制数码管键值显示)proteus+keil.rar
你可以使用以下代码实现此功能:
```
#include <Arduino.h>
const int ledPins[8] = {2, 3, 4, 5, 6, 7, 8, 9}; // 8个LED灯的引脚
const int digitPins[7] = {10, 11, 12, 13, A0, A1, A2}; // 数码管的引脚
const int buttonPins[6] = {A3, A4, A5, A6, A7, A8}; // 按键的引脚
int speed = 500; // 流水灯的速度,初始值为500毫秒
int pattern = 0; // 当前的LED灯花样
int lastButtonState[6] = {HIGH, HIGH, HIGH, HIGH, HIGH, HIGH}; // 每个按键的上一个状态
int running = true; // 是否运行中
void setup() {
// 初始化引脚
for (int i = 0; i < 8; i++) {
pinMode(ledPins[i], OUTPUT);
}
for (int i = 0; i < 7; i++) {
pinMode(digitPins[i], OUTPUT);
}
for (int i = 0; i < 6; i++) {
pinMode(buttonPins[i], INPUT);
}
// 数码管显示初始化
digitalWrite(digitPins[0], HIGH);
digitalWrite(digitPins[1], HIGH);
digitalWrite(digitPins[2], HIGH);
digitalWrite(digitPins[3], HIGH);
digitalWrite(digitPins[4], LOW);
digitalWrite(digitPins[5], LOW);
digitalWrite(digitPins[6], LOW);
}
void loop() {
// 控制流水灯速度
int speedButtonState = digitalRead(buttonPins[4]);
if (speedButtonState == LOW) {
// 按钮按下,速度变快
delay(100); // 延时去抖
speed = max(speed - 50, 50); // 速度加快,最小为50毫秒
}
// 控制复位
int resetButtonState = digitalRead(buttonPins[5]);
if (resetButtonState == LOW) {
// 按钮按下,复位
delay(100); // 延时去抖
running = false; // 停止运行
}
// 控制当前LED灯花样
for (int i = 0; i < 4; i++) {
int buttonState = digitalRead(buttonPins[i]);
// 按钮按下,切换LED灯花样
if (buttonState == LOW && lastButtonState[i] == HIGH) {
delay(100); // 延时去抖
pattern = i + 1; // 设置当前LED灯花样
}
lastButtonState[i] = buttonState;
}
// 控制LED灯亮起的顺序和速度
for (int i = 0; i < 8; i++) {
digitalWrite(ledPins[i], (pattern & (1 << i)) ? HIGH : LOW); // 按花样设置LED灯
delay(speed); // 延时控制速度
}
// 显示数码管
for (int i = 0; i < 7; i++) {
digitalWrite(digitPins[i], (i == pattern - 1) ? HIGH : LOW); // 数码管显示当前花样
}
// 判断是否复位
if (!running) {
for (int i = 0; i < 8; i++) {
digitalWrite(ledPins[i], LOW); // 熄灭LED灯
}
digitalWrite(digitPins[0], HIGH); // 数码管显示0
digitalWrite(digitPins[1], HIGH);
digitalWrite(digitPins[2], HIGH);
digitalWrite(digitPins[3], HIGH);
digitalWrite(digitPins[4], LOW);
digitalWrite(digitPins[5], LOW);
digitalWrite(digitPins[6], LOW);
delay(1000); // 延时等待操作完成
running = true; // 重新启动
}
}
```
使用此代码,你可以通过按键控制LED灯的花样和速度,同时数码管会显示当前选择的花样编号。按下复位键后,所有LED灯会熄灭,数码管会显示0。
阅读全文