165 lines
4.0 KiB
C++
165 lines
4.0 KiB
C++
#include "CL56.h"
|
|
|
|
DualCl56::DualCl56(ShiftReg<16>* shiftReg):
|
|
_shiftReg(shiftReg)
|
|
{
|
|
|
|
}
|
|
|
|
void DualCl56::tick()
|
|
{
|
|
++_currentLit;
|
|
if(_currentLit > 7)_currentLit = 0;
|
|
unsigned char bits[2] = {0b10000000>>_currentLit, ~(_segments[_currentLit])};
|
|
_shiftReg->write(reinterpret_cast<unsigned char*>(&bits));
|
|
}
|
|
|
|
void DualCl56::setString(const char string[], const uint8_t dp)
|
|
{
|
|
uint_fast8_t i = 0;
|
|
for(; i < 8 && string[i] != '\0'; i++)
|
|
{
|
|
switch (string[i])
|
|
{
|
|
case '\0':
|
|
case '\n':
|
|
case ' ':
|
|
_segments[i] = 0;
|
|
break;
|
|
case '0':
|
|
_segments[i] = ZERO;
|
|
break;
|
|
case '1':
|
|
_segments[i] = ONE;
|
|
break;
|
|
case '2':
|
|
_segments[i] = TOW;
|
|
break;
|
|
case '3':
|
|
_segments[i] = THREE;
|
|
break;
|
|
case '4':
|
|
_segments[i] = FOUR;
|
|
break;
|
|
case '5':
|
|
_segments[i] = FIVE;
|
|
break;
|
|
case '6':
|
|
_segments[i] = SIX;
|
|
break;
|
|
case '7':
|
|
_segments[i] = SEVEN;
|
|
break;
|
|
|
|
case '8':
|
|
_segments[i] = EIGT;
|
|
break;
|
|
|
|
case '9':
|
|
_segments[i] = NINE;
|
|
break;
|
|
case 'a':
|
|
case 'A':
|
|
_segments[i] = SIGA;
|
|
break;
|
|
case 'b':
|
|
case 'B':
|
|
_segments[i] = SIGB;
|
|
break;
|
|
case 'c':
|
|
_segments[i] = SIGc;
|
|
break;
|
|
case 'C':
|
|
_segments[i] = SIGC;
|
|
break;
|
|
case 'd':
|
|
case 'D':
|
|
_segments[i] = SIGD;
|
|
break;
|
|
case 'e':
|
|
case 'E':
|
|
_segments[i] = SIGE;
|
|
break;
|
|
case 'f':
|
|
case 'F':
|
|
_segments[i] = SIGF;
|
|
break;
|
|
case 'g':
|
|
case 'G':
|
|
_segments[i] = SIGG;
|
|
break;
|
|
case 'h':
|
|
_segments[i] = SIGh;
|
|
break;
|
|
case 'H':
|
|
_segments[i] = SIGH;
|
|
break;
|
|
case 'i':
|
|
case 'I':
|
|
_segments[i] = SIGI;
|
|
break;
|
|
case 'j':
|
|
case 'J':
|
|
_segments[i] = SIGJ;
|
|
break;
|
|
case 'l':
|
|
_segments[i] = SIGl;
|
|
break;
|
|
case 'L':
|
|
_segments[i] = SIGL;
|
|
break;
|
|
case 'n':
|
|
case 'N':
|
|
_segments[i] = SIGN;
|
|
break;
|
|
case 'o':
|
|
_segments[i] = SIGo;
|
|
break;
|
|
case 'O':
|
|
_segments[i] = SIGO;
|
|
break;
|
|
case 'p':
|
|
case 'P':
|
|
_segments[i] = SIGP;
|
|
break;
|
|
case 'r':
|
|
case 'R':
|
|
_segments[i] = SIGR;
|
|
break;
|
|
case 's':
|
|
case 'S':
|
|
_segments[i] = SIGS;
|
|
break;
|
|
case 't':
|
|
case 'T':
|
|
_segments[i] = SIGT;
|
|
break;
|
|
case 'u':
|
|
case 'U':
|
|
_segments[i] = SIGU;
|
|
break;
|
|
case 'v':
|
|
case 'V':
|
|
_segments[i] = SIGV;
|
|
break;
|
|
case 'x':
|
|
case 'X':
|
|
_segments[i] = SIGX;
|
|
break;
|
|
case 'y':
|
|
case 'Y':
|
|
_segments[i] = SIGY;
|
|
break;
|
|
case '-':
|
|
_segments[i] = MINUS;
|
|
break;
|
|
|
|
default:
|
|
_segments[i] = INVLD;
|
|
break;
|
|
}
|
|
if( (1 << i) & dp ) _segments[i] |= 1;
|
|
}
|
|
if(string[i] == '\0') for(; i < 8; i++) _segments[i]&=SEG_DP;
|
|
}
|