找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 771|回复: 0
收起左侧

关于点阵屏滚动单片机C语言函数理解

[复制链接]
ID:978416 发表于 2023-7-2 21:44 | 显示全部楼层 |阅读模式
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);


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

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表