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.
🧰 Lista de materiales
🎯 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.
🔌 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).
| Segmento | Pin Arduino |
|---|---|
| a | D2 |
| b | D3 |
| c | D4 |
| d | D5 |
| e | D6 |
| f | D7 |
| g | D8 |
| Común | 5 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
- Identifica los pines a–g y los comunes del 5161BS (mira el datasheet/foto).
- Cablea cada segmento a su pin con una resistencia de 220 Ω.
- Conecta los pines común a 5 V.
- Cablea el pulsador entre D9 y GND.
- Sube el sketch y pulsa para contar de 0 a 9.
🧩 Resolución de problemas
| Síntoma | Causa | Solución |
|---|---|---|
| Dígitos invertidos | Display de cátodo común | Invierte LOW/HIGH en mostrar() |
| Un segmento nunca enciende | Resistencia o pin mal | Revisa ese segmento |
| Cuenta de más por pulsación | Rebote | Sube 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().