Секундомер на четырёх разрядах
Счёт идёт по millis(), а индикация — непрерывно: delay() остановил бы и её, и гореть остался бы один разряд. Десятые прибавляются с переносом, как на счётах.

Что понадобится
- Arduino Uno
- Резистор (220 Ом) × 8
- Четырёхразрядный индикатор (общий катод)
Как подключить
| Откуда | Куда | |||
|---|---|---|---|---|
| Arduino Uno | D2 | → | Резистор 1 | 1 |
| Резистор 1 | 2 | → | Четырёхразрядный индикатор | A |
| Arduino Uno | D3 | → | Резистор 2 | 1 |
| Резистор 2 | 2 | → | Четырёхразрядный индикатор | B |
| Arduino Uno | D4 | → | Резистор 3 | 1 |
| Резистор 3 | 2 | → | Четырёхразрядный индикатор | C |
| Arduino Uno | D5 | → | Резистор 4 | 1 |
| Резистор 4 | 2 | → | Четырёхразрядный индикатор | D |
| Arduino Uno | D6 | → | Резистор 5 | 1 |
| Резистор 5 | 2 | → | Четырёхразрядный индикатор | E |
| Arduino Uno | D7 | → | Резистор 6 | 1 |
| Резистор 6 | 2 | → | Четырёхразрядный индикатор | F |
| Arduino Uno | D8 | → | Резистор 7 | 1 |
| Резистор 7 | 2 | → | Четырёхразрядный индикатор | G |
| Arduino Uno | D13 | → | Резистор 8 | 1 |
| Резистор 8 | 2 | → | Четырёхразрядный индикатор | DP |
| Arduino Uno | D9 | → | Четырёхразрядный индикатор | DIG1 |
| Arduino Uno | D10 | → | Четырёхразрядный индикатор | DIG2 |
| Arduino Uno | D11 | → | Четырёхразрядный индикатор | DIG3 |
| Arduino Uno | D12 | → | Четырёхразрядный индикатор | DIG4 |
Скетч
// Секундомер: секунды и десятые, точка отделяет десятые.
// Сегменты A…G — D2…D8, точка — D13, разряды DIG1…DIG4 — D9…D12.
const int SEG[7] = { 2, 3, 4, 5, 6, 7, 8 };
const int DP = 13;
const int DIG[4] = { 9, 10, 11, 12 };
const byte DIGITS[10] = {
0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F
};
int shown[4] = { 0, 0, 0, 0 }; // цифры на индикаторе, слева направо
int current = 0; // какой разряд горит сейчас
unsigned long lastTick = 0;
unsigned long lastSwitch = 0;
// Прибавить десятую долю: как на счётах — 9 в разряде превращается в 0
// и переносит единицу в разряд левее.
void addTenth() {
for (int d = 3; d >= 0; d--) {
shown[d]++;
if (shown[d] < 10) return;
shown[d] = 0;
}
}
void setup() {
for (int s = 0; s < 7; s++) pinMode(SEG[s], OUTPUT);
pinMode(DP, OUTPUT);
for (int d = 0; d < 4; d++) {
pinMode(DIG[d], OUTPUT);
digitalWrite(DIG[d], HIGH);
}
}
void loop() {
// 1. Счёт: раз в 100 мс. Не delay() — он остановил бы и индикацию.
if (millis() - lastTick >= 100) {
lastTick += 100;
addTenth();
}
// 2. Индикация: раз в 4 мс переходим к следующему разряду.
if (millis() - lastSwitch >= 4) {
lastSwitch = millis();
digitalWrite(DIG[current], HIGH);
current = (current + 1) % 4;
for (int s = 0; s < 7; s++) {
digitalWrite(SEG[s], (DIGITS[shown[current]] >> s) & 1);
}
digitalWrite(DP, current == 2 ? HIGH : LOW);
digitalWrite(DIG[current], LOW);
}
}
Коротко о детали: Четырёхразрядный индикатор
Четыре цифры с общими выводами сегментов A–G и DP: сегмент A у всех разрядов один и тот же провод. Какая цифра горит, решает общий вывод разряда DIG1–DIG4, поэтому число выводят динамической индикацией — по очереди зажигают разряды несколько миллисекунд каждый, и глаз видит все четыре сразу. Общий катод или анод задаётся двойным кликом.
Ещё примеры с деталью «Четырёхразрядный индикатор»
Попробуйте сами
Симулятор работает прямо в браузере: схему можно менять, код — править, а результат видно сразу. Бесплатно, без установки и регистрации.
Открыть «Секундомер на четырёх разрядах» в симуляторе