max-7seg-clock/src/disp.cpp

30 lines
595 B
C++

#include "disp.h"
byte buffer[7]; // "width,height,data[5]" single character buffer.
unsigned char reverse(unsigned char b) {
b = (b & 0xF0) >> 4 | (b & 0x0F) << 4;
b = (b & 0xCC) >> 2 | (b & 0x33) << 2;
b = (b & 0xAA) >> 1 | (b & 0x55) << 1;
return b;
}
void printCharOffset(char c, int offset, LedControl lc)
{
if (c < 32)
return;
c -= 32;
memcpy_P(buffer, CH + 7 * c, 7);
for (int i = 0; i <= buffer[0]; i++)
{
lc.setRow(0, i+offset, reverse(buffer[i + 2]));
}
}
void printChar(char c, LedControl lc)
{
printCharOffset(c,2,lc);
}