#define DATA_PIN 8 // Pin connected to DS of 74HC595
#define LATCH_PIN 9 // Pin connected to STCP of 74HC595
#define CLOCK_PIN 10 // Pin connected to SHCP of 74HC595
// How many of the shift registers
#define NUM_SHIFT_REGS 3
const uint8_t numOfRegisterPins = NUM_SHIFT_REGS * 8;
bool registers[numOfRegisterPins];
void setup() {
pinMode(DATA_PIN, OUTPUT);
pinMode(CLOCK_PIN, OUTPUT);
pinMode(LATCH_PIN, OUTPUT);
clearRegisters();
writeRegisters();
}
unsigned int seconds = 0;
unsigned int minutes = 0;
void loop() {
unsigned int tens = seconds / 10;
unsigned int nums = seconds - tens * 10;
for (uint8_t i = 0; i < 10; i++) {
if (i == nums) {
setRegisterPin(i, true);
} else {
setRegisterPin(i, false);
}
}
for (uint8_t i = 10; i < 16; i++) {
if (i - 10 == tens) {
setRegisterPin(i, true);
} else {
setRegisterPin(i, false);
}
}
for (uint8_t i = 16; i < 22; i++) {
if (i - 16 == minutes) {
setRegisterPin(i, true);
} else {
setRegisterPin(i, false);
}
}
writeRegisters();
delay(1000);
seconds++;
if (seconds >= 60) {
seconds = 0;
minutes++;
if (minutes >= 10) {
minutes = 0;
}
}
}
void clearRegisters() {
// Reset all register pins
for (int i = numOfRegisterPins - 1; i >= 0; i--) {
registers[i] = LOW;
}
}
void setRegisterPin(int index, int value) {
// Set an individual pin HIGH or LOW
registers[index] = value;
}
void writeRegisters() {
// Set and display registers
digitalWrite(LATCH_PIN, LOW);
for (int i = numOfRegisterPins - 1; i >= 0; i--) {
digitalWrite(CLOCK_PIN, LOW);
digitalWrite(DATA_PIN, registers[i]);
digitalWrite(CLOCK_PIN, HIGH);
}
digitalWrite(LATCH_PIN, HIGH);
}