Ir al contenido
← Volver a Formación Arduino Principiante

08. Contador de un dígito con display 7 segmentos

Un display numérico que cuenta de 0 a 9 con cada pulsación. Aprende cómo se forman los dígitos con segmentos y cómo manejar un display de ánodo común.

Dificultad: Principiante · Tiempo: 50 min · Cerebro: Arduino Uno

🧰 Lista de materiales

Arduino Uno R3 (ATmega328P)
Arduino Uno R3 (ATmega328P)
Controla los segmentos
Display 7 segmentos 1 dígito 5161BS
Display 7 segmentos 1 dígito 5161BS
Muestra el dígito (5161BS, ánodo común)
sin foto
Pulsador táctil 12×12 mm
Incrementa el contador
sin foto
Resistencias película metálica 1/4 W
220 Ω ×7 (uno por segmento)
Breadboard 830 puntos
Breadboard 830 puntos
Montaje

🎯 Qué vas a aprender

Cómo se forma cualquier dígito encendiendo combinaciones de 7 barras (segmentos a–g). Entenderás la diferencia entre ánodo común y cátodo común, y usarás una tabla de patrones para mapear número → segmentos.

📚 Teoría: ánodo común y patrones

Un display de 7 segmentos son 8 LEDs (7 barras + punto) en un mismo encapsulado. En el 5161BS de ánodo común, todos los ánodos están unidos a +5 V; cada segmento se enciende poniendo su pin a LOW (lógica invertida). En cátodo común sería al revés.

Para mostrar un número, encendemos los segmentos correctos. Por ejemplo, el «7» son los segmentos a, b y c. Guardamos esos patrones en una tabla.

⚠ AtenciónConfirma si tu unidad es ánodo o cátodo común antes de cablear. Si los dígitos salen «en negativo» (encendido lo que debería estar apagado), tienes el tipo contrario: invierte HIGH/LOW en el código.

🔌 Conexiones

Cada segmento (a–g) va a un pin de Arduino con su resistencia de 220 Ω. Los pines común van a 5 V (ánodo común).

SegmentoPin Arduino
aD2
bD3
cD4
dD5
eD6
fD7
gD8
Común5 V (×2 pines)

💻 Código completo

// Contador 0-9 en display 7 segmentos (ánodo común)
const int seg[] = {2, 3, 4, 5, 6, 7, 8}; // a,b,c,d,e,f,g
const int PIN_BOTON = 9;

// patrones: 1 = segmento encendido (lo invertimos para ánodo común)
const byte digitos[10][7] = {
  {1,1,1,1,1,1,0}, // 0
  {0,1,1,0,0,0,0}, // 1
  {1,1,0,1,1,0,1}, // 2
  {1,1,1,1,0,0,1}, // 3
  {0,1,1,0,0,1,1}, // 4
  {1,0,1,1,0,1,1}, // 5
  {1,0,1,1,1,1,1}, // 6
  {1,1,1,0,0,0,0}, // 7
  {1,1,1,1,1,1,1}, // 8
  {1,1,1,1,0,1,1}, // 9
};

int contador = 0;

void mostrar(int n) {
  for (int i = 0; i < 7; i++) {
    // ánodo común: segmento ON => LOW
    digitalWrite(seg[i], digitos[n][i] ? LOW : HIGH);
  }
}

void setup() {
  for (int i = 0; i < 7; i++) pinMode(seg[i], OUTPUT);
  pinMode(PIN_BOTON, INPUT_PULLUP);
  mostrar(contador);
}

void loop() {
  static bool anterior = HIGH;
  bool actual = digitalRead(PIN_BOTON);
  if (anterior == HIGH && actual == LOW) {  // flanco de pulsación
    contador = (contador + 1) % 10;
    mostrar(contador);
    delay(50);  // antirrebote simple
  }
  anterior = actual;
}

🛠️ Montaje paso a paso

  1. Identifica los pines a–g y los comunes del 5161BS (mira el datasheet/foto).
  2. Cablea cada segmento a su pin con una resistencia de 220 Ω.
  3. Conecta los pines común a 5 V.
  4. Cablea el pulsador entre D9 y GND.
  5. Sube el sketch y pulsa para contar de 0 a 9.

🧩 Resolución de problemas

SíntomaCausaSolución
Dígitos invertidosDisplay de cátodo comúnInvierte LOW/HIGH en mostrar()
Un segmento nunca enciendeResistencia o pin malRevisa ese segmento
Cuenta de más por pulsaciónReboteSube el delay antirrebote

🚀 Para ir más lejos

  • Pasa al display de 4 dígitos con MAX7219 (proyecto 14) para ahorrar pines.
  • Haz una cuenta atrás automática con millis().
← Volver a Formación Arduino