// -------- DIP SWITCH PINS (6 BIT) -------- const int dipPins[6] = {A0, A1, A2, A3, A4, A5}; // -------- SEGMENT PINS (a b c d e f g) -------- const int segPins[7] = {2, 3, 4, 5, 6, 7, 8}; // -------- DIGIT ENABLE PINS -------- const int digitPins[4] = {9, 10, 11, 12}; // Segment patterns for COMMON CATHODE const byte numbers[10][7] = { {1,1,1,1,1,1,0}, // 0 {0,1,1,0,0,0,0}, // 1 {1,1,0,1,1,0,1}, // 2 {1,1,1,1,0,0,1}, // 3 {0,1,1,0,0,1,1}, // 4 {1,0,1,1,0,1,1}, // 5 {1,0,1,1,1,1,1}, // 6 {1,1,1,0,0,0,0}, // 7 {1,1,1,1,1,1,1}, // 8 {1,1,1,1,0,1,1} // 9 }; void setup() { // DIP switches for (int i = 0; i < 6; i++) { pinMode(dipPins[i], INPUT_PULLUP); } // Segment pins for (int i = 0; i < 7; i++) { pinMode(segPins[i], OUTPUT); } // Digit pins for (int i = 0; i < 4; i++) { pinMode(digitPins[i], OUTPUT); } } void loop() { int value = readDipSwitch(); // 0–63 displayNumber(value); } // -------- READ 6-BIT DIP SWITCH -------- int readDipSwitch() { int val = 0; for (int i = 0; i < 6; i++) { if (digitalRead(dipPins[i]) == LOW) { val |= (1 << i); } } return val; } // -------- DISPLAY NUMBER (MULTIPLEXED) -------- void displayNumber(int num) { int digits[4]; digits[0] = num / 1000; digits[1] = (num / 100) % 10; digits[2] = (num / 10) % 10; digits[3] = num % 10; for (int i = 0; i < 4; i++) { digitalWrite(digitPins[i], LOW); // enable digit showDigit(digits[i]); delay(3); digitalWrite(digitPins[i], HIGH); // disable digit } } // -------- SHOW ONE DIGIT -------- void showDigit(int num) { if (num > 9) num = 0; for (int i = 0; i < 7; i++) { digitalWrite(segPins[i], numbers[num][i]); } }