day09/ex02/include/lib/segment.h
2026-04-27 15:19:51 +02:00

51 lines
1.1 KiB
C

#ifndef SEGMENT_H
#define SEGMENT_H
#include "lib/mystd.h"
typedef uint8_t segment_digit;
typedef enum {
DIGIT_NONE = 0,
DIGIT_1 = BV((0 + 4)),
DIGIT_2 = BV((1 + 4)),
DIGIT_3 = BV((2 + 4)),
DIGIT_4 = BV((3 + 4)),
DIGIT_ALL = DIGIT_1 | DIGIT_2 | DIGIT_3 | DIGIT_4,
_DIGIT_MASK = DIGIT_ALL,
} segment_mask;
typedef struct {
segment_digit digits[4];
segment_mask mask;
bool enable;
} segment_data;
#define SEG_0 (0b00111111)
#define SEG_1 (0b00000110)
#define SEG_2 (0b01011011)
#define SEG_3 (0b01001111)
#define SEG_4 (0b01100110)
#define SEG_5 (0b01101101)
#define SEG_6 (0b01111101)
#define SEG_7 (0b00000111)
#define SEG_8 (0b01111111)
#define SEG_9 (0b01101111)
#define SEG_a (BV(0))
#define SEG_b (BV(1))
#define SEG_c (BV(2))
#define SEG_d (BV(3))
#define SEG_e (BV(4))
#define SEG_f (BV(5))
#define SEG_g (BV(6))
#define SEG_dp (BV(7))
t_error segment_init(void);
t_error segment_set_digit(segment_digit data, segment_mask digit);
t_error segment_set_mask(segment_mask mask);
t_error segment_refresh_display(void);
void segment_enable(void);
void segment_disable(void);
#endif /* SEGMENT_H */