int latch = 3; // 74HC595 pin 9 STCP
int clock = 4; // 74HC595 pin 10 SHCP
int data = 2; // 74HC595 pin 8 DS
unsigned char table[] =
{0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f,
0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71, 0x00}; // Display digital data
const int nbrDigits = 4; // Number of digits in the LED display
const int digitPins[nbrDigits] = {5, 6, 7, 8};
int counter = 0; // Initialize counter
void setup() {
// Configuring output pins for the 74HC595
pinMode(latch, OUTPUT);
pinMode(clock, OUTPUT);
pinMode(data, OUTPUT);
// Configuring output pins for common cathode of each 7-segment digit
for (int i = 0; i < nbrDigits; i++) {
pinMode(digitPins[i], OUTPUT);
digitalWrite(digitPins[i], HIGH);
}
}
void loop() {
for (int i = 0; i < 100; i++) { // Increase refresh rate
DisplayNumber(counter);
}
counter++;
if (counter > 9999) {
counter = 0; // Reset counter after reaching 9999
}
delay(10); // Small delay to slow down counter incrementing
}
// Function to display a number on a 4-digit 7-segment display
void DisplayNumber(int number) {
if (number == 0) {
DisplayDigit(0, nbrDigits - 1); // Display 0 in the rightmost digit
} else {
for (int digit = nbrDigits - 1; digit >= 0; digit--) {
if (number > 0) {
DisplayDigit(number % 10, digit);
number = number / 10;
}
}
}
}
// Function to display one digit on a 7-segment display
void DisplayDigit(unsigned char num, int digit) {
digitalWrite(latch, LOW);
shiftOut(data, clock, MSBFIRST, table[num]);
digitalWrite(latch, HIGH);
digitalWrite(digitPins[digit], LOW);
delay(10); // Reduce delay to increase refresh rate
digitalWrite(digitPins[digit], HIGH);
}