Componentes · 6 min de lectura

Cómo usar un display de 7 segmentos: mostrar números con Arduino, ánodo o cátodo común

¿Cómo funciona un display de 7 segmentos? Letras de los segmentos (a–g, dp), cátodo común y ánodo común, pines y resistencias, código para contar de 0 a 9, displays de 4 dígitos y multiplexado, módulo TM1637, ESP32 y Pico.

Un display de 7 segmentos es un indicador sencillo formado por siete LED en forma de barra colocados como el número «8», más un pequeño punto. Lo usan los relojes digitales, los temporizadores de microondas, los marcadores y los surtidores de gasolina. Es barato, muy luminoso y se lee bien incluso de lejos. En los proyectos con Arduino es una de las salidas clásicas para hacer contadores, dados, cronómetros y relojes.

Display de 7 segmentos de un dígito
Display de 7 segmentos de un dígito: siete segmentos en barra y un punto (dp); tiene 10 pines, cinco abajo y cinco arriba.

¿Cómo funciona un display de 7 segmentos?

Los segmentos se nombran con letras: empezando por la a de arriba y siguiendo en sentido horario vienen b (arriba a la derecha), c (abajo a la derecha), d (abajo), e (abajo a la izquierda) y f (arriba a la izquierda); la barra central es la g y el punto es dp. Cada segmento es en realidad un LED distinto y, según cuáles se enciendan, se forman los diferentes números. Para el «1», por ejemplo, solo se encienden b y c; para el «8», los siete.

NúmeroSegmentos encendidos
0a, b, c, d, e, f
1b, c
2a, b, d, e, g
3a, b, c, d, g
4b, c, f, g
5a, c, d, f, g
6a, c, d, e, f, g
7a, b, c
8a, b, c, d, e, f, g
9a, b, c, d, f, g

¿Cátodo común o ánodo común?

Igual que en un LED RGB, un extremo de todos los segmentos se une en un pin común. En un display de cátodo común el pin común va a GND y un segmento se enciende al darle HIGH. En uno de ánodo común el pin común va a 5V y el segmento se enciende con LOW. Por fuera son iguales; para saber cuál tienes, conecta el pin común a GND y toca 5V con un pin de segmento a través de una resistencia de 220 Ω. Si el segmento se enciende, es de cátodo común; si no, invierte la conexión y vuelve a probar.

CaracterísticaCátodo común (CC)Ánodo común (CA)
Pin común (3 y 8)GND5V
Para encender un segmentoHIGHLOW
En el códigodigitalWrite(pin, encendido)digitalWrite(pin, !encendido)

Pines y conexión con Arduino

En los displays habituales de un dígito y 10 pines, con la cara frontal hacia ti, los pines se numeran en sentido antihorario empezando por abajo a la izquierda. Los dos pines centrales (3 y 8) son el terminal común y están unidos por dentro. La tabla muestra los pines del display y los pines de Arduino que usa el código de este artículo:

Pin del displaySegmentoPin de Arduino
7aD2
6bD3
4cD4
2dD5
1eD6
9fD7
10gD8
5dpD9
3 y 8ComúnGND (cátodo común) o 5V (ánodo común)
Pon a cada segmento su propia resistencia (220–330 Ω a 5 V). Si pones una sola resistencia en el pin común, la corriente se reparte entre los segmentos encendidos: el «1» se ve muy brillante y el «8» apagado. Para calcular el valor, usa la herramienta Resistencia para LED.

Contar de 0 a 9 con Arduino

Guardar en un array, como bits, qué segmentos enciende cada número acorta mucho el código. En el ejemplo siguiente, el bit de la izquierda de cada byte es el segmento a y el de la derecha el segmento g. La función showDigit() lee esos bits uno a uno y los escribe en los pines; si tu display es de ánodo común, basta con poner COMMON_ANODE a true.

