Você está na página 1de 6

Electrnica - Main Site

Main Menu Sponsored Links ltimos Circuitos


INICIO Display 7 segmentos Arduino

ALARME Portas Lgicas Arduino


Acoplador tico 4N35
AMPLIFICADORES
UDIO Sada Rel Arduino
Sequenciador Leds
ARDUINO
Sada Arduino 220-110V
CIRCUITOS AUTO

CARREGADORES
BATERIA

FONTES
ALIMENTAO

ILUMINAO

RDIO CIRCUITOS
0
PICS
Display 7 segmentos Arduino
Arduino
ENGLISH
There are no translations available.

display 7 segmentos Arduino


Pretende-se com este artigo demonstrar como o arduino pode funcionar com display de 7
segmentos. Utilizou-se um SA56-11GWA que um display nico com nodo comum, isto signifi
que o nodo comum a todos os digitos e ao ponto.
Um display composto por 8 leds, 7 formam o algarismo e 1 o ponto decimal.A converso entre
decimal o que pretendemos mostrar e a informao binria que o recebe designa-se por BCD
(Binary Coded Decimal).

Em termos de hardware, cada led funciona de forma individual, por isso, cada uma dos segmen
tem de levar uma resistncia limitadora, neste caso concreto, cada digito tem uma tenso de
funcionamento de 2.2V e um consumo de 20mA. Se a tenso 5volts, necessitamos que no
resistor caia 5-2.2=3.8V, pela lei de ohm podemos calcular, R=Vres/Iled R=3.8/0.020= 190 +/-20
(vamos usar um resistor com 220). Isto aplica-se a este display usado como exemplo SA56-
11GWA, outros podem ter valores diferentes, ser til calcular o valor da resistncia necessria.

Decimal A A3 A2 A1

0 0 0 0 0
1 0 0 0 1
2 0 0 1 0
3 0 0 1 1
4 0 1 0 0
5 0 1 0 1
6 0 1 1 0
7 0 1 1 1
8 1 0 0 0
9 1 0 0 1

A primeira coisa que teremos de fazer


converter o nosso nmero decimal em
binrio, vamos usar apenas exemplos de 0 a 9 nesta primeira fase

byte decToBcd(byte val)


{
return ( (val/10*8) + (val%10) );
}

Isto converte o nosso valor decimal para binrio, por exemplo, supondo que temos nmeros com
mais de 2 digitos, 27 ser 0010 0111 (2 - 7 em BCD). Se tivermos apenas um algarismo o 2 por
exemplo, teremos 0010.
Isto permite-nos atuar sobre um ci decoder(4511) e usar o cdigo BCD de apenas 4 sadas do
arduino, podemos assim converter um valor resultado de uma contagem, ou de qualquer entrad
para o digito.

/*
Exemplo de um contador de 0 a 9 que soma cada
vez que existe uma entrada em A0

author: Arturo Guadalupi


*/

//Declarao dos pinos usadas nas entradas do 4511


const int A=2;
const int B=3;
const int C=4;
const int D=5;

void setup() {
pinMode(A0, INPUT);
pinMode(A, OUTPUT); //LSB
pinMode(B, OUTPUT);
pinMode(C, OUTPUT);
pinMode(D, OUTPUT); //MSB
}

int count = 0; //variavel usada para o nmero

void loop() {
if (digitalRead(A0) == LOW) //se o boto for premido na entrada A0
{
count++;
delay(200); //o delay impede multiplas contagens
if (count == 10) //contador de 0 a 9
count = 0;
to_BCD(); //converter para binrio
}

if (count == 10)
count = 0;

void to_BCD()
{
if (count == 0) //write 0000
{
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
}

if (count == 1) //write 0001


{
digitalWrite(A, HIGH);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
}

if (count == 2) //write 0010


{
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
}

if (count == 3) //write 0011


{
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
}

if (count == 4) //write 0100


{
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, HIGH);
digitalWrite(D, LOW);
}

if (count == 5) //write 0101


{
digitalWrite(A, HIGH);
digitalWrite(B, LOW);
digitalWrite(C, HIGH);
digitalWrite(D, LOW);
}

if (count == 6) //write 0110


{
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, LOW);
}

if (count == 7) //write 0111


{
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, LOW);
}

if (count == 8) //write 1000


{
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, HIGH);
}

if (count == 9) //write 1001


{
digitalWrite(A, HIGH);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, HIGH);
}
}

Converter decimal para binrio (8bits)


Existe a possibilidade de transferir diretamente o valor binrio para as sadas, aqui fica um
exemplo de contador cclico de zero a nove

int ledpins[] = {4,5,6,7,8,9,10,11};


byte digits[] = {B11111100,B01100000,B11011010, B11110010,B01100110,B101101
B10111110,B11100000,B11111110,B11110110};

void setup()
{
for (int i =0;i<8;i++)
{
pinMode(ledpins[i],OUTPUT);
digitalWrite(ledpins[i], HIGH);
}
}

void loop()
{
for (int i =0;i<10;i++)
{
displayDigit(i);
delay(1000);
alloff();
delay(500);
}
}

void displayDigit(int digit)


{
for (int i =0;i<8;i++)
{
digitalWrite(ledpins[i],!bitRead(digits[digit],7-i));
}
}

void alloff()
{
for (int i =0;i<8;i++)
{
digitalWrite(ledpins[i], HIGH);
}
}

Neste caso no se usaram as sadas BCD mas sim um cdigo binrio direto nos 8 bits (um por
cada led ligado)
Foi usado um nvel 1(HIGH) quando o segmento acende e 0 (LOW) quando apagado. O ltimo
dgito sempre um 0 representa o ponto decimal que no est a ser usado.

O procedimento AllOff () desliga todos os dgitos invertendo o pino comum.

displayDigit () liga o segmento certo para cada dgito. A funo bitread l os bits do nmero bin
comeando com o bit mais direita. por isso que o 7-i usado. Quando utilizar a instruo
digitalWrite (), podemos escrever 1 quando queremos ALTA e um 0 quando queremos LOW. Est
o oposto de como os nossos nmeros binrios esto a funcionar. O operador ! inverte o valor.

Seguinte >

Sponsored Links

Curso Eletrnica
Digital
Curso de Eletrnica com Anlise
de Circuitos.Treinamento Prtico
em SP

Legal |Privacidade |Eletronica PT |Contacte-nos

Você também pode gostar