#define DATA_PIN 13
#define STORAGE_PIN 12
#define CLOCK_PIN 11
int segments[] = {
1 << 1, // top mid
1 << 2, // top right
1 << 5, // bot right
1 << 6, // bot mid
1 << 7, // bot left
1 << 4, // top left
1 << 3, // mid mid
};
int digits[] = {
segments[0] | segments[1] | segments[2] | segments[3] | segments[4] | segments[5], // 0
segments[1] | segments[2], // 1
segments[0] | segments[1] | segments[6] | segments[4] | segments[3], // 2
segments[0] | segments[1] | segments[2] | segments[3] | segments[6], // 3
segments[1] | segments[2] | segments[5] | segments[6], // 4
segments[0] | segments[2] | segments[3] | segments[5] | segments[6], // 5
segments[0] | segments[2] | segments[3] | segments[4] | segments[5] | segments[6], // 6
segments[0] | segments[1] | segments[2], // 7
segments[0] | segments[1] | segments[2] | segments[3] | segments[4] | segments[5] | segments[6], // 8
segments[0] | segments[1] | segments[2] | segments[3] | segments[5] | segments[6], // 9
};
void setup() {
pinMode(DATA_PIN, OUTPUT);
pinMode(STORAGE_PIN, OUTPUT);
pinMode(CLOCK_PIN, OUTPUT);
}
#define print(left, right) do { \
shiftOut(DATA_PIN, CLOCK_PIN, MSBFIRST, digits[right]); \
shiftOut(DATA_PIN, CLOCK_PIN, MSBFIRST, digits[left]); \
digitalWrite(STORAGE_PIN, LOW); \
digitalWrite(STORAGE_PIN, HIGH); \
} while(false)
void loop() {
for (int i = 99; i >= 0; i--) {
print(i / 10, i % 10);
delay(500);
}
}