Como usar um display de 7 segmentos: mostrando números com Arduino, ânodo comum vs cátodo comum
Como funciona um display de 7 segmentos? Letras dos segmentos (a–g, dp), cátodo comum vs ânodo comum, pinagem e resistores, código para contar de 0 a 9, displays de 4 dígitos e multiplexação, o módulo TM1637, ESP32 e Pico.
Um display de 7 segmentos é um indicador simples formado por sete LEDs em forma de barra, dispostos como o número "8", mais um pequeno ponto. Relógios digitais, timers de micro-ondas, placares e bombas de combustível usam esse display. Ele é barato, muito brilhante e fácil de ler mesmo de longe. Em projetos com Arduino, é uma das saídas clássicas para montar contadores, dados, cronômetros e relógios.

Como funciona um display de 7 segmentos?
Os segmentos são identificados por letras: começando pelo a, em cima, e seguindo no sentido horário vêm o b (em cima à direita), o c (embaixo à direita), o d (embaixo), o e (embaixo à esquerda) e o f (em cima à esquerda); a barra do meio é o g e o ponto é o dp. Cada segmento é, na verdade, um LED separado, e dígitos diferentes se formam conforme os segmentos que estão acesos. Para o "1", por exemplo, só o b e o c acendem, enquanto o "8" acende os sete.
| Dígito | Segmentos acesos |
|---|---|
| 0 | a, b, c, d, e, f |
| 1 | b, c |
| 2 | a, b, d, e, g |
| 3 | a, b, c, d, g |
| 4 | b, c, f, g |
| 5 | a, c, d, f, g |
| 6 | a, c, d, e, f, g |
| 7 | a, b, c |
| 8 | a, b, c, d, e, f, g |
| 9 | a, b, c, d, f, g |
Cátodo comum ou ânodo comum?
Assim como em um LED RGB, uma das pontas de todos os segmentos é unida em um pino comum. Em um display de cátodo comum, o pino comum vai no GND e um segmento acende quando você dá HIGH para ele. Em um display de ânodo comum, o pino comum vai no 5V e um segmento acende quando você dá LOW. Por fora eles parecem iguais; para descobrir qual é o seu, ligue o pino comum no GND e encoste um pino de segmento no 5V através de um resistor de 220 Ω. Se o segmento acender, é de cátodo comum; se não, inverta a ligação e tente de novo.
| Característica | Cátodo comum (CC) | Ânodo comum (CA) |
|---|---|---|
| Pino comum (3 e 8) | GND | 5V |
| Para acender um segmento | HIGH | LOW |
| No código | digitalWrite(pino, aceso) | digitalWrite(pino, !aceso) |
Pinagem e ligação no Arduino
Nos displays comuns de um dígito com 10 pinos, os pinos são numerados no sentido anti-horário a partir do canto inferior esquerdo, com a frente do display virada para você. Os dois pinos do meio (3 e 8) são o terminal comum e estão ligados entre si por dentro. A tabela abaixo mostra os pinos do display e os pinos do Arduino usados pelo código deste post:
| Pino do display | Segmento | Pino do Arduino |
|---|---|---|
| 7 | a | D2 |
| 6 | b | D3 |
| 4 | c | D4 |
| 2 | d | D5 |
| 1 | e | D6 |
| 9 | f | D7 |
| 10 | g | D8 |
| 5 | dp | D9 |
| 3 e 8 | Comum | GND (cátodo comum) ou 5V (ânodo comum) |
Contando de 0 a 9 com o Arduino
Guardar em um array, como bits, quais segmentos cada dígito acende deixa o código curto. No exemplo abaixo, o bit mais à esquerda de cada byte é o segmento a e o bit mais à direita é o segmento g. A função showDigit() lê esses bits um por um e os escreve nos pinos; se você estiver usando um display de ânodo comum, basta definir COMMON_ANODE como true.
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}Displays de 4 dígitos e multiplexação

Um display de quatro dígitos não tem 32 pinos de segmento separados; ele tem só 12 pinos: 8 linhas de segmento (a–g e dp) compartilhadas por todos os dígitos e 4 pinos que escolhem qual dígito acende. Como as linhas de segmento são compartilhadas, você não consegue mostrar números diferentes em dígitos diferentes no mesmo instante. A solução é a multiplexação: você acende só o 1º dígito por alguns milissegundos, depois o 2º, o 3º e o 4º. Quando esse ciclo se repete mais de 50 vezes por segundo, o olho vê os quatro dígitos acesos ao mesmo tempo. Em vez de escrever essa varredura à mão, é muito mais fácil usar a biblioteca SevSeg:
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}O módulo TM1637: 4 dígitos com apenas 2 fios