Arduino (C++)
1const int SEG_PINS[7] = {2, 3, 4, 5, 6, 7, 8};   // a, b, c, d, e, f, g
2const bool COMMON_ANODE = false;                 // ortak anotsa true / true for common anode
3
4// her rakam için a–g segmentleri (1 = yanar) / a–g segments per digit (1 = on)
5const byte DIGITS[10] = {
6  0b1111110, // 0
7  0b0110000, // 1
8  0b1101101, // 2
9  0b1111001, // 3
10  0b0110011, // 4
11  0b1011011, // 5
12  0b1011111, // 6
13  0b1110000, // 7
14  0b1111111, // 8
15  0b1111011  // 9
16};
17
18void showDigit(int n) {
19  for (int i = 0; i < 7; i++) {
20    bool on = DIGITS[n] & (1 << (6 - i));       // a en soldaki bit / a is the leftmost bit
21    digitalWrite(SEG_PINS[i], COMMON_ANODE ? !on : on);
22  }
23}
24
25void setup() {
26  for (int i = 0; i < 7; i++) pinMode(SEG_PINS[i], OUTPUT);
27}
28
29void loop() {
30  for (int n = 0; n <= 9; n++) {
31    showDigit(n);
32    delay(1000);
33  }
34}
Si añades un botón a este código puedes hacer un contador que sube uno con cada pulsación o un dado electrónico que muestra un número al azar. La conexión del botón y el rebote se explican en Cómo conectar un pulsador a Arduino.

Display de 4 dígitos y multiplexado

Display de 7 segmentos de 4 dígitos
Display de 7 segmentos de 4 dígitos: las 8 líneas de segmento son comunes a los cuatro dígitos y cada dígito tiene además su propio pin de selección; 12 pines en total.

Un display de cuatro dígitos no tiene 32 pines de segmento, sino solo 12 pines: 8 líneas de segmento (a–g y dp) que comparten todos los dígitos y 4 pines que eligen qué dígito se enciende. Como las líneas de segmento son compartidas, no puedes mostrar números distintos en dígitos distintos al mismo tiempo. La solución es el multiplexado: enciendes solo el 1.er dígito unos milisegundos, luego el 2.º, el 3.º y el 4.º. Cuando este ciclo se repite más de 50 veces por segundo, el ojo ve los cuatro dígitos encendidos a la vez. En lugar de programar este barrido a mano, es mucho más fácil usar la librería SevSeg:

Arduino (C++)
1#include "SevSeg.h"
2
3SevSeg sevseg;
4
5void setup() {
6  byte digitPins[] = {2, 3, 4, 5};                    // hane seçme pinleri / digit select pins
7  byte segmentPins[] = {6, 7, 8, 9, 10, 11, 12, 13};  // a, b, c, d, e, f, g, dp
8  sevseg.begin(COMMON_CATHODE, 4, digitPins, segmentPins, true);  // dirençler segmentlerde / resistors on segments
9  sevseg.setBrightness(90);
10}
11
12void loop() {
13  sevseg.setNumber(millis() / 1000);   // geçen saniye / elapsed seconds
14  sevseg.refreshDisplay();             // sürekli çağrılmalı / must be called continuously
15}
No uses delay() dentro de loop() con un display multiplexado. El barrido se detiene y solo queda encendido el último dígito. Controla el tiempo con millis() y asegúrate de llamar continuamente a refreshDisplay().

El módulo TM1637: 4 dígitos con solo 2 cables

Módulo display de 7 segmentos TM1637 de 4 dígitos
Módulo TM1637: el chip controlador hace el barrido; se conecta con solo 4 pines: CLK, DIO, VCC y GND.

Si 12 cables y un barrido continuo te parecen demasiado trabajo, el módulo TM1637 es para ti. Su chip controlador hace el multiplexado por sí mismo; Arduino solo le indica qué número mostrar a través de los pines CLK y DIO. La mayoría de las versiones tienen además dos puntos (:) en el centro para hacer relojes. Instala desde el Gestor de librerías la librería TM1637 de Avishay Orpaz; el código siguiente muestra minutos y segundos con los dos puntos:

Arduino (C++)
1#include <TM1637Display.h>
2
3TM1637Display display(2, 3);   // CLK, DIO
4
5void setup() {
6  display.setBrightness(5);    // 0–7
7}
8
9void loop() {
10  int minutes = (millis() / 60000) % 60;
11  int seconds = (millis() / 1000) % 60;
12  // ortadaki iki noktayla dakika:saniye / minutes:seconds with the colon
13  display.showNumberDecEx(minutes * 100 + seconds, 0b01000000, true);
14  delay(200);
15}

Display de 7 segmentos con el ESP32 y la Raspberry Pi Pico

Puedes conectar un display de un dígito directamente a un ESP32 o a una Pico; como los pines dan 3,3 V, los segmentos brillan algo menos, así que usa resistencias más pequeñas, de 100–150 Ω. El módulo TM1637 también funciona a 3,3 V y en el ESP32 se usa con la misma librería de Arduino. Para MicroPython en la Pico, basta con copiar el archivo tm1637.py (la librería de mcauser) en la Pico:

