Acionar Display Duplo de 7 Segmentos com Arduino + 74HC595

Para o circuito da figura, escrevi uma biblioteca para mostrar valores nos dois displays de leds. Usando um CI 74HC595, podemos botar pra funcionar um display de 7 segmentos, ocupando apenas 3 saídas do Arduino.

Independente da pinagem do display de LEDS, mantenha a seguinte relação entre os pinos do 74hc595 e o display:

74HC595             segmento

pino                       no display

----------------|-----------------

Q0 (15)        |   a

Q1(1)           |   b

Q2(2)           |   c 

Q3(3)           |   d

Q4(4)           |   e

Q5(5)           |   f

Q6(6)           |  g

Q7(7)           |  dp

----------------|-----------------

Crie uma pasta chamada SevenDisp em C:\arduino-1.0\libraries\

Grave nesta pasta os seguintes arquivos:

"SevenDisp.h"

/*
SevenDisp.h - Library for 2 display for 7 segments
Created by Luís Bulek July, 2012.
Released into the public domain.
*/
#ifndef SevenDisp_h
#define SevenDisp_h

#include "Arduino.h"
#include <inttypes.h>

// definição dos padrões para o display seguindo a ordem dos bits,
// da esquerda para a direita abcdefg.

class SevenDisp
{
public:
SevenDisp(uint8_t datapin, uint8_t latchpin, uint8_t clockpin);
void Show(int x);
void Base(uint8_t base);

private:
  uint8_t _datapin; 
  uint8_t _latchpin;
  uint8_t _clockpin;
  int _x;
  int _a;
  int _b;  
  uint8_t _base;
};

#endif

"SevenDisp.cpp"

/*
SevenDisp.cpp - Library for 2 display for 7 segments
Created by Luís Bulek July, 2012.
Released into the public domain.
*/

#include "Arduino.h"
#include "SevenDisp.h"

byte _LEDDSP [] = {
B00000011, // 0
B10011111, // 1
B00100101, // 2
B00001101, // 3
B10011001, // 4
B01001001, // 5
B01000001, // 6
B00011111, // 7
B00000001, // 8
B00001001, // 9
B00010001, // a
B11000001, // b
B01100011, // c
B10000101, // d
B01100001, // e
B01110001, // f
};

SevenDisp::SevenDisp(uint8_t datapin, uint8_t latchpin, uint8_t clockpin)
{
_datapin = datapin;
_latchpin = latchpin;
_clockpin = clockpin;
_base = 10;

pinMode(_datapin, OUTPUT);
pinMode(_latchpin, OUTPUT);
pinMode(_clockpin, OUTPUT);
}

void SevenDisp::Show(int x)
{
_x = x;
_a = (_x / _base);
_b = _x - (_a * _base);

digitalWrite(_latchpin, LOW);
shiftOut(_datapin, _clockpin, LSBFIRST, _LEDDSP[_b]); // envia primeiro a unidade
shiftOut(_datapin, _clockpin, LSBFIRST, _LEDDSP[_a]); // envia a dezena
digitalWrite(_latchpin, HIGH);
}

void SevenDisp::Base(uint8_t base)
{
_base = base;
}

Dentro desta pasta SevenDisp crie outra chamada Exemples, grave e teste os exemplos abaixo:

"ContDisp.ino"

#include <SevenDisp.h>

SevenDisp Seven(5,6,7); // pin 5 = data, 6 = latch, 7 = clock


void setup() {
}

void loop() {
for (int x=0; x<100; x++) {
Seven.Show(x);
delay(300);
}
}

"ContDispHex.ino"

#include <SevenDisp.h>

SevenDisp Seven(5,6,7); // pin 5 = data, 6 = latch, 7 = clock


void setup() {
Seven.Base(16); // define a base númerica como hexadecinal para o display, de 00 a FF
}

void loop() {
for (int x=0; x<256; x++) {
Seven.Show(x);
delay(300);
}
}

Arquivos para downloads: SevenDisp.rar

Exibições: 1280

Comentar

Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!

Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)

Comentário de Mauro Assis em 27 julho 2012 às 13:04

Legal, Luiz. A ideia de fazer em hexa tb foi muito boa. Eu também fiz uma biblioteca semelhante, só que para displays de 8 segmentos (ponto decimal) usando o mesmo CI: http://automatobr.blogspot.com.br/.

Tentei fazer o download do SevenDisp.rar, mas deu access denied.

Publicidade

Convide um amigo para o Lab!

 Loja Lab de Garagem

Novo!

Garagino Rev1

Por: R$ 29,00

Ou em até 6x de

R$ 5,18 

Servo - Motor Grande - 360º

Por: R$ 57,00

Ou em até 13x de

R$ 5,02

 

Starter Kit

(com Arduino Uno REV3 Original)

Por: R$  149,00

Ou em até 18x de

R$ 9,93

Kit Completo de Ferramentas - Avançado

Por: R$ 540,00

Ou em até 18x de

R$ 35,99

© 2013   Criado por Marcelo Rodrigues.

Badges  |  Relatar um incidente  |  Termos de serviço