// Pin definitions for 74HC595
const int latchPin = 5; // Latch pin (RCLK)
const int clockPin = 6; // Clock pin (SCLK)
const int dataPin = 4; // Data pin (DS)
// Inverted segment patterns for digits 0-9 for common anode
const byte digitSegments[10] = {
B11111101, // 0
B01100000, // 1
B11011011, // 2
B11110011, // 3
B01100110, // 4
B10110111, // 5
B10111111, // 6
B11100000, // 7
B11111111, // 8
B11110111 // 9
};
byte rfs = B11111110; // Blank
byte rfd = B00000000; // Blank
int i = 0;
#define buzzer 11
#define upButton A5
#define downButton A4
#define startButton A3
void setup() {
// Set buttons as input
pinMode(upButton, INPUT);
pinMode(downButton, INPUT);
pinMode(startButton, INPUT);
// Set 74HC595 pins as output
pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
// Clear the screens
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, rfs);
shiftOut(dataPin, clockPin, MSBFIRST, rfd);
digitalWrite(latchPin, HIGH);
}
void loop() {
if ((digitalRead(upButton) == HIGH) && (i != 9999)) {
i++;
delay(50);
} else if ((digitalRead(downButton) == HIGH) && (i != 0)) {
i--;
delay(50);
}
displayNumber(i);
}
void displayNumber(int number) {
for (int digit = 0; digit < 4; digit++) {
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, digitSegments[number % 10]);
shiftOut(dataPin, clockPin, MSBFIRST, 1 << digit);
digitalWrite(latchPin, HIGH);
number /= 10;
}
}