用2*3的矩阵按键控制八个led灯和一个数码管。第一个按键按下时,八个led灯呈现一种不断变化的花样(花样自己拟定),数码管显示1;第二个按键按下时,八个led灯呈现第二种花样,数码管显示2;第三个和第四个按键也是同样功能;第五个按键控制速度,按下时流水灯的速度会变快;第六个按键为系统复位键,按下后系统复位,所有的led灯熄灭,数码管显示0。
时间: 2023-05-28 07:01:26 浏览: 59
代码如下:
```c
int ledPins[8] = {2, 3, 4, 5, 6, 7, 8, 9}; //led灯引脚
int numPins[7] = {10, 11, 12, A0, A1, A2, A3}; //数码管引脚
int pattern1[8] = {B11000011, B00100100, B00011000, B00011000, B00011000, B00011000, B00100100, B11000011}; //第一种花样
int pattern2[8] = {B10000000, B01010000, B00101000, B00010100, B00001010, B00000101, B01010000, B10000000}; //第二种花样
int pattern3[8] = {B11111111, B11111111, B01010101, B01010101, B11111111, B11111111, B01010101, B01010101}; //第三种花样
int pattern4[8] = {B10101010, B01010101, B10101010, B01010101, B10101010, B01010101, B10101010, B01010101}; //第四种花样
int ledPattern[4][8] = {pattern1, pattern2, pattern3, pattern4}; //四种花样
int speed = 100; //流水灯速度,单位毫秒
int num = 0; //数码管显示的数字
void setup() {
//设置引脚为输出模式
for (int i = 0; i < 8; i++) {
pinMode(ledPins[i], OUTPUT);
}
for (int i = 0; i < 7; i++) {
pinMode(numPins[i], OUTPUT);
}
//初始化数码管
for (int i = 0; i < 7; i++) {
digitalWrite(numPins[i], LOW);
}
}
void loop() {
int key = getKey(); //获取按键值
switch (key) {
case 1:
showLedPattern(0); //显示第一种花样
num = 1; //数码管显示数字1
break;
case 2:
showLedPattern(1); //显示第二种花样
num = 2; //数码管显示数字2
break;
case 3:
showLedPattern(2); //显示第三种花样
num = 3; //数码管显示数字3
break;
case 4:
showLedPattern(3); //显示第四种花样
num = 4; //数码管显示数字4
break;
case 5:
speedUp(); //速度加快
break;
case 6:
reset(); //系统复位
break;
}
showNum(num); //显示数码管数字
delay(speed); //控制速度
}
//获取按键值
int getKey() {
int key = 0;
//扫描按键
if (digitalRead(13) == LOW) {
key = 1;
} else if (digitalRead(14) == LOW) {
key = 2;
} else if (digitalRead(15) == LOW) {
key = 3;
} else if (digitalRead(16) == LOW) {
key = 4;
} else if (digitalRead(17) == LOW) {
key = 5;
} else if (digitalRead(18) == LOW) {
key = 6;
}
//防抖
delay(50);
while (digitalRead(13) == LOW || digitalRead(14) == LOW || digitalRead(15) == LOW || digitalRead(16) == LOW || digitalRead(17) == LOW || digitalRead(18) == LOW);
return key;
}
//显示led灯花样
void showLedPattern(int index) {
for (int i = 0; i < 8; i++) {
byte b = ledPattern[index][i];
for (int j = 0; j < 8; j++) {
digitalWrite(ledPins[j], (b >> (7 - j)) & B00000001);
}
delay(speed);
}
}
//显示数码管数字
void showNum(int n) {
char numStr[2];
sprintf(numStr, "%d", n);
for (int i = 0; i < 7; i++) {
byte b = numMap[numStr[i] - '0'][i];
for (int j = 0; j < 8; j++) {
digitalWrite(numPins[j], (b >> (7 - j)) & B00000001);
}
}
}
//速度加快
void speedUp() {
speed -= 10;
if (speed < 10) {
speed = 10;
}
}
//系统复位
void reset() {
for (int i = 0; i < 8; i++) {
digitalWrite(ledPins[i], LOW);
}
num = 0;
}
```
注:此代码未定义 `numMap` 数组,可以自行定义或使用已有的数码管映射数组。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)