const uint8_t segment_map[10] = {
0b00111111, // 0
0b00000110, // 1
0b01011011, // 2
0b01001111, // 3
0b01100110, // 4
0b01101101, // 5
0b01111101, // 6
0b00000111, // 7
0b01111111, // 8
0b01101111 // 9
};
void init_ports() {
DDRF = 0xFF;
DDRK = 0x0F;
PORTF = 0x00;
PORTK = 0x0F;
}
void display_digit(uint8_t digit, uint8_t position) {
PORTF = segment_map[digit];
PORTK = ~(1 << position);
_delay_ms(2);
PORTK = 0x0F;
}
void display_number(uint8_t digits[4]) {
display_digit(digits[3], 0);
display_digit(digits[2], 1);
display_digit(digits[1], 2);
display_digit(digits[0], 3);
}
void increment_odo(uint8_t digits[4]) {
digits[0]++;
if (digits[0] > 9) {
digits[0] = 0;
digits[1]++;
}
if (digits[1] > 9) {
digits[1] = 0;
digits[2]++;
}
if (digits[2] > 9) {
digits[2] = 0;
digits[3]++;
}
if (digits[3] > 9) {
digits[3] = 0;
}
}
int main(void) {
init_ports();
uint8_t odo[4] = {0, 0, 0, 0};
while (1) {
for (uint16_t i = 0; i < 1; i++) {
display_number(odo);
_delay_ms(1);
}
increment_odo(odo);
_delay_ms(100);
}
return 0;
}