#include <Arduino.h>
// Define registers (adjust these based on your hardware)
#define PORTF 0x30 // Output for the 7-segment display
#define PORTK 0x107 // Input for switches
#define OUTF 0x31 // Output register for PORTF
#define INK 0x106 // Input register for PORTK
const char ssd[10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
void setup() {
*(volatile char*)PORTF = 0xFF;
*(volatile char*)PORTK = 0x00;
}
void loop() {
int digits[4] = {0, 0, 0, 0};
int sum = 0;
for (int i = 0; i < 4; i++) {
bool digitEntered = false;
while (!digitEntered) {
char switchState = *(volatile char*)INK;
for (int j = 0; j < 8; j++) {
if (switchState & (1 << j)) {
digits[i] = j;
*(volatile char*)OUTF = ssd[j];
delay(1000);
digitEntered = true;
break;
}
}
}
while (*(volatile char*)INK > 0);
}
for (int i = 0; i < 4; i++) {
sum += digits[i];
}
while (sum > 9) {
int tempSum = 0;
while (sum > 0) {
tempSum += sum % 10;
sum /= 10;
}
sum = tempSum;
}
*(volatile char*)OUTF = ssd[sum];
delay(3000);
*(volatile char*)OUTF = 0x00;
delay(500);
}