Se 12 fios e uma varredura constante parecem trabalho demais, o módulo TM1637 é para você. O chip controlador dele faz a multiplexação sozinho; o Arduino só diz qual número mostrar pelos pinos CLK e DIO. A maioria das versões também tem dois-pontos (:) no meio, para montar relógios. Instale a biblioteca TM1637 de Avishay Orpaz pelo Gerenciador de Bibliotecas; o código abaixo mostra minutos e segundos com os dois-pontos:
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}Displays de 7 segmentos com o ESP32 e o Raspberry Pi Pico
Você pode ligar um display de um dígito direto em um ESP32 ou Pico; como os pinos têm saída de 3,3 V, os segmentos ficam um pouco mais fracos, então use resistores menores, como 100–150 Ω. O módulo TM1637 também funciona com 3,3 V e é usado no ESP32 com a mesma biblioteca do Arduino. No Pico com MicroPython, basta copiar para o Pico o arquivo tm1637.py (a biblioteca de mcauser):
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 ou OLED?
| Característica | 7 segmentos | LCD 16x2 | OLED |
|---|---|---|---|
| O que consegue mostrar | Dígitos e algumas letras | Letras, dígitos, caracteres personalizados | Texto, gráficos, ícones |
| Legibilidade | Muito brilhante, legível de longe | Boa com a luz de fundo | Alto contraste, mas pequeno |
| Pinos necessários | 8 ou mais (2 com um TM1637) | 2 (I2C) | 2 (I2C) |
| Ideal para | Relógios, contadores, placares | Menus, textos de medição | Gráficos, ícones, pequenos gadgets |
Se você só precisa mostrar números e a leitura a distância importa, o display de 7 segmentos é imbatível. Se precisa de texto, unidades e menus, dê uma olhada em Como usar um display LCD I2C.
Ideias de projetos com display de 7 segmentos
- Dado eletrônico: mostre um número aleatório de 1 a 6 quando um botão for apertado.
- Contador com botão: faça um contador que sobe com um botão e zera com outro.
- Relógio digital: um relógio com um TM1637 e um módulo RTC, que mantém a hora mesmo quando falta energia.
- Contagem regressiva: um timer ajustável para jogos de tabuleiro ou experimentos.
- Indicador de temperatura: mostre em dígitos grandes a temperatura medida com um DHT11.
- Teste de reação: mostre em milissegundos a rapidez com que você aperta o botão depois que um LED acende.
Erros comuns e como resolvê-los
- Nenhum segmento acende: o pino comum está no lugar errado; você pode ter ligado um display de ânodo comum no GND.
- Os dígitos aparecem embaralhados: a correspondência entre os segmentos e os pinos do Arduino está errada; confira acendendo um segmento de cada vez.
- Alguns dígitos ficam fracos: há um único resistor no pino comum; use um resistor separado para cada segmento.
- Só um dígito acende ou fica piscando em um display de 4 dígitos: há um delay() no loop(), ou a varredura não acontece com a frequência necessária.
- Os segmentos que deviam acender ficam apagados e os outros acendem: ânodo comum e cátodo comum estão trocados; mude o COMMON_ANODE.
- Faltam pinos: reduza o número de pinos com um módulo TM1637, um driver MAX7219 ou um registrador de deslocamento 74HC595.
Saber que cada segmento é, na verdade, um LED é a chave para entender os displays de 7 segmentos; para o básico, dê uma olhada em O que é LED? No app BlueGrays você encontra projetos de contagem de 0 a 9, contador com botão, dado, relógio digital de 4 dígitos e animação de bomba passo a passo, com esquemas do circuito e código.
Perguntas frequentes
Que resistor devo usar com um display de 7 segmentos?
Com 5 V, 220–330 Ω por segmento é adequado; 220 Ω dá uma luz mais forte e 330 Ω puxa menos corrente. Em placas de 3,3 V, como o ESP32 e o Pico, você pode usar 100–150 Ω. Coloque os resistores em cada linha de segmento separadamente, e não no pino comum.
Como sei se o meu display de 7 segmentos é de ânodo comum ou de cátodo comum?
Ligue o pino comum (3 ou 8) no GND e encoste um pino de segmento no 5V através de um resistor de 220 Ω; se o segmento acender, é de cátodo comum. Se não, ligue o pino comum no 5V e o pino do segmento no GND através do resistor; se acender agora, é de ânodo comum. O código da peça normalmente também traz CC ou CA.
Quantos pinos tem um display de 7 segmentos?
Os displays de um dígito têm 10 pinos: 7 segmentos, 1 ponto e 2 pinos comuns. Os displays de quatro dígitos têm 12 pinos: 8 linhas de segmento compartilhadas e 4 pinos de seleção de dígito. Módulos como o TM1637 são ligados com apenas 4 pinos (CLK, DIO, VCC, GND).
Por que só um dígito acende no meu display de 4 dígitos?
Os displays de quatro dígitos funcionam por multiplexação, então os dígitos precisam ser varridos um depois do outro o tempo todo. Se você usa delay() no loop(), a varredura para e só o último dígito fica aceso. Use uma biblioteca como a SevSeg, chame refreshDisplay() continuamente e faça a temporização com millis().
Um display de 7 segmentos consegue mostrar letras?
Algumas letras, sim: A, b, C, d, E, F, H, L, P, U e o podem ser mostradas de forma reconhecível. Letras como K, M, W e X não podem ser desenhadas direito com sete segmentos. Se você precisa mostrar texto, um display LCD ou OLED é mais adequado.
Como posso acionar um display de 7 segmentos com menos pinos?
O jeito mais fácil é um módulo com chip controlador: o TM1637 aciona quatro dígitos com 2 fios e o MAX7219 aciona oito dígitos com 3. Se você quer montar seu próprio circuito, um registrador de deslocamento 74HC595 permite controlar 8 segmentos com apenas 3 pinos do Arduino.
Projetos para montar depois desta leitura
Ver todos os projetos
Exibição de números de 0 a 9 em display de 7 segmentos
Exiba você mesmo aqueles números conhecidos dos elevadores e relógios digitais. Em um display formado por sete pequenas barras luminosas, o Arduino mostra um dígito de 0 a 9 por segundo e depois recom

