88 lines
3.6 KiB
C++
88 lines
3.6 KiB
C++
#pragma once
|
|
#include <stdint.h>
|
|
#include <avr/io.h>
|
|
#include "shiftreg.h"
|
|
|
|
class DualCl56
|
|
{
|
|
public:
|
|
|
|
static constexpr uint8_t SEG_A = 0b10000000;
|
|
static constexpr uint8_t SEG_B = 0b01000000;
|
|
static constexpr uint8_t SEG_C = 0b00100000;
|
|
static constexpr uint8_t SEG_D = 0b00010000;
|
|
static constexpr uint8_t SEG_E = 0b00001000;
|
|
static constexpr uint8_t SEG_F = 0b00000100;
|
|
static constexpr uint8_t SEG_G = 0b00000010;
|
|
static constexpr uint8_t SEG_DP= 0b00000001;
|
|
|
|
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;
|
|
|
|
bool _blank = false;
|
|
|
|
public:
|
|
|
|
DualCl56(ShiftReg<16>* shiftReg);
|
|
|
|
void tick();
|
|
void setBlank(bool blank);
|
|
bool getBlank();
|
|
|
|
void setString(const char* string, const uint8_t dp = 0);
|
|
void setSegments(const uint8_t segments, const uint8_t place);
|
|
};
|