Introdução
Nas duas últimas aulas exploramos o uso dos Displays LCD como dispositivos de saída padrão para os nossos projetos. Apesar de apresentarem inúmeras vantagens, não são a melhor opção para display em ambientes extremamente iluminados com a luz do sol devido ao reflexo. Seus dígitos pequenos também podem dificultar a leitura.
Como alternativa temos os displays de sete segmentos que iremos explorar hoje.
![]() |
Um display de 7 segmentos genérico |
Conhecendo o Display de 7 segmentos.
Como o próprio nome diz, um display de sete segmentos é um dispositivo de exibição formado por sete segmentos de reta dispostos paralelamente em um encapsulamento retangular. Esses segmentos geralmente são Leds que ao serem ligados de maneira combinada formam dígitos e alguns caracteres alfabéticos.
![]() |
Animação mostrando o funcionamento de um Display de 7 segmentos |
Cada led do conjunto é identificado com uma letra e possui um terminal para controlá-lo. Além dos leds em segmentos, o display conta com um led no seu canto inferior direito para representar um ponto decimal.
![]() |
Identificação dos leds |
Podemos encontrá-los no mercado sendo oferecidos em um dígito, como os mostrados até agora, mas na também em conjunto de dois, três ou quatro dígitos.
Cátodo comum x Anodo comum
Além do seu próprio terminal, todos os leds são conectados a um terminal comum que, dependendo do tipo do display, poderá ser conectado a um pino positivo ou negativo de alimentação. Por essa razão encontramos no mercado Displays de 7 segmentos chamados de 5611Ax cátodo comum ou 5611Bx ânodo comum.
Em termos práticos, o display cátodo comum é aquele que o terminal comum do display será ligado ao GND da placa. Da mesma forma, o display anodo comum terá o seu terminal comum ligado ao VCC.
A combinação de leds
Conforme falamos, a exibição de caracteres é feita com uma combinação de Leds, conforme a tabela a seguir:
Na parte traseira do display temos os respectivos terminais para serem ligados conforme o exemplo abaixo para um display anodo comum:
![]() |
Disposição dos terminais em um Display anodo comum |
Podem ser encontrados em voltagens de 2,2 a 3 Volts por segmentos e geralmente suportando uma corrente máxima de 30 mA por segmento. Veja que é um consumo muito alto se pensarmos nos oito leds ligados ao mesmo, sendo necessário um resistor externo para reduzir a corrente a níveis aceitáveis.
A Montagem
Para ganhar tempo estou disponibilizando a montagem pronta que o estudante poderá salvar uma cópia no seu perfil. Veja que estou colocando um resistor de 330 ohms para cada led do conjunto e ligando um dos terminais comuns ao GND, portanto trata-se de um Display Cátodo Comum.
O Wokwi permite que o display seja ajustado para cátodo ou anodo. Eu preferi utilizar duas miniboards porque acho que fica mais bem aproveitado o espaço para conexões. Lembrando que a parte traseira do display tem pinos que se encaixam bem na protoboard.
![]() |
Selecionando o display é possível ajustá-lo |
Link: https://wokwi.com/projects/413834434359822337
O Sketch
Não há muito o que comentar nesse código. Ele basicamente utiliza os conceitos das nossas primeiras aulas de Arduino para acender Leds. A diferença é que agora são muitos leds juntos. Nele eu defini algumas constantes que seriam os pinos utilizados para os leds.
Para facilitar, deixei uma sequência de pinos de 2 a 9 para ter um correspondência entre os terminais de A até G do display. A função setup() apenas precisou configurar os pinos para saída. O código ficou grande porque criei uma função para cada digito a ser mostrado, isto é, uma função um(), dois(), tres(), etc...
Cada função utiliza a função apaga() que deixa todos os leds que estavam acesos apagados, para depois acender apenas os leds necessários para formar o digito desejado, conforme aquela tabela que mostramos neste texto, com uma instrução digitalWrite().
A função loop() apenas chama as funções fazendo uma contagem e dando um intervalo de dois segundos para o estudante poder acompanhar. Caso não lembre como se faz funções, recomendo uma revisada nas aulas de C++ clicando aqui.
- #define LedA 2
- #define LedB 3
- #define LedC 4
- #define LedD 5
- #define LedE 6
- #define LedF 7
- #define LedG 8
- #define LedP 9
- void setup() {
- pinMode(LedA,OUTPUT);
- pinMode(LedB,OUTPUT);
- pinMode(LedC,OUTPUT);
- pinMode(LedD,OUTPUT);
- pinMode(LedE,OUTPUT);
- pinMode(LedF,OUTPUT);
- pinMode(LedG,OUTPUT);
- pinMode(LedP,OUTPUT);
- }
- void loop() {
- um();
- delay(2000);
- dois();
- delay(2000);
- tres();
- delay(2000);
- quatro();
- delay(2000);
- cinco();
- delay(2000);
- seis();
- delay(2000);
- sete();
- delay(2000);
- oito();
- delay(2000);
- todos();
- delay(2000);
- nove();
- delay(2000);
- zero();
- delay(2000);
- }
- void todos() {
- digitalWrite(LedA,HIGH);
- digitalWrite(LedB,HIGH);
- digitalWrite(LedC,HIGH);
- digitalWrite(LedD,HIGH);
- digitalWrite(LedE,HIGH);
- digitalWrite(LedF,HIGH);
- digitalWrite(LedG,HIGH);
- digitalWrite(LedP,HIGH);
- }
- void apaga() {
- digitalWrite(LedA,LOW);
- digitalWrite(LedB,LOW);
- digitalWrite(LedC,LOW);
- digitalWrite(LedD,LOW);
- digitalWrite(LedE,LOW);
- digitalWrite(LedF,LOW);
- digitalWrite(LedG,LOW);
- digitalWrite(LedP,LOW);
- }
- void um() {
- apaga();
- digitalWrite(LedB,HIGH);
- digitalWrite(LedC,HIGH);
- }
- void dois() {
- apaga();
- digitalWrite(LedA,HIGH);
- digitalWrite(LedB,HIGH);
- digitalWrite(LedD,HIGH);
- digitalWrite(LedE,HIGH);
- digitalWrite(LedG,HIGH);
- }
- void tres() {
- apaga();
- digitalWrite(LedA,HIGH);
- digitalWrite(LedB,HIGH);
- digitalWrite(LedC,HIGH);
- digitalWrite(LedD,HIGH);
- digitalWrite(LedG,HIGH);
- }
- void quatro() {
- apaga();
- digitalWrite(LedB,HIGH);
- digitalWrite(LedC,HIGH);
- digitalWrite(LedF,HIGH);
- digitalWrite(LedG,HIGH);
- }
- void cinco() {
- apaga();
- digitalWrite(LedA,HIGH);
- digitalWrite(LedC,HIGH);
- digitalWrite(LedD,HIGH);
- digitalWrite(LedF,HIGH);
- digitalWrite(LedG,HIGH);
- }
- void seis() {
- apaga();
- digitalWrite(LedA,HIGH);
- digitalWrite(LedC,HIGH);
- digitalWrite(LedD,HIGH);
- digitalWrite(LedE,HIGH);
- digitalWrite(LedF,HIGH);
- digitalWrite(LedG,HIGH);
- }
- void sete() {
- apaga();
- digitalWrite(LedA,HIGH);
- digitalWrite(LedB,HIGH);
- digitalWrite(LedC,HIGH);
- }
- void oito() {
- apaga();
- digitalWrite(LedA,HIGH);
- digitalWrite(LedB,HIGH);
- digitalWrite(LedC,HIGH);
- digitalWrite(LedD,HIGH);
- digitalWrite(LedE,HIGH);
- digitalWrite(LedF,HIGH);
- digitalWrite(LedG,HIGH);
- }
- void nove() {
- apaga();
- digitalWrite(LedA,HIGH);
- digitalWrite(LedB,HIGH);
- digitalWrite(LedC,HIGH);
- digitalWrite(LedF,HIGH);
- digitalWrite(LedG,HIGH);
- }
- void zero() {
- apaga();
- digitalWrite(LedA,HIGH);
- digitalWrite(LedB,HIGH);
- digitalWrite(LedC,HIGH);
- digitalWrite(LedD,HIGH);
- digitalWrite(LedE,HIGH);
- digitalWrite(LedF,HIGH);
- }
Achou complicado? Eu também. É por isso que existe uma biblioteca chamada sevseg.h que facilita o uso de display de 7 segmentos, mas isso eu mostrarei daqui algumas aulas.
Depois desse contato com esse tipo de display, o aluno pode estar com a seguinte dúvida: Se um display de um dígito utilizou todos esses pinos do Arduino, o que aconteceria se fossem dois dígitos?
A resposta a gente vê na próxima aula...
Referências
ARDUINO. SevSeg. Disponível em <https://docs.arduino.cc/libraries/sevseg/> Acesso em 06 nov 2024.
BLOG ELETROGRATE. Guia Completo dos Displays de 7 Segmentos – Arduino. Disponível em <https://blog.eletrogate.com/guia-completo-dos-displays-de-7-segmentos-arduino/> Acesso em 06 nov 2024.
BLOG DA ROBÓTICA. Como utilizar display de 7 segmentos com 4 dígitos – cátodo comum com Arduino. Disponível em <https://www.blogdarobotica.com/2022/06/30/como-utilizar-display-de-7-segmentos-com-4-digitos-catodo-comum-com-arduino/> Acesso em 06 nov 2024.
DISPLAY DE SETE SEGMENTOS. In: WIKIPÉDIA, a enciclopédia livre. Flórida: Wikimedia Foundation, 2021. Disponível em: <https://pt.wikipedia.org/w/index.php?title=Display_de_sete_segmentos&oldid=60976533>. Acesso em: 06 nov 2024.
ROBO CORE. Display de 7 Segmentos. Disponível em <https://www.robocore.net/display/display-7-segmentos> Acesso em 06 nov 2024.