Você está na página 1de 2

Multiplexando displays de 7 segmentos

Abaixo apresentado o hardware especfico para acionamento de dois displays de 7 seg-


mentos pela porta B. Vale ressaltar que o hardware bsico no est ilustrado para facilitar
o entendimento, mas o mesmo obrigatrio para funcionamento do microcontrolador.

B7# 330 ohms


A0# B6#
A1# B5#
A2# B4#
A3# B3#
A4# B2#
A5# B1#
B0#

A6#
C0# C7#
C1# C6# Rt Rt
T1
C2# C5# T2
C4#

Quanto ao circuito apresentado, os dois displays so conectados na mesma porta B, em


que os pinos dos display so conectados um ao outro, possuindo o mesmo ponto de ten-
so. Deste modo, o pino a de um display ligado ao pino a do segundo display, b de um
ligado com o b do outro e o mesmo para todos os pinos. Quanto aos resistores, os mes-
mos so compartilhados pelos dois displays, por exemplo, o resistor do pino B6 conec-
tado ao ponta de tenso a que vai para os dois displays.

111
evite este erro e acione apenas um display por vez. As linhas de comando a seguir exem-
plificam o acionamento dos dois displays, colocando o valor 1 no primeiro display e 2 no
segundo:

! outuput_high( PIN_C7 ); // habilitando display 1, pois C7 conectado base de T1


! outuput_low( PIN_C6 ); // desabilitando display 2, pois C6 conectado base de T2
! output_b(0b00110000); // enviando valor para visualizar o nmero 1 no display 1
! delay_ms(1000);
! outuput_high( PIN_C6 ); // habilitando display 2, pois C6 conectado base de T2
! outuput_low( PIN_C7 ); // desabilitando display 1, pois C7 conectado base de T1
! output_b(0b00110000); // enviando valor para visualizar o nmero 2 no display 2
! delay_ms(1000);

O exemplo de software abaixo realiza uma contagem de 0 at 20 utilizando o hardware do


comeo desta seo. Vale lembrar que o operador de diviso ( / ) e o operador resto de di-
viso ( % ) esto detalhados no capitulo 2.

#include <18f2550.h>
#fuses HS
#use delay(clock = 20000000)
byte const digitos [ ] = { 0b01111110, 0b00110000, 0b01101101, 0b01111001, 0b00110011,
0b01011011, 0b01011111,0b01110000, 0b01111111, 0b01111011};
int dezena, unidade, contagem;
main()
{
while (1)
{
! for(contagem=0;contagem<=15;contagem++)
! {
! ! dezena = contagem / 10; //Isto pega a parte da dezena da contagem
! ! unidade = contagem % 10; //Isto pega a parte da unidade da contagem
! ! outuput_high( PIN_C7 ); // habilitando display 1, pois C7 conectado base de T1
! ! outuput_low( PIN_C6 ); // desabilitando display 2, pois C6 conectado base de T2
! ! output_b( digitos[dezena] ); // enviando valor para visualizar o nmero 1 no display 1
! ! delay_ms(1000);
! ! outuput_high( PIN_C6 ); // habilitando display 2, pois C6 conectado base de T2
! ! outuput_low( PIN_C7 ); // desabilitando display 1, pois C7 conectado base de T1
! ! output_b( digitos[unidade] ); // enviando valor para visualizar o nmero 2 no display 2
! ! delay_ms(1000);
! }
}
}
113