之前買了三個 6cm x 6cm 的MAX7219 白光LED點矩陣,把三個點矩陣串接起來並使用MaxMatrix Library做NTP時鐘,顯示都正常,所以就再加碼,買了比較小一點 4 in 1的,打算放在臥室
就在收到貨後,立馬更換,點亮了~,不過字體怎麼怪怪的,轉了90度,Google了一下,發現有MD_MAX72XX library 可以做轉向顯示,但是我已經用MaxMatrix 寫好code,不想大改了,所以只好捲起袖子,開始 trace MaxMatrix的code,看看能不能在最小幅度的修改下,達到文字旋轉90度的需求
void MaxMatrix::setColumn(byte col, byte value)
{
int xx = (col%8);
int yy = 0 ;
for (int row_i=0;row_i<8;row_i++){
yy = (col/8)*8+row_i;
setDot(xx, yy, bitRead(value, row_i));
}
}
void MaxMatrix::setDot(byte col, byte row, byte value)
{
int yy = 7-(col%8);
int xx = (col/8)*8+row;
bitWrite(buffer[xx], yy, value);
int n = xx / 8;
int c = (xx % 8);
digitalWrite(load, LOW);
for (int i=0; i<num; i++)
{
if (i == n)
{
shiftOut(data, clock, MSBFIRST, c + 1);
shiftOut(data, clock, MSBFIRST, buffer[xx]);
}
else
{
shiftOut(data, clock, MSBFIRST, 0);
shiftOut(data, clock, MSBFIRST, 0);
}
}
digitalWrite(load, LOW);
digitalWrite(load, HIGH);
}
void MaxMatrix::writeSprite(int x, int y, const byte* sprite)
{
int w = sprite[0];
int h = sprite[1];
for (int i=0; i<w; i++){
for (int j=0; j<h; j++)
{
int c = x + i;
int r = y + j;
if (c>=0 && c<80 && r>=0 && r<8)
setDot(c, r, bitRead(sprite[i+2], j));
}
}
}
修改完結果如下,可正常顯示,但Scroll 移動的部分就沒有修改,所以若要捲動的話顯示會出問題的,這部份等有空再來改了
