/*-----------------------------------------------------
Estudo de Componente
CI 74HC595 - Registrador de deslocamento de bit
> Contagem com displays de 7 segmentos
11.05.2024
by.: LOSR | <Pedra_Lascada></pL>
-------------------------------------------------------*/
// -------------- Definição de Hardware ---------------//
// Chip 74HC595
#define data 9 // Pino DS
#define clk 10 // Pino Clock "SHCP"
#define latch 11 // Pino Latch "STCP"
// ------------- Declarão das Variáveis ---------------//
// Contagem
int un = 0; // Unidades
int dez = 0; // Dezenas
int cent = 0; // Centenas
int tempoDelay = 100; // Delay em microsegundos
// Números do display de 7 Segmentos
int num[] = {
// Disposição dos bits = A B C D E F G -
0b11111100, // num 0 = 1 1 1 1 1 1 0 0
0b01100000, // num 1 = 0 1 1 0 0 0 0 0
0b11011010, // num 2 = 1 1 0 1 1 0 1 0
0b11110010, // num 3 = 1 1 1 1 0 0 1 0
0b01100110, // num 4 = 0 1 1 0 0 1 1 0
0b10110110, // num 5 = 1 0 1 1 0 1 1 0
0b10111110, // num 6 = 1 0 1 1 1 1 1 0
0b11100000, // num 7 = 1 1 1 0 0 0 0 0
0b11111110, // num 8 = 1 1 1 1 1 1 1 0
0b11100110 // num 9 = 1 1 1 0 0 1 1 0
};
// -------------------- SETUP ----------------------//
void setup() {
// Definindo todos os pinos do 74HC595 como sáida
pinMode(data, OUTPUT);
pinMode(clk, OUTPUT);
pinMode(latch, OUTPUT);
}
// -------------------- LOOP -----------------------//
void loop() {
contagem();
displays();
}
// ------------------- FUNÇÕES ---------------------//
// Contagem
void contagem(){
// Se o valor das unidades chegar a 10, então:
if(un >= 10){
un = 0; // Unidade volta a ser 0
dez++; // Acrescenta 1 à casa da dezena
// Se o valor das dezenas chegar a 10, então:
if(dez >= 10){
dez = 0; // Dezena volta a ser 0
cent++; // Acresenta 1 à casa das centenas
// Se o valor das centenas chegar a 10, então
if(cent >= 10) cent = 0; // Centena volta a ser 0
}
// obs.: Contagem pode chegar até 999
}
delay(tempoDelay); // delay
un++; // Unidade + 1
}
// Exibir valores no display
void displays(){
digitalWrite(latch, LOW); // Desativa latch
shiftOut(data, clk, LSBFIRST, num[un]); // Envia o valor das unidades ao 1° chip
shiftOut(data, clk, LSBFIRST, num[dez]); // Envia o valor das dezenas ao 2° chip
shiftOut(data, clk, LSBFIRST, num[cent]); // Envia o valor das centenas ao 3° chip
digitalWrite(latch, HIGH); // Ativa latch
// > Pulso para troca de valores no 74HC595
}