Aqui no blog você já viu como controlar um display 7 segmentos com o Max7219 e também como ligar um display 7 segmentos diretamente nas portas do Arduino. Neste post vamos usar o CI decodificador CD4511 para fazer esse controle junto com o Arduino.

Arduino Uno CD4511 Display 7 segmentos

CD4511 usa somente 4 portas do Arduino, tornando o circuito mais simples (principalmente na conexão com o microcontrolador) e deixando as outras portas livres para uso de outros componentes como sensores, atuadores, módulos, etc.

O CI decodificador CD4511

O circuito integrado CD4511 (datasheet) é um decodificador BCD (Binary-Coded Decimal) para 7 segmentos, que possui 4 pinos de entrada (em vermelho, na imagem abaixo), e 7 pinos de saída (em azul):

Pinagem CD4511

Essas 7 saídas são conectadas à um display 7 segmentos, que tem a seguinte estrutura:

Display 7 segmentos

Assim, basta ligarmos os pinos do chip aos pinos correspondentes do display, e enviarmos um valor em binário para as portas de entrada. Conforme o valor da entrada, o display exibirá o valor correspondente em decimal, seguindo a tabela abaixo:

Tabela CD4511 BCD - 7 segmentos

Logo, para formar o número 3 por exemplo, vamos seguir a tabela e enviar para o CD4511 o binário 0011, que vai acender os segmentos ABCD e G do display.

Circuito decodificador CD4511 com Arduino

Abaixo temos o esquema de ligação do CD4511 no Arduino, com os pinos digitais 4, 5, 6 e 7 conectados às entradas A0, A1, A2 e A3, respectivamente. Os pinos Lamp Test e Blanking vão ligados no Vcc, e o pino Latch vai ligado no GND. A alimentação do CD4511 é de 5V.

Circuito CD4511 e Arduino

O display utilizado nesse circuito é do tipo catodo comum, com a pinagem abaixo:

Display 7 segmentos catodo comum

Você pode até usar um display 7 segmentos anodo comum, mas para isso você terá que colocar transistores nos pinos de saída do CD4511. Consulte o datasheet do CI para ver o esquema de ligação.

Programa CD4511 e display 7 segmentos

O programa abaixo é um contador que mostra no display 7 segmentos os dígitos de 0 a 9.

Observe que usamos simplesmente o estado (HIGH ou LOW) dos pinos 4, 5, 6 e 7 para enviar os dados em binário para o CD4511.

//Programa: CD4511 e Arduino
//Autor: Arduino e Cia

//Definicao dos pinos de entrada
#define PinoA0 4
#define PinoA1 5
#define PinoA2 6
#define PinoA3 7

void setup()
{
  Serial.begin(9600);
  //Define os pinos como saida
  pinMode(PinoA0, OUTPUT);
  pinMode(PinoA1, OUTPUT);
  pinMode(PinoA2, OUTPUT);
  pinMode(PinoA3, OUTPUT);
  //Mensagem inicial serial Monitor
  Serial.println("Teste de CD4511n");
}

void loop()
{
  Serial.print("Numero: 0 ");
  digitalWrite(PinoA0, LOW);
  digitalWrite(PinoA1, LOW);
  digitalWrite(PinoA2, LOW);
  digitalWrite(PinoA3, LOW);
  delay(1000);

  Serial.print("1 ");
  digitalWrite(PinoA0, HIGH);
  digitalWrite(PinoA1, LOW);
  digitalWrite(PinoA2, LOW);
  digitalWrite(PinoA3, LOW);
  delay(1000);

  Serial.print("2 ");
  digitalWrite(PinoA0, LOW);
  digitalWrite(PinoA1, HIGH);
  digitalWrite(PinoA2, LOW);
  digitalWrite(PinoA3, LOW);
  delay(1000);

  Serial.print("3 ");
  digitalWrite(PinoA0, HIGH);
  digitalWrite(PinoA1, HIGH);
  digitalWrite(PinoA2, LOW);
  digitalWrite(PinoA3, LOW);
  delay(1000);

  Serial.print("4 ");
  digitalWrite(PinoA0, LOW);
  digitalWrite(PinoA1, LOW);
  digitalWrite(PinoA2, HIGH);
  digitalWrite(PinoA3, LOW);
  delay(1000);

  Serial.print("5 ");
  digitalWrite(PinoA0, HIGH);
  digitalWrite(PinoA1, LOW);
  digitalWrite(PinoA2, HIGH);
  digitalWrite(PinoA3, LOW);
  delay(1000);

  Serial.print("6 ");
  digitalWrite(PinoA0, LOW);
  digitalWrite(PinoA1, HIGH);
  digitalWrite(PinoA2, HIGH);
  digitalWrite(PinoA3, LOW);
  delay(1000);

  Serial.print("7 ");
  digitalWrite(PinoA0, HIGH);
  digitalWrite(PinoA1, HIGH);
  digitalWrite(PinoA2, HIGH);
  digitalWrite(PinoA3, LOW);
  delay(1000);

  Serial.print("8 ");
  digitalWrite(PinoA0, LOW);
  digitalWrite(PinoA1, LOW);
  digitalWrite(PinoA2, LOW);
  digitalWrite(PinoA3, HIGH);
  delay(1000);

  Serial.println("9 ");
  digitalWrite(PinoA0, HIGH);
  digitalWrite(PinoA1, LOW);
  digitalWrite(PinoA2, LOW);
  digitalWrite(PinoA3, HIGH);
  delay(1000);

  Serial.println("Limpa o display...");
  digitalWrite(PinoA0, HIGH);
  digitalWrite(PinoA1, HIGH);
  digitalWrite(PinoA2, HIGH);
  digitalWrite(PinoA3, HIGH);
  delay(1000);
}

O loop mostra os dígitos de 0 a 9 no display, e também envia essa informação para o serial monitor, para fins de acompanhamento.

4.7/5 - (45 votes)