Arduino e display de 7 segmentos com 4 digitos

Olá galera. A dica de hoje é como utilizar um display de 7 segmentos com 4 dígitos, com esse display é possível fazer vários projetos como relógios, visualização de dados de sensores de temperatura, distancia, é possível ainda criar cronômetros entre outros.

Esse display foi um “presente” que ganhei de um amigo certa vez… Como ele iria joga-lo fora e eu pensei que algum dia poderia ser útil ter um desses, pedi a ele que me presenteasse (risos)…

Enfim, acabei guardando tão bem o presente que demorei a encontra-lo, mas como naquele ditado em que diz: Quem procura acha! Acabei encontrando-o e resolvi criar esse tutorial.

Primeiramente devemos recorrer ao seu datasheet que pode ser encontrado AQUI, ou ainda ver a figura abaixo:

Como voces podem ver os anodos são os pinos 12, 9, 8 e 6. Os demais pinos são para os segmentos: A pino 11, B pino 7, C pino 4, D pino 2, E pino 1, F pino 10, G pino 5 e DP (pontos) pino 3.

Sabendo disso, segue um código simples de como mostrar os números:

/*
# Autor: Fernando Krein Pinheiro
# Data: 10/07/2012
# Linguagem: C/C++

# ========= IMPORTANTE ===========
# O codigo esta livre para usar,
# citar e compartilhar desde que
# mantida sua fonte e seu autor.
# Obrigado.

=================================*/

#define DIGITO_1 9 //Anodo 12
#define DIGITO_2 10 //Anodo 9
#define DIGITO_3 11 // Anodo 8
#define DIGITO_4 12 //Anodo 6

#define SEGMENTO_A 2 // display 11
#define SEGMENTO_B 3 // dysplay 7
#define SEGMENTO_C 4 // display 4
#define SEGMENTO_D 5 // display 2
#define SEGMENTO_E 6 // display 1
#define SEGMENTO_F 7 // display 10
#define SEGMENTO_G 8 // display 5
#define PONTO 13 // display 3

#define ON  HIGH
#define OFF LOW

void setup()
{

  pinMode(DIGITO_1, OUTPUT);
  pinMode(DIGITO_2, OUTPUT);
  pinMode(DIGITO_3, OUTPUT);
  pinMode(DIGITO_4, OUTPUT);
  pinMode(PONTO, OUTPUT);

  pinMode(SEGMENTO_A, OUTPUT);
  pinMode(SEGMENTO_B, OUTPUT);
  pinMode(SEGMENTO_C, OUTPUT);
  pinMode(SEGMENTO_D, OUTPUT);
  pinMode(SEGMENTO_E, OUTPUT);
  pinMode(SEGMENTO_F, OUTPUT);
  pinMode(SEGMENTO_G, OUTPUT);

}

