const char digitPatterns[10] = {
0b00111111, // 0
0b00000110, // 1
0b01011011, // 2
0b01001111, // 3
0b01100110, // 4
0b01101101, // 5
0b01111101, // 6
0b00000111, // 7
0b01111111, // 8
0b01101111 // 9
};
void setup() {
// Initialize pointers
volatile char *direction_f, *output_f;
volatile char *direction_k, *input_k;
volatile long long i;
// Set direction and initialize ports
direction_k = (char*)0x107;
direction_f = (char*)0x30;
output_f = (char*)0x31;
input_k = (char*)0x106;
*direction_f = 0xff; // Set port F as output
*direction_k = 0x00; // Set port K as input
int startNumber = 0; // No valid start number initially
while (1) {
volatile int trace = *input_k;
int newStartNumber = 0;
// Determine the starting number based on which switch is pressed
if (trace & 0x01) newStartNumber = 1;
else if (trace & 0x02) newStartNumber = 2;
else if (trace & 0x04) newStartNumber = 3;
else if (trace & 0x08) newStartNumber = 4;
else if (trace & 0x10) newStartNumber = 5;
else if (trace & 0x20) newStartNumber = 6;
else if (trace & 0x40) newStartNumber = 7;
else if (trace & 0x80) newStartNumber = 8;
// Update start number if a new switch is pressed
if (newStartNumber != 0) {
startNumber = newStartNumber;
}
// Display numbers from startNumber to 9
if(startNumber !=0){
for (int num = startNumber; num <= 9; num++) {
*output_f = digitPatterns[num];
delay(500); // Adjust the delay as needed
}
}else {
*output_f = 0x00; // Clear display if no valid switch is pressed
}
}
}
void loop() {
// Empty as setup() contains the main logic
}