diff options
Diffstat (limited to 'src/display.h')
| -rw-r--r-- | src/display.h | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/src/display.h b/src/display.h index 5c03ee4..c410731 100644 --- a/src/display.h +++ b/src/display.h @@ -2,11 +2,41 @@ #define _LOADED_DISPLAY #include <stdint.h> +// "_gfedcba" +// Reversed because a-g is mapped to pa0-6. (pa7 is decimal) +// Complemented because display is common anode +static const uint32_t digit_masks[] = { + 0b1000000, 0b1111001, 0b0100100, 0b0110000, 0b0011001, + 0b0010010, 0b0000010, 0b1111000, 0b0000000, 0b0010000, +}; + volatile extern uint8_t current_digit; void display_setup(void); -void write_time(uint16_t hour, uint16_t minute, uint8_t digit_mask); +static inline uint32_t get_digit_mask(uint8_t digit) { + return digit_masks[digit % 10]; +} + +static inline uint8_t get_digit(uint16_t hour, uint16_t minute, + uint8_t digit_index) { + // TODO: use hour + // uint8_t hour_digit1 = hour % 10; + // uint8_t hour_digit2 = (hour / 10) % 10; + switch (digit_index) { + case 0: + return minute % 10; + case 1: + return (minute / 10) % 10; + case 2: + return (minute % 10) + 1; + case 3: + return ((minute / 10) % 10) + 1; + } + return 0; +} + +void write_time(uint16_t hour, uint16_t minute, uint8_t digit_index); void display_render(void); |
