|
uint8_t val[BLOCKS];
uint8_t character_len = sizeof(table1) / 8;
// pos:點(diǎn)陣右沿對(duì)應(yīng)的val數(shù)組元素編號(hào). 因?yàn)橐獰o縫滾屏, 用右沿做求余不會(huì)產(chǎn)生跳變
// lpos: 點(diǎn)陣左沿對(duì)應(yīng)的val數(shù)組元素編號(hào), 每次根據(jù)點(diǎn)陣右沿和點(diǎn)陣寬度計(jì)算得到
uint16_t pos = 0, lpos = 0;
// cpos: 點(diǎn)陣左沿對(duì)應(yīng)的文字編號(hào)
// bpos: 在這個(gè)文字中, 當(dāng)前移動(dòng)到第幾個(gè)bit, 值從0-7
uint8_t i, j, cpos = 0, bpos = 0, tcpos = 0;
lpos = pos + sizeof(table1) - BLOCKS * 8;
cpos = lpos / 8; // 第幾個(gè)字
bpos = lpos % 8; // 字的第幾個(gè)bit
for (i = 0; i < 8; i++) // 對(duì)每一行, 對(duì)val的每個(gè)元素賦值
{
// 從第cpos個(gè)字的bpos位開始, 填滿每個(gè)點(diǎn)陣對(duì)應(yīng)的byte
for (j = 0; j < BLOCKS; j++)
{
// 高位部分
tcpos = (cpos + j) % character_len;
val[j] = table1[tcpos * 8 + i] << bpos;
// 低位部分
tcpos = (cpos + j + 1) % character_len;
val[j] |= table1[tcpos * 8 + i] >> (8 - bpos);
}
// 地址1-8 共幾塊 寫入數(shù)據(jù)
Max7219_multiWrite(i+1, BLOCKS, val);
}
// 每處理完一屏, pos右移一位
pos = (pos + 1) % sizeof(table1);
HAL_Delay(70);
這段程序看了好久沒看懂,各位有沒有理解的麻煩給講一下每段的意思
|
|