给以下代码添加注释void main(void) { // pos:点阵右沿对应的val数组元素编号. 因为要无缝滚屏, 用右沿做求余不会产生跳变 // lpos: 点阵左沿对应的val数组元素编号, 每次根据点阵右沿和点阵宽度计算得到 u16 pos = 0, lpos = 0; // cpos: 点阵左沿对应的文字编号 // bpos: 在这个文字中, 当前移动到第几个bit, 值从0-7 u8 i, j, cpos = 0, bpos = 0, tcpos = 0; Max7219_init(); while(1) { lpos = pos + sizeof(bytes) - BLOCKS * 8; cpos = lpos / 8; // 第几个字 bpos = lpos % 8; // 字的第几个bit for (i = 0; i < 8; i++) // 对每一行, 对val的每个元素赋值 { // 从第cpos个字的bpos位开始, 填满每个点阵对应的byte for (j = 0; j < BLOCKS; j++) { // 高位部分 tcpos = (cpos + j) % character_len; val[j] = bytes[tcpos * 8 + i] << bpos; // 低位部分 tcpos = (cpos + j + 1) % character_len; val[j] |= bytes[tcpos * 8 + i] >> (8 - bpos); } Max7219_multiWrite(i+1, BLOCKS, val); } // 每处理完一屏, pos右移一位 pos = (pos + 1) % sizeof(bytes); delay(500); } }
时间: 2024-04-28 16:22:56 浏览: 101
js代码-//已知如下数组: //编写一个程序将数组扁平化去并除其中重复部分数据,最终得到一个升序且不重复的数组
// 该函数用于控制一个点阵屏幕显示滚动文本
// pos: 点阵右沿对应的val数组元素编号. 因为要无缝滚屏, 用右沿做求余不会产生跳变
// lpos: 点阵左沿对应的val数组元素编号, 每次根据点阵右沿和点阵宽度计算得到
// cpos: 点阵左沿对应的文字编号, 表示当前左沿显示的是哪个文字
// bpos: 在这个文字中, 当前移动到第几个bit, 值从0-7
void main(void) {
u16 pos = 0, lpos = 0; // 初始化pos和lpos
u8 i, j, cpos = 0, bpos = 0, tcpos = 0; // 初始化i, j, cpos, bpos和tcpos
Max7219_init(); // 初始化Max7219屏幕
while(1) { // 无限循环
lpos = pos + sizeof(bytes) - BLOCKS * 8; // 计算lpos
cpos = lpos / 8; // 计算cpos
bpos = lpos % 8; // 计算bpos
for (i = 0; i < 8; i++) { // 对每一行, 对val的每个元素赋值
for (j = 0; j < BLOCKS; j++) { // 遍历每个点阵
// 高位部分
tcpos = (cpos + j) % character_len; // 计算字符位置
val[j] = bytes[tcpos * 8 + i] << bpos; // 计算高位部分的数值
// 低位部分
tcpos = (cpos + j + 1) % character_len; // 计算字符位置
val[j] |= bytes[tcpos * 8 + i] >> (8 - bpos); // 计算低位部分的数值
}
Max7219_multiWrite(i+1, BLOCKS, val); // 将数值写入对应的点阵屏幕
}
pos = (pos + 1) % sizeof(bytes); // pos右移一位
delay(500); // 延时500ms
}
}
阅读全文