Você está na página 1de 13

Display 7 Segmentos

Prof. Dr. Ilton L Barbacena


Dez - 2013

Mdulos de display 7 segmentos

Displays 7 segmentos: anodo comum e catodo comum (5 a 20mA)


07/12/2013

Mdulos de display 7 segmentos

Ctodos (mdulo de 4display):


12 para o primeiro display;
9 para o segundo;
8 para o terceiro
6 para o quarto display.
Anodos partilhados:
11(A), 7(B), 4(C), 2, 1, 10, 5, 3(dp)
Displays 7 segmentos: anodo comum e catodo comum
07/12/2013

Contagem com 1 display 7 segmentos

07/12/2013

Contagem com 1 display 7 segmentos


// IFPB - J Pessoa
// Prof. Ilton L Barbacena
// Plataforma Arduino
// Contador de 0 a 9 com display 7 segmentos
//
Arquivo do proteus: 1disp7a_1.DCN
const byte pinos[] = {13, 12, 11, 10, 9, 8, 7, 6, 5};
const byte saida[] = {0x3F, B00000110, 0x5B, 0x4F,
0x66, 0x6D, 0x7D, 7, 0x7F, 0x6F};
int cont=-1;
int tempo=1000;
void setup()
{
for (int y=0; y<9; y++) // pinos sada para os leds
pinMode(pinos[y], OUTPUT);
Serial.begin(9600); // envio pela serial
Serial.println("IFPB - Campus J Pessoa");
Serial.println("Prof. Ilton L Barbacena");
Serial.println("Dez - 2013");
Serial.println("Contador com 1 display 7 segmentos");
Serial.println(" ");

void loop()
{
cont++;
if (cont >= 10)
{
cont=0;
Serial.println(" Inicio de contagem");
}
escreve(saida[cont]); // escreve o byte nos 8 leds
Serial.print("Valor em Hexadecimal = ");
Serial.println(saida[cont], HEX);
delay(tempo);
}
void escreve(byte h) // escreve um byte nos 8 leds
{
// inverte o valor no led
digitalWrite(pinos[8], !digitalRead(pinos[8]));
for (int d=0; d<8; d++)
digitalWrite(pinos[d], bitRead(h, d));

}
}
07/12/2013

Mdulo de 4 display

Resistor para
Limitar a corrente
https://sites.google.com/site/grcbyte/electronica/arduino/segment-4-digit

Displays 7 segmentos: exemplos de ligaes


07/12/2013

Mdulo de 4 display

4 Displays 7 segmentos: situaes no efeito


07/12/2013

Mdulo de 4 display

4 Displays 7 segmentos: situaes no efeito


07/12/2013

Mdulo de 4 display
Para fazer este efeito podemos verificar os valores assumidos por cada display em cada
situao:
Display de milhar:
m[12 ] = { 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x18, 0x30}
Display de centena:
c[12 ] = { 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00}
Display de dezena:
d[12 ] = { 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x00}
Display de unidade:
u[12 ] = { 0x00, 0x00, 0x00, 0x01, 0x03, 0x06, 0x0C, 0x08, 0x00, 0x00, 0x00, 0x00}
Situao 5
Valores assumidos pelos dgitos durante o efeito
07/12/2013

Mdulo de 4 display
Como fazer a multiplexao dos dgitos?
Tempo1 = tempo entre cada situao
Tempo2 = tempo de multiplexao.
A cada tempo 2:
1. Habilitar um dos dgitos atravs de seu catodo comum e desabilitar os demais, em
forma de escalonamento;
2. Escrever no display, relativo ao valor da situao e ao dgito do momento, dentro da
multiplexao. Exemplo: para situao 5
- escrever 0x00 no milhar, 0x00 na centena, 0x00 na dezena e 0x06 na unidade
A cada tempo 1:
- Incrementar a situao e se maior que 11, zera a situao

07/12/2013

10

Mdulo de 4 display

07/12/2013

11

Mdulo de 4 display
No exemplo da tela anterior utilizamos o CI 74LS595 para economizar pinos do
arduno. Trata-se de um conversor Serial Paralelo de 8 bits com reteno. Os
pinos principais deste CI so:
Pinos

Funo de cada pino do CI 74LS595

13

Habilita a sada, quando 0. Neste caso, este pino est aterrado.

10

Pino de limpar todas as sadas. Neste caso, colocamos este pino no Vcc.

14

Pino de entrada de dados serial. Este pino est ligado ao pino 11 do


arduno.

11

Pino de clock para gravao do dado na serial. Um pulso neste pino, grava
o bit presente nas entradas de dados serial em todos os flipflops. Este pino
est ligado no pino A3 do arduno.

12

Pino de gravao na sada. Um pulso neste pino grava os 8 bits presentes


nos primeiros 8 flipflops nos flipflops da sada. Este pino est ligado no
pino 9 do arduno.

07/12/2013

12

Mdulo de 4 display
A seguir apresentaremos alguns trechos de cdigos, para arduno, referente ao
exemplo apresentado.
Rotina para escrever um byte no
74LS595:

Algumas definies:
int unidade
int dezena
int centena
int milhar

=
=
=
=

6;
7;
5;
4;

int latchPin = 9;
int dataPin = 11;
int srclk
= A3;

// display de unidade => 1, ativa


// display de dezena => 1, ativa
// display de centena => 1, ativa
// display de milhar => 1, ativa

void mostra(byte w)
{
for (int y=0; y<8; y++)
{
digitalWrite(dataPin, bitRead(w, 7-y)); // pino 14 do 595 => D7, D6, ..., D0
delayMicroseconds(10);
digitalWrite(srclk, HIGH);
// pulso de gravao
delayMicroseconds(10);
digitalWrite(srclk, LOW);
// pino 11 do 595
}

// Pino ST-CP ou 12 do 74HC595


// Pino DS ou 14 do 74HC595
// Pino SH-CP ou 11 do 74HC595

const int mill[]

= { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,


0x00, 0x00, 0x08, 0x18, 0x30};
const int centt[] = { 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x08, 0x08, 0x00, 0x00};
const int dezz[] = { 0x00, 0x01, 0x01, 0x00, 0x00, 0x00,
0x08, 0x08, 0x00, 0x00, 0x00};
const int unidd[] = { 0x00, 0x00, 0x01, 0x03, 0x06, 0x0C,
0x08, 0x00, 0x00, 0x00, 0x00};

07/12/2013

digitalWrite(latchPin, HIGH);
delayMicroseconds(10);
digitalWrite(latchPin, LOW);

// pulso para enviar para a sada


// pino 12 do 595 => grava na sada

13

Você também pode gostar