Files

69 lines
2.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 函数内)
原移位拼接循环 → 新布局移位逻辑:
```c
// 数字本体(区域内列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` 声明(原移位逻辑专用)。
## 验证方法
```bash
# 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 显示