#pragma once #include #include #include "shiftreg.h" #define SEG_A 0b10000000 #define SEG_B 0b01000000 #define SEG_C 0b00100000 #define SEG_D 0b00010000 #define SEG_E 0b00001000 #define SEG_F 0b00000100 #define SEG_G 0b00000010 #define SEG_DP 0b00000001 class DualCl56 { public: static constexpr uint8_t COLEN_A = 0b00000010; static constexpr uint8_t COLEN_B = 0b00100000; static constexpr uint8_t DP_A = 0b00000000; static constexpr uint8_t DP_B = 0b00000001; static constexpr uint8_t DP_C = 0b00000100; static constexpr uint8_t DP_D = 0b00001000; static constexpr uint8_t DP_E = 0b00000000; static constexpr uint8_t DP_F = 0b00010000; static constexpr uint8_t DP_G = 0b01000000; static constexpr uint8_t DP_H = 0b10000000; private: static constexpr uint8_t ZERO = SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F; static constexpr uint8_t ONE = SEG_B | SEG_C; static constexpr uint8_t TOW = SEG_A | SEG_B | SEG_G | SEG_E | SEG_D; static constexpr uint8_t THREE = SEG_A | SEG_B | SEG_C | SEG_D | SEG_G; static constexpr uint8_t FOUR = SEG_B | SEG_C | SEG_F | SEG_G; static constexpr uint8_t FIVE =SEG_A | SEG_C | SEG_D | SEG_F | SEG_G; static constexpr uint8_t SIX = SEG_A | SEG_C | SEG_D | SEG_E | SEG_F | SEG_G; static constexpr uint8_t SEVEN= SEG_A | SEG_B | SEG_C; static constexpr uint8_t EIGT = SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F | SEG_G; static constexpr uint8_t NINE = SEG_A | SEG_B | SEG_C | SEG_D | SEG_F | SEG_G; static constexpr uint8_t MINUS = SEG_G; static constexpr uint8_t SIGA = SEG_A | SEG_B | SEG_C | SEG_E | SEG_F | SEG_G; static constexpr uint8_t SIGB = SEG_F | SEG_E | SEG_D | SEG_C | SEG_G; static constexpr uint8_t SIGC = SEG_A | SEG_D | SEG_E | SEG_F; static constexpr uint8_t SIGc = SEG_G | SEG_D | SEG_E; static constexpr uint8_t SIGD = SEG_B | SEG_C | SEG_D | SEG_G | SEG_E; static constexpr uint8_t SIGE = SEG_A | SEG_D | SEG_E | SEG_F | SEG_G; static constexpr uint8_t SIGF = SEG_A | SEG_E | SEG_F | SEG_G; static constexpr uint8_t SIGG = NINE; static constexpr uint8_t SIGH = SEG_B | SEG_C | SEG_E | SEG_F | SEG_G; static constexpr uint8_t SIGh = SEG_D | SEG_C | SEG_E | SEG_F | SEG_G; static constexpr uint8_t SIGI = SEG_E; static constexpr uint8_t SIGJ = SEG_B | SEG_C | SEG_D; static constexpr uint8_t SIGL = SEG_F | SEG_E | SEG_D; static constexpr uint8_t SIGl = SEG_F | SEG_E; static constexpr uint8_t SIGN = SEG_C | SEG_E | SEG_G; static constexpr uint8_t SIGO = ZERO; static constexpr uint8_t SIGo = SEG_E | SEG_G | SEG_C | SEG_D; static constexpr uint8_t SIGP = SEG_A | SEG_B | SEG_G | SEG_F | SEG_E; static constexpr uint8_t SIGR = SEG_G | SEG_E; static constexpr uint8_t SIGS = SEG_A | SEG_C | SEG_D | SEG_F | SEG_G; static constexpr uint8_t SIGT = SEG_F | SEG_E | SEG_C | SEG_D; static constexpr uint8_t SIGU = SEG_B | SEG_C | SEG_D | SEG_E | SEG_F; static constexpr uint8_t SIGV = SIGU; static constexpr uint8_t SIGX = SIGH; static constexpr uint8_t SIGY = SEG_F | SEG_B | SEG_G | SEG_E; static constexpr uint8_t INVLD = SEG_A | SEG_D; uint8_t _currentLit = 0; uint8_t _segments[8] = {SEG_A, SEG_B, SEG_C, SEG_D, SEG_E, SEG_G, SEG_DP, FIVE}; ShiftReg<16>* _shiftReg; public: DualCl56(ShiftReg<16>* shiftReg); void tick(); void setString(const char* string, const uint8_t dp = 0); };