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: 5381

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 Carlos Candido Sabino em 13 agosto 2015 às 19:31

acesso negado na biblioteca 

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.

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço