单片机上的动态数码管
动态数码管:用“轮班制”骗过你的眼睛
一句话讲透:
动态数码管 = 多个灯“轮着亮”,亮得飞快 → 你眼花 → 以为全亮了
本质是:用“时间”换“硬件”,
花小钱,办大事。
🧩 一、先看单个数码管怎么亮?
一个数码管 = 8个小LED灯(a~g段 + 小数点)
想显示“5”?→ 只点亮组成“5”的那几段(a, f, g, c, d)✅ 这个控制“亮哪几段”的过程,叫 “段选”
🔧 类比:
就像拼图,你想拼“5”,就只放那几块亮的。
🧱 二、多个数码管怎么不“串灯”?
问题:如果两个数码管共用“段选线”,
你一通电,俩都亮,显示一样,没法显示“12”!
✅ 解法:给每个数码管加一个“开关”——叫 “位选”
- 想让第1个亮?→ 打开它的“开关”(位选),其他关
- 想让第2个亮?→ 打开它的“开关”,其他关
🔧 类比:
就像一排教室,每个教室有灯(段选)和门(位选)
你只开3号教室的门,再开灯 → 只有3号亮
⚡ 三、动态显示:快到让你“眼花”
想显示“12”?做法:
| 步骤 | 操作 | 结果 |
|---|---|---|
| 1 | 打开第1个位选,送“1”的段码 | 第1个亮,显示“1” |
| 2 | 关第1个,开第2个,送“2”的段码 | 第2个亮,显示“2” |
| 3 | 以 每秒100次 的速度重复 | 人眼看不出切换 |
✅ 视觉暂留:
人眼反应慢,画面变化快于 1/24秒 就看成“连续”
→ 你看到的不是“轮着亮”,而是“一起亮”!
🔥 核心:
不是“一起亮”,是“轮着亮,亮得快”,
用“时间分片”骗过眼睛。
🤔 为什么不能直接“同时亮”?
看上去简单:每个数码管单独控制 → 亮度高、不闪烁
但现实是:硬件根本撑不住!
❌ 直接同时亮:太烧钱!
| 数码管数 | 段选线(控制显示) | 位选线(控制谁亮) | 总线数 |
|---|---|---|---|
| 1个 | 8 | 1 | 9 |
| 2个 | 16(各自独立) | 0 | 16 |
| 3个 | 24 | 0 | 24 |
→ 3个数码管就要24根IO线!
单片机总共才20~40个脚,不够用!
✅ 动态显示:省到极致!
| 数码管数 | 段选线(共用) | 位选线(每个多1根) | 总线数 |
|---|---|---|---|
| 1个 | 8 | 1 | 9 |
| 2个 | 8(共用) | 2 | 10 |
| 3个 | 8(共用) | 3 | 11 |
| 8个 | 8(共用) | 8 | 16 |
| 10个 | 8(共用) | 10 | 18 |
✅ 省了多少?
10个数码管:
- 直接亮:80根线
- 动态显示:18根线
→ 省了62根!
🔧 本质:
用“时间”换“空间”
→ 用“快速切换”代替“大量硬件”
✅ 小白总结:三句话记住
- “段选”控制“显示啥”,“位选”控制“谁亮”
- 动态显示 = 轮着亮,快到你看不出
- 不是不能同时亮,是“太费线,不划算”
记住口诀:
“共用段选,单独位选,
轮流上岗,眼花以为全亮!”
下次你看到数码管显示“1234”,
别以为它们一起亮,
其实是:1亮 → 2亮 → 3亮 → 4亮 → 回头再1亮……
快得你根本追不上! ⚡👀
