const char digitPatterns[10] = {
0b00111111, // 0
0b00000110, // 1
0b01011011, // 2
0b01001111, // 3
0b01100110, // 4
0b01101101, // 55
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
while (1) {
volatile int trace = *input_k;
if(trace & 0x40){
for(volatile int i=0;i<=9;i++){
*output_f=digitPatterns[i];
delayloop();
}
for(volatile int k=9;k>=0;k--){
*output_f=digitPatterns[k];
delayloop();
}
} else {
*output_f = 0x00; // Clear display if no valid switch is pressed
}
}
}
void delayloop(){
for (volatile long d=0;d<200000;d++);
}
void loop() {
// Empty as setup() contains the main logic
}