标题: 关于点阵屏滚动单片机C语言函数理解 [打印本页]

作者: egsresrhtrhrtst    时间: 2023-7-2 21:44
标题: 关于点阵屏滚动单片机C语言函数理解
uint8_t val[BLOCKS];
uint8_t character_len = sizeof(table1) / 8;


// pos:点阵右沿对应的val数组元素编号. 因为要无缝滚屏, 用右沿做求余不会产生跳变
  // lpos: 点阵左沿对应的val数组元素编号, 每次根据点阵右沿和点阵宽度计算得到
                uint16_t pos = 0, lpos = 0;
  // cpos: 点阵左沿对应的文字编号
  // bpos: 在这个文字中, 当前移动到第几个bit, 值从0-7
                uint8_t i, j, cpos = 0, bpos = 0, tcpos = 0;



               
               
   lpos = pos + sizeof(table1) - 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] = table1[tcpos * 8 + i] << bpos;
        // 低位部分
        tcpos = (cpos + j + 1) % character_len;
        val[j] |= table1[tcpos * 8 + i] >> (8 - bpos);
      }
                        //                                                        地址1-8   共几块  写入数据
      Max7219_multiWrite(i+1, BLOCKS, val);
    }
    // 每处理完一屏, pos右移一位
    pos = (pos + 1) % sizeof(table1);
    HAL_Delay(70);


这段程序看了好久没看懂,各位有没有理解的麻烦给讲一下每段的意思






欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1