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.

O 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):
Essas 7 saídas são conectadas à um display 7 segmentos, que tem a seguinte estrutura:
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:
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 A, B, C, D 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.
O display utilizado nesse circuito é do tipo catodo comum, com a pinagem abaixo:
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.