#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(&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; }