制作一个四人抢答器,无人抢答时,四个灯跑马循环,谁先按下,相对应的灯亮起,LED数码管显示抢答人编号,同时蜂鸣器发声
时间: 2025-02-04 15:25:13 浏览: 30
制作一个四人抢答器可以按照以下步骤进行:
### 硬件部分
1. **单片机**:选择一款常用的单片机,如Arduino或STM32。
2. **LED灯**:4个LED灯,分别代表四个参赛者。
3. **LED数码管**:用于显示抢答者的编号。
4. **蜂鸣器**:用于发出声音提示。
5. **按钮**:4个按钮,分别对应四个参赛者。
6. **电阻**:用于限流,保护LED和按钮。
7. **面包板和连接线**:用于搭建电路。
### 软件部分
1. **初始化**:设置各个引脚的输入输出模式。
2. **跑马灯循环**:无人抢答时,四个LED灯循环点亮。
3. **抢答检测**:检测哪个按钮先被按下。
4. **显示和发声**:点亮对应的LED灯,显示抢答者编号,并发出蜂鸣器声音。
### 代码示例(基于Arduino)
```cpp
#include <SevSeg.h>
SevSeg sevseg;
const int buttonPins[4] = {2, 3, 4, 5}; // 按钮引脚
const int ledPins[4] = {6, 7, 8, 9}; // LED灯引脚
const int buzzerPin = 10; // 蜂鸣器引脚
int currentLed = 0;
bool isAnswered = false;
int winner = -1;
void setup() {
// 初始化按钮引脚
for (int i = 0; i < 4; i++) {
pinMode(buttonPins[i], INPUT_PULLUP);
}
// 初始化LED引脚
for (int i = 0; i < 4; i++) {
pinMode(ledPins[i], OUTPUT);
digitalWrite(ledPins[i], LOW);
}
pinMode(buzzerPin, OUTPUT);
// 初始化数码管
byte numDigits = 1;
byte digitPins[] = {};
byte segmentPins[] = {A0, A1, A2, A3, A4, A5, 11, 12};
bool resistorsOnSegments = false;
bool updateWithDelays = false;
bool leadingZeros = true;
bool disableDecPoint = true;
sevseg.begin(COMMON_ANODE, numDigits, digitPins, segmentPins, resistorsOnSegments, updateWithDelays, leadingZeros, disableDecPoint);
sevseg.setBrightness(90);
}
void loop() {
if (!isAnswered) {
// 跑马灯循环
digitalWrite(ledPins[currentLed], HIGH);
delay(200);
digitalWrite(ledPins[currentLed], LOW);
currentLed = (currentLed + 1) % 4;
// 检测按钮
for (int i = 0; i < 4; i++) {
if (digitalRead(buttonPins[i]) == LOW) {
isAnswered = true;
winner = i;
break;
}
}
} else {
// 显示抢答者编号
sevseg.setNumber(winner + 1);
sevseg.refreshDisplay();
// 点亮对应的LED灯
digitalWrite(ledPins[winner], HIGH);
// 发出蜂鸣器声音
digitalWrite(buzzerPin, HIGH);
delay(1000);
digitalWrite(buzzerPin, LOW);
// 重置状态
isAnswered = false;
winner = -1;
}
sevseg.refreshDisplay();
}
```
### 解释
1. **初始化**:设置按钮、LED和蜂鸣器的引脚模式。
2. **跑马灯循环**:无人抢答时,四个LED灯循环点亮。
3. **抢答检测**:检测哪个按钮先被按下,并记录抢答者编号。
4. **显示和发声**:点亮对应的LED灯,显示抢答者编号,并发出蜂鸣器声音。
阅读全文
相关推荐














