制作简易秒表,用四位数码管显示计时时间,利用四位共阳级的数码管显示时间(从右到左依次显示秒,十秒,分,十分,当秒数到达60s时向分钟进一,当分钟达到60min时全部清零从头开始)。 使用独立按键:K4作为功能键,当第一次按下计时功能键时,秒表开始计时,并显示; 第二次按下计时功能键时,停止计时,将计时的时间值送到数码管显示;如果计到59分59秒,将重新开始从0计时; 第三次按下计时功能键,数码管全部清零。 再次按一下计时功能键,则重复上述计时过程。
时间: 2023-08-01 17:12:29 浏览: 200
以下是使用Arduino制作简易秒表的代码:
```
// 定义引脚
const int digit1 = 2;
const int digit2 = 3;
const int digit3 = 4;
const int digit4 = 5;
const int segA = 6;
const int segB = 7;
const int segC = 8;
const int segD = 9;
const int segE = 10;
const int segF = 11;
const int segG = 12;
const int segDP = 13;
const int startStopButton = A0;
// 定义变量
int currentDigit = 1;
int seconds = 0;
int minutes = 0;
bool isRunning = false;
unsigned long previousMillis = 0;
void setup() {
// 设置引脚模式
pinMode(digit1, OUTPUT);
pinMode(digit2, OUTPUT);
pinMode(digit3, OUTPUT);
pinMode(digit4, OUTPUT);
pinMode(segA, OUTPUT);
pinMode(segB, OUTPUT);
pinMode(segC, OUTPUT);
pinMode(segD, OUTPUT);
pinMode(segE, OUTPUT);
pinMode(segF, OUTPUT);
pinMode(segG, OUTPUT);
pinMode(segDP, OUTPUT);
pinMode(startStopButton, INPUT_PULLUP);
}
void loop() {
// 按下功能键
if (digitalRead(startStopButton) == LOW) {
delay(50); // 延迟去除抖动
if (digitalRead(startStopButton) == LOW) {
if (!isRunning) { // 开始计时
isRunning = true;
previousMillis = millis();
} else { // 停止计时并显示时间
isRunning = false;
displayTime();
}
while (digitalRead(startStopButton) == LOW) {} // 等待释放按键
}
}
// 计时
if (isRunning) {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= 1000) {
previousMillis = currentMillis;
seconds++;
if (seconds == 60) {
seconds = 0;
minutes++;
if (minutes == 60) {
minutes = 0;
}
}
}
displayTime(); // 显示时间
}
}
void displayTime() {
// 数码管显示数字
digitalWrite(digit1, HIGH);
digitalWrite(digit2, LOW);
digitalWrite(digit3, LOW);
digitalWrite(digit4, LOW);
displayDigit(seconds % 10); // 右数第一位,秒个位
delay(5);
digitalWrite(digit1, LOW);
digitalWrite(digit2, HIGH);
digitalWrite(digit3, LOW);
digitalWrite(digit4, LOW);
displayDigit(seconds / 10); // 右数第二位,秒十位
delay(5);
digitalWrite(digit1, LOW);
digitalWrite(digit2, LOW);
digitalWrite(digit3, HIGH);
digitalWrite(digit4, LOW);
displayDigit(minutes % 10); // 右数第三位,分个位
delay(5);
digitalWrite(digit1, LOW);
digitalWrite(digit2, LOW);
digitalWrite(digit3, LOW);
digitalWrite(digit4, HIGH);
displayDigit(minutes / 10); // 右数第四位,分十位
delay(5);
}
void displayDigit(int digit) {
// 数码管显示数字
switch (digit) {
case 0:
digitalWrite(segA, HIGH);
digitalWrite(segB, HIGH);
digitalWrite(segC, HIGH);
digitalWrite(segD, HIGH);
digitalWrite(segE, HIGH);
digitalWrite(segF, HIGH);
digitalWrite(segG, LOW);
digitalWrite(segDP, LOW);
break;
case 1:
digitalWrite(segA, LOW);
digitalWrite(segB, HIGH);
digitalWrite(segC, HIGH);
digitalWrite(segD, LOW);
digitalWrite(segE, LOW);
digitalWrite(segF, LOW);
digitalWrite(segG, LOW);
digitalWrite(segDP, LOW);
break;
case 2:
digitalWrite(segA, HIGH);
digitalWrite(segB, HIGH);
digitalWrite(segC, LOW);
digitalWrite(segD, HIGH);
digitalWrite(segE, HIGH);
digitalWrite(segF, LOW);
digitalWrite(segG, HIGH);
digitalWrite(segDP, LOW);
break;
case 3:
digitalWrite(segA, HIGH);
digitalWrite(segB, HIGH);
digitalWrite(segC, HIGH);
digitalWrite(segD, HIGH);
digitalWrite(segE, LOW);
digitalWrite(segF, LOW);
digitalWrite(segG, HIGH);
digitalWrite(segDP, LOW);
break;
case 4:
digitalWrite(segA, LOW);
digitalWrite(segB, HIGH);
digitalWrite(segC, HIGH);
digitalWrite(segD, LOW);
digitalWrite(segE, LOW);
digitalWrite(segF, HIGH);
digitalWrite(segG, HIGH);
digitalWrite(segDP, LOW);
break;
case 5:
digitalWrite(segA, HIGH);
digitalWrite(segB, LOW);
digitalWrite(segC, HIGH);
digitalWrite(segD, HIGH);
digitalWrite(segE, LOW);
digitalWrite(segF, HIGH);
digitalWrite(segG, HIGH);
digitalWrite(segDP, LOW);
break;
case 6:
digitalWrite(segA, HIGH);
digitalWrite(segB, LOW);
digitalWrite(segC, HIGH);
digitalWrite(segD, HIGH);
digitalWrite(segE, HIGH);
digitalWrite(segF, HIGH);
digitalWrite(segG, HIGH);
digitalWrite(segDP, LOW);
break;
case 7:
digitalWrite(segA, HIGH);
digitalWrite(segB, HIGH);
digitalWrite(segC, HIGH);
digitalWrite(segD, LOW);
digitalWrite(segE, LOW);
digitalWrite(segF, LOW);
digitalWrite(segG, LOW);
digitalWrite(segDP, LOW);
break;
case 8:
digitalWrite(segA, HIGH);
digitalWrite(segB, HIGH);
digitalWrite(segC, HIGH);
digitalWrite(segD, HIGH);
digitalWrite(segE, HIGH);
digitalWrite(segF, HIGH);
digitalWrite(segG, HIGH);
digitalWrite(segDP, LOW);
break;
case 9:
digitalWrite(segA, HIGH);
digitalWrite(segB, HIGH);
digitalWrite(segC, HIGH);
digitalWrite(segD, HIGH);
digitalWrite(segE, LOW);
digitalWrite(segF, HIGH);
digitalWrite(segG, HIGH);
digitalWrite(segDP, LOW);
break;
default:
digitalWrite(segA, LOW);
digitalWrite(segB, LOW);
digitalWrite(segC, LOW);
digitalWrite(segD, LOW);
digitalWrite(segE, LOW);
digitalWrite(segF, LOW);
digitalWrite(segG, LOW);
digitalWrite(segDP, LOW);
break;
}
}
```
在这个代码中,我们使用了一个独立按键(K4)作为功能键,来控制计时的开始、停止和清零操作。我们还使用了四个共阳极的数码管来显示时间,数字从右到左依次显示秒个位、秒十位、分个位、分十位。在计时过程中,我们使用了 millis() 函数来计算时间并更新秒数和分钟数。当秒数到达60时,我们将秒数清零并将分钟数加1;当分钟数到达60时,我们将分钟数清零。在数码管显示时间时,我们使用了一个函数 displayTime() 来依次显示每一位数字,并使用另一个函数 displayDigit() 来控制数码管显示每一个数字。
阅读全文