// Define segment pins (Common Cathode)
const int segmentPins[] = {22, 23, 24, 25, 26, 27, 28, 29};
const int digitSelectPins[] = {30, 31}; // Left (Tens) and Right (Ones) Display
// 7-segment encoding for 0-9 (Common Cathode)
const byte digitPatterns[] = {
0b00111111, // 0
0b00000110, // 1
0b01011011, // 2
0b01001111, // 3
0b01100110, // 4
0b01101101, // 5
0b01111101, // 6
0b00000111, // 7
0b01111111, // 8
0b01101111 // 9
};
void setup() {
// Set segment pins as OUTPUT
for (int i = 0; i < 8; i++) {
pinMode(segmentPins[i], OUTPUT);
}
// Set digit select pins as OUTPUT
pinMode(digitSelectPins[0], OUTPUT);
pinMode(digitSelectPins[1], OUTPUT);
}
void loop() {
int tens, ones;
while (1) { // Infinite loop to cycle from 00 to 99
for (tens = 0; tens <= 9; tens++) { // Loop for tens digit (Left Display)
for (ones = 0; ones <= 9; ones++) { // Loop for ones digit (Right Display)
for (int i = 0; i < 50; i++) { // Multiplexing refresh loop
// Activate Left Display (Tens place)
digitalWrite(digitSelectPins[0], HIGH);
digitalWrite(digitSelectPins[1], LOW);
for (int j = 0; j < 8; j++) {
digitalWrite(segmentPins[j], (digitPatterns[tens] >> j) & 0x01);
}
delay(5); // Small delay for persistence of vision
// Activate Right Display (Ones place)
digitalWrite(digitSelectPins[0], LOW);
digitalWrite(digitSelectPins[1], HIGH);
for (int j = 0; j < 8; j++) {
digitalWrite(segmentPins[j], (digitPatterns[ones] >> j) & 0x01);
}
delay(5); // Small delay for persistence of vision
}
}
}
}
}