const byte SEG_PIN[3] = {15, 2, 16}; // 3-digit selection pins (common anode control)
byte Data[3] = {0, 0, 0};
const byte dataPin = 21; // 74HC595 SER
const byte latchPin = 22; // 74HC595 RCLK
const byte clockPin = 23; // 74HC595 SRCLK
// 7-segment codes for numbers 0–9 (common anode, active LOW)
const byte LEDs[10] = {0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6};
// -------------------------------------------------------------------------------
void setup() {
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
for (byte i=0; i<3; i++) {
pinMode(SEG_PIN[i], OUTPUT);
}
}
// -------------------------------------------------------------------------------
void loop() {
for (int i=0; i<1000; i++) { // 000–999 loop
show(i);
delay(100); // 0.1 second per number
}
}
// -------------------------------------------------------------------------------
void show(int number) {
Data[0] = number % 10; // Units
Data[1] = (number / 10) % 10; // Tens
Data[2] = (number / 100) % 10;// Hundreds
for (byte i=0; i<3; i++) {
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, LEDs[Data[i]]);
digitalWrite(latchPin, HIGH);
digitalWrite(SEG_PIN[i], LOW); // Enable digit (common anode LOW)
delay(5); // Multiplexing delay
// Turn off all digits
for (byte j=0; j<3; j++)
digitalWrite(SEG_PIN[j], HIGH);
}
}