MicroPython
1import tm1637
2from machine import Pin
3import time
4
5tm = tm1637.TM1637(clk=Pin(16), dio=Pin(17))   # tm1637.py Pico'da olmalı / tm1637.py must be on the Pico
6tm.brightness(4)                               # 0–7
7
8count = 0
9while True:
10    tm.number(count)        # -999 … 9999
11    count += 1
12    time.sleep(1)

¿7 segmentos, LCD u OLED?

Característica7 segmentosLCD 16x2OLED
Qué puede mostrarNúmeros y algunas letrasLetras, números, caracteres propiosTexto, gráficos, iconos
LegibilidadMuy brillante, se lee de lejosBuena con retroiluminaciónMucho contraste pero pequeño
Pines necesarios8 o más (2 con un TM1637)2 (I2C)2 (I2C)
Ideal paraRelojes, contadores, marcadoresMenús, texto de medidasGráficos, iconos, aparatos pequeños

Si solo vas a mostrar números y es importante que se lean de lejos, el display de 7 segmentos no tiene rival. Si necesitas texto, unidades y menús, echa un vistazo a Cómo usar una pantalla LCD I2C.

Ideas de proyectos con display de 7 segmentos

  • Dado electrónico: muestra un número al azar del 1 al 6 al pulsar un botón.
  • Contador con botones: un contador que sube con un botón y se pone a cero con otro.
  • Reloj digital: un reloj con TM1637 y un módulo RTC que no pierde la hora aunque se vaya la luz.
  • Cuenta atrás: un temporizador ajustable para juegos de mesa o experimentos.
  • Indicador de temperatura: muestra en números grandes la temperatura medida con un DHT11.
  • Test de reacción: muestra en milisegundos lo rápido que pulsas el botón después de que se encienda un LED.

Errores comunes y cómo solucionarlos

  • No se enciende ningún segmento: el pin común está en el sitio equivocado; puede que hayas conectado a GND un display de ánodo común.
  • Los números salen mal: la correspondencia entre segmentos y pines de Arduino es incorrecta; compruébala encendiendo cada segmento por separado.
  • Algunos números se ven apagados: hay una sola resistencia en el pin común; usa una para cada segmento.
  • En el de 4 dígitos solo se enciende uno o todo parpadea: hay un delay() en loop() o el barrido no se hace con suficiente frecuencia.
  • Los segmentos que deberían encenderse están apagados y el resto encendidos: se han confundido ánodo y cátodo común; cambia COMMON_ANODE.
  • No llegan los pines: reduce los pines necesarios con un módulo TM1637, un controlador MAX7219 o un registro de desplazamiento 74HC595.

Saber que cada segmento es en realidad un LED es la clave para entender los displays de 7 segmentos; para lo básico, echa un vistazo a ¿Qué es un LED? En la app BlueGrays encontrarás proyectos de contar de 0 a 9, contador con botón, dado, reloj digital de 4 dígitos y animación de bomba, paso a paso con esquemas y código.

Preguntas frecuentes

¿Qué resistencia lleva un display de 7 segmentos?

A 5 V van bien 220–330 Ω por segmento; 220 Ω da más brillo y 330 Ω consume menos. En placas de 3,3 V como el ESP32 y la Pico puedes usar 100–150 Ω. Pon las resistencias en cada línea de segmento por separado, no en el pin común.

¿Cómo sé si mi display de 7 segmentos es de ánodo común o de cátodo común?

Conecta el pin común (3 u 8) a GND y toca 5V con un pin de segmento a través de 220 Ω; si el segmento se enciende, es de cátodo común. Si no, conecta el pin común a 5V y el pin de segmento a GND con la resistencia; si ahora se enciende, es de ánodo común. La referencia del componente suele indicar también CC o CA.

¿Cuántos pines tiene un display de 7 segmentos?

Los de un dígito tienen 10 pines: 7 segmentos, 1 punto y 2 pines comunes. Los de cuatro dígitos tienen 12: 8 líneas de segmento compartidas y 4 pines de selección de dígito. Módulos como el TM1637 se conectan con solo 4 pines (CLK, DIO, VCC, GND).

¿Por qué en mi display de 4 dígitos solo se enciende uno?

