Files

2.8 KiB
Raw Permalink Blame History

LED 3 位数点阵显示工程(32×16)

32×16 LED 点阵显示 3 位数字的布局调整工程。

需求背景

原布局:2空 | 7亮 | 4空 | 7亮 | 4空 | 7亮 | 1空 = 32 列 (最左 2 列不亮、数字间 4 列不亮、最右 1 列不亮)

新布局:1空 | [2空 + 7亮 + 1空] ×3 | 1空 = 32 列

  • LED 最左 / 最右各留 1 列边界不亮
  • 每个数字单元固定 10 列宽:左侧 2 列不亮 + 数字 7 列 + 右侧 1 列不亮
  • 数字本体位置:列 3-9 / 13-19 / 23-29

文件说明

文件 说明
led3number.c 修改后的完整代码(可直接替换工程原文件)
led3number_original.c 修改前的原始上传版本(对照用)
led3number_sim.py Python 模拟器:复现填充+移位逻辑,可渲染 32×16 点阵图
led3number_test.c 独立 C 验证程序(gcc 编译,与模拟器输出逐列对照)
gen_led3number.py 生成脚本:从原始文件生成修改后的 led3number.c
gen_c_test.py 生成脚本:从原始文件生成 led3number_test.c

核心改动(read_code 函数内)

原移位拼接循环 → 新布局移位逻辑:

// 数字本体(区域内列2-8, 7列) → 全局列 3-9 / 13-19 / 23-29
for(i=0;i<16;i++)
{
    uint8_t s2 = code12_ram[2][i];   // 数字1 高字节
    uint8_t s3 = code12_ram[3][i];   // 数字1 低字节
    uint8_t s4 = code12_ram[4][i];   // 数字2 高字节
    uint8_t s5 = code12_ram[5][i];   // 数字2 低字节
    uint8_t s6 = code12_ram[6][i];   // 数字3 高字节
    uint8_t s7 = code12_ram[7][i];   // 数字3 低字节

    code12_ram[2][i] = (s2 >> 1) & 0x1F;                        // 数字1 → 列3-7
    code12_ram[3][i] = ((s2 & 0x01) << 7) | ((s3 >> 1) & 0x40)  // 数字1 → 列8-9
                     | ((s4 >> 3) & 0x07);                      // 数字2 → 列13-15
    code12_ram[4][i] = ((s4 & 0x07) << 5) | ((s5 & 0x80) >> 3)  // 数字2 → 列16-19
                     | ((s6 >> 5) & 0x01);                      // 数字3 → 列23
    code12_ram[5][i] = ((s6 & 0x1F) << 3) | ((s7 & 0x80) >> 5); // 数字3 → 列24-29
}

另:移除已废弃的 move_reg1/move_reg2 声明(原移位逻辑专用)。

验证方法

# 1. Python 模拟(可看 32×16 点阵图)
python3 led3number_sim.py

# 2. C 独立验证(gcc 编译,输出与模拟器逐列对照)
gcc -Wall -Wextra -O2 -o led3number_test led3number_test.c && ./led3number_test

已验证数字组合:123 / 456 / 888 / 000 / 999 / 111,布局全部正确。

注意事项

  • 协议行为未改动:显示数据流后 3 个字符(第 1 个字符被丢弃,原逻辑如此)
  • 空格字符处理未改动
  • 字库结构:每字符 16 位宽,数字本体 7 列位于区域内列 2-8,MSB 显示