// 4 x 7 digit LED display control - no interrupt const int8_t numbers [10] = {20, 215, 76, 69, 135, 37, 36, 87, 4, 5}; volatile uint8_t Digit_X000, Digit_0X00, Digit_00X0, Digit_000X; // store single digits volatile uint8_t active_digit = 0; // active digit void initialize_LED_display() { DDRD = 0b11111111; DDRC = 0b00001111; } // Write number at indicated position to display void digit (uint8_t value, uint8_t pin) { PORTD = numbers[value]; // number output PORTC &= ~(1 << pin); // Low = current digit on } // distribute number to digits void number_output (uint16_t number) { Digit_X000 = number/1000; number %= 1000; Digit_0X00 = number/100; number %= 100; Digit_00X0 = number/10; number %= 10; Digit_000X = number; } void refresh() { PORTC = 0b00001111; // Digits off if(active_digit == 0) digit (Digit_000X, PC0); if(active_digit == 1) digit (Digit_00X0, PC1); if(active_digit == 2) digit (Digit_0X00, PC2); if(active_digit == 3) digit (Digit_X000, PC3); active_digit ++; if (active_digit == 4) active_digit = 0; }