Los displays de cuatro dígitos funcionan por multiplexado, así que los dígitos deben barrerse uno tras otro todo el tiempo. Si usas delay() en loop(), el barrido se detiene y solo queda encendido el último dígito. Usa una librería como SevSeg, llama sin parar a refreshDisplay() y controla el tiempo con millis().

¿Se pueden mostrar letras en un display de 7 segmentos?

Algunas sí: A, b, C, d, E, F, H, L, P, U y o se reconocen bien. Letras como K, M, W y X no se pueden dibujar correctamente con siete segmentos. Si necesitas mostrar texto, es mejor una pantalla LCD u OLED.

¿Cómo uso un display de 7 segmentos con menos pines?

Lo más fácil es un módulo con chip controlador: el TM1637 maneja cuatro dígitos con 2 cables y el MAX7219 ocho dígitos con 3. Si quieres montar tu propio circuito, un registro de desplazamiento 74HC595 controla 8 segmentos con solo 3 pines de Arduino.

Ver todos los proyectos
Impresión de números del 0 al 9 con pantalla de 7 segmentos
#41Intermedio
Premium

Impresión de números del 0 al 9 con pantalla de 7 segmentos

Proyecto que muestra números del 0 al 9 en secuencia en display de 7 segmentos. Enseña la lógica de la creación de números mediante el control de los pines de segmento.

4.5(30)
42
Impresión de números 0-99 con pantalla de 7 segmentos
#42Avanzado
Premium

Impresión de números 0-99 con pantalla de 7 segmentos

Proyecto que muestra números del 0 al 99 con display de 7 segmentos de dos dígitos. Enseña operaciones con bits (bitRead) y lógica de descomposición de dígitos de una decena.

4.5(27)
35
Pantalla de 7 segmentos y contador con botón
#43Avanzado
Premium

Pantalla de 7 segmentos y contador con botón

Proyecto de contador que aumenta, disminuye y reinicia el número en la pantalla de 7 segmentos con 3 botones. Enseña control de límites y lógica de contador interactiva con el usuario.

4.6(35)
46
Proyecto Dados
#79Intermedio
Premium

Proyecto Dados

Proyecto de dados que genera un número aleatorio entre 1 y 6 a cada pulsación del botón y lo muestra en una pantalla de 7 segmentos. Gracias al mecanismo de rebote, se produce un único resultado en un

5.0(48)
67
0-9999 Impresión de números en pantalla de 4 7 segmentos
#47Intermedio
Premium

0-9999 Impresión de números en pantalla de 4 7 segmentos

Proyecto que muestra los números del 0 al 9999 en display de 4 7 segmentos con librería SevSeg. Enseña la lógica de visualización de varios dígitos con multiplexación (escaneo) método.

4.4(19)
25
Reloj digital con pantalla de 4 7 segmentos
#48Intermedio
Premium

Reloj digital con pantalla de 4 7 segmentos

Proyecto de reloj digital que muestra horas y minutos con módulo RTC DS1302 y pantalla de 4 segmentos y 7 segmentos. Combina datos de reloj en tiempo real y visualización por segmentos.

4.8(56)
73
Animación de bomba con pantalla de 4 7 segmentos
#49Principiante
Premium

Animación de bomba con pantalla de 4 7 segmentos

Proyecto de animación de bomba que realiza una cuenta atrás en una pantalla de 4 7 segmentos, se puede acelerar con potenciómetro y cancelar con botones. Enseña el uso de temporizador, control de entr

4.8(62)
78
ESP32 TM1637 Pantalla de 4 dígitos y 7 segmentos
#125Intermedio
Premium

ESP32 TM1637 Pantalla de 4 dígitos y 7 segmentos

Controlamos el módulo de pantalla de 7 segmentos y 4 dígitos con controlador TM1637 mediante un ESP32. Utilizando solo 2 GPIO (CLK y DIO), hacemos funcionar un contador de 0 a 9999, ajustamos el nivel de brillo y mostramos el carácter de dos puntos (`:`) en el centro en formato de reloj. Gracias a la biblioteca TM1637Display, el control de números, hexadecimales, segmentos y cadenas es muy sencillo.

4.7(20)
32

Aprende los segmentos y los pines de un display de 7 segmentos, a distinguir ánodo y cátodo común, contar de 0 a 9 con Arduino, multiplexar un display de 4 dígitos y hacer un reloj con dos cables con el módulo TM1637.

Cómo usar un display de 7 segmentos: mostrar números con Arduino, ánodo o cátodo común | BlueGrays