void loop()
{
   digitalWrite(DIGITO_1, HIGH);
   digitalWrite(DIGITO_2, HIGH);
   digitalWrite(DIGITO_3, HIGH);
   digitalWrite(DIGITO_4, HIGH);
   digitalWrite(PONTO, HIGH);

   ZERO();
   delay(1000);
   UM();
   delay(1000);
   DOIS();
   delay(1000);
   TRES();
   delay(1000);
   QUATRO();
   delay(1000);
   CINCO();
   delay(1000);
   SEIS();
   delay(1000);
   SETE();
   delay(1000);
   OITO();
   delay(1000);
   NOVE();
   delay(1000);

}
void ZERO()
{
   digitalWrite(SEGMENTO_A, LOW);
   digitalWrite(SEGMENTO_B, LOW);
   digitalWrite(SEGMENTO_C, LOW);
   digitalWrite(SEGMENTO_D, LOW);
   digitalWrite(SEGMENTO_E, LOW);
   digitalWrite(SEGMENTO_F, LOW);
   digitalWrite(SEGMENTO_G, HIGH);
}
void UM()
{
   digitalWrite(SEGMENTO_A, HIGH);
   digitalWrite(SEGMENTO_B, LOW);
   digitalWrite(SEGMENTO_C, LOW);
   digitalWrite(SEGMENTO_D, HIGH);
   digitalWrite(SEGMENTO_E, HIGH);
   digitalWrite(SEGMENTO_F, HIGH);
   digitalWrite(SEGMENTO_G, HIGH);
}
void DOIS()
{
   digitalWrite(SEGMENTO_A, LOW);
   digitalWrite(SEGMENTO_B, LOW);
   digitalWrite(SEGMENTO_C, HIGH);
   digitalWrite(SEGMENTO_D, LOW);
   digitalWrite(SEGMENTO_E, LOW);
   digitalWrite(SEGMENTO_F, HIGH);
   digitalWrite(SEGMENTO_G, LOW);

}
void TRES()
{
   digitalWrite(SEGMENTO_A, LOW);
   digitalWrite(SEGMENTO_B, LOW);
   digitalWrite(SEGMENTO_C, LOW);
   digitalWrite(SEGMENTO_D, LOW);
   digitalWrite(SEGMENTO_E, HIGH);
   digitalWrite(SEGMENTO_F, HIGH);
   digitalWrite(SEGMENTO_G, LOW);
}
void QUATRO()
{
   digitalWrite(SEGMENTO_A, HIGH);
   digitalWrite(SEGMENTO_B, LOW);
   digitalWrite(SEGMENTO_C, LOW);
   digitalWrite(SEGMENTO_D, HIGH);
   digitalWrite(SEGMENTO_E, HIGH);
   digitalWrite(SEGMENTO_F, LOW);
   digitalWrite(SEGMENTO_G, LOW);

}
void CINCO()
{
   digitalWrite(SEGMENTO_A, LOW);
   digitalWrite(SEGMENTO_B, HIGH);
   digitalWrite(SEGMENTO_C, LOW);
   digitalWrite(SEGMENTO_D, LOW);
   digitalWrite(SEGMENTO_E, HIGH);
   digitalWrite(SEGMENTO_F, LOW);
   digitalWrite(SEGMENTO_G, LOW);
}
void SEIS()
{
   digitalWrite(SEGMENTO_A, LOW);
   digitalWrite(SEGMENTO_B, HIGH);
   digitalWrite(SEGMENTO_C, LOW);
   digitalWrite(SEGMENTO_D, LOW);
   digitalWrite(SEGMENTO_E, LOW);
   digitalWrite(SEGMENTO_F, LOW);
   digitalWrite(SEGMENTO_G, LOW);
}
void SETE()
{   digitalWrite(SEGMENTO_A, LOW);
   digitalWrite(SEGMENTO_B, LOW);
   digitalWrite(SEGMENTO_C, LOW);
   digitalWrite(SEGMENTO_D, HIGH);
   digitalWrite(SEGMENTO_E, HIGH);
   digitalWrite(SEGMENTO_F, HIGH);
   digitalWrite(SEGMENTO_G, HIGH);

}
void OITO()
{
   digitalWrite(SEGMENTO_A, LOW);
   digitalWrite(SEGMENTO_B, LOW);
   digitalWrite(SEGMENTO_C, LOW);
   digitalWrite(SEGMENTO_D, LOW);
   digitalWrite(SEGMENTO_E, LOW);
   digitalWrite(SEGMENTO_F, LOW);
   digitalWrite(SEGMENTO_G, LOW);

}
void NOVE()
{   digitalWrite(SEGMENTO_A, LOW);
   digitalWrite(SEGMENTO_B, LOW);
   digitalWrite(SEGMENTO_C, LOW);
   digitalWrite(SEGMENTO_D, HIGH);
   digitalWrite(SEGMENTO_E, HIGH);
   digitalWrite(SEGMENTO_F, LOW);
   digitalWrite(SEGMENTO_G, LOW);

}

E para minha tristeza e insatisfação, um dos segmentos do primeiro digito está queimado portanto não liga e não forma o numero corretamente.
Mas nesse casso ele pode ser isolado via código e ainda assim tenho 3 dígitos!

Veja o vídeo:

O segmento queimado é o E do primeiro dígito, como pode ser visto no vídeo…

Então é isso aí! Até a pŕoxima.

Anúncios
por ferpinheiro Postado em Arduino

6 comentários em “Arduino e display de 7 segmentos com 4 digitos

    • Sim sem problema nenhum! Pode criar uma função para verificar a interrupção do botão e então usar a função millis() para fazer a o contagem de tempo apartir do pressionamento do botão e mostrar no display…

  1. Pingback: display 7 segmentos com 4 digitos

  2. Eu não consegui colocar valores diferentes. Exemplo: 1234. Percebi que no teu exemplo tb coloca o mesmo valor para os 4 dígitos. Achei outros exempos na internet com o mesmo problema. Sabe me dizer se é possível? Obrigado

  3. Amigo, eu gostaria de um código de um display 4 digitos 7 segmentos.
    Com 2 botões um de avanço e um de regresso.
    tipos aqueles que tem em bancos, para filas.
    Muito obrigado !

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s