Exibição de números de 0 a 99 em um display de 7 segmentos
Um display de dois dígitos formado por pequenas barras, como os de calculadoras, conta de 0 a 99. O Arduino separa cada número em unidades e dezenas e acende as barras necessárias entre as sete de cad

Contador com display de 7 segmentos e botões
Um contador simples com três botões: ao pressionar um deles, o algarismo no display aumenta em um; com outro, diminui em um; e o terceiro zera a contagem. O display de 7 segmentos de um dígito conta d

Projeto de dado
Chega de perder o dado durante os jogos de tabuleiro: a cada toque no botão, um número aleatório de 1 a 6 aparece no display de 7 segmentos. Cada toque gera exatamente um resultado, que também aparece

Exibição de 0 a 9.999 em display de 7 segmentos de 4 dígitos
Em um display de quatro dígitos, os números passam rapidamente de 0 a 9.999 e depois recomeçam do zero. O Arduino cria uma ilusão de ótica para que os quatro dígitos pareçam acesos ao mesmo tempo: na

Relógio digital com display de 7 segmentos de 4 dígitos
Um relógio digital luminoso de quatro dígitos, parecido com o de um forno de cozinha. O módulo de relógio DS1302 mantém a hora e, a cada segundo, o Arduino lê as horas e os minutos e os exibe no displ

Animação de bomba com display de 7 segmentos de 4 dígitos
A cena de bomba-relógio dos filmes na sua mesa, totalmente inofensiva: o display de 4 dígitos faz uma contagem regressiva a partir de 1:05, o buzzer emite um bipe a cada segundo e o LED vermelho pisca

Display TM1637 de 4 dígitos e 7 segmentos com ESP32
Vamos controlar um módulo de display de 4 dígitos e 7 segmentos com driver TM1637 usando um ESP32. Com apenas 2 pinos GPIO (CLK e DIO), executamos um contador de 0 a 9.999, ajustamos o nível de brilho e exibimos o caractere de dois-pontos (:) no centro, como em um relógio. Com a biblioteca TM1637Display, fica muito fácil controlar números, valores hexadecimais, segmentos e strings.
Mais artigos
App BlueGrays
Monte este circuito passo a passo pelo celular
Esquema do circuito, código e lista de componentes em uma só tela. Mais de 200 projetos com Arduino, ESP32 e Pico prontos para montar.
Escaneie com seu celular
Aponte a câmera para o código para abrir a loja de aplicativos do seu celular.
ou abrir a loja

