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
Comentar
acesso negado na biblioteca
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.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por
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)