📄 一句话概括
输入用拨码开关,输出用 LED 数码管——最朴素的外设,让程序的进与出都看得见摸得着。
📝 本节和前面几节的关系
程序有了进入内存的通道,这一节把两头的外设接好:一头进(开关)、一头出(数码管)。
一、输入端:拨码开关
8 个小开关排成一排,拨上为 1、拨下为 0——正好一个字节。 它接在输入 I/O 的引脚上,占一个端口号。CPU 一句【读该端口】,8 个开关的当前状态就变成数据进了寄存器。
二、输出端:LED 数码管
数码管由 7 条发光段(a~g)组成,按不同组合点亮就显示不同数字——比如亮 a、c、d、f、g 五段就是【5】。 它接在输出 I/O 上,也占一个端口号。CPU 一句【写该端口】,写入的字节按七段码点亮对应段。
三、朴素外设的深意
别嫌寒酸:开关是输入的本质(给机器一个字节),数码管是输出的本质(机器还你一个字节)。 键盘和显示器再花哨,进了计算机也都变回这两样:一串输入字节、一串输出字节(1.4 节【一切皆数字】在此落地)。
四、动手 Demo:从拨 5 到亮 5 的完整旅程
模拟一次完整旅程:拨出 5、读进 CPU、写到端口、点亮数码管。
# 拨码 5 -> 数码管 5
SEG = {5: "1011011"} # 七段码 abcdefg
switch = 0b00000101 # 拨码开关: 5
a = switch # IN: 读入寄存器 A
out = a # OUT: 写到端口 2
print("开关:", format(switch, "08b"))
print("数码管点亮的段:", SEG[out])
实跑输出:
--------------------------------------------------------------------
接外部设备——拨码开关进、数码管出
--------------------------------------------------------------------
第二章用的外部设备简单朴素:输入用拨码开关,输出用 LED 数码管。
下面模拟一次完整旅程:拨出数字 5,看它怎么出现在数码管上:
[第 1 步] 拨码开关拨出二进制 00000101(十进制 5)
[第 2 步] 开关接到 I/O 端口 0x01(输入端口)
[第 3 步] CPU 执行 IN 指令,把端口 0x01 的值读进寄存器 A
[第 4 步] CPU 执行 OUT 指令,把 A 写到端口 0x02(数码管)
[第 5 步] 数码管按 5 的七段码(1011011)点亮对应笔画
七段码位 a b c d e f g 含义
---------------------------------------------------------------
1011011 a亮 b暗 c亮 d亮 e暗 f亮 g亮 正是数字 5 的笔画
一次拨号进、一次亮灯出——这就是本章微型计算机的全部输入输出。
五步旅程:拨开关 -> 读端口 -> 寄存器 A -> 写端口 -> 点亮段。每一步都对应一根接好的线。 【⚠️ 2026 现状】如今开发板(树莓派 Pico 等)点 LED 用的还是同一套输入输出思想,16 课树莓派课上点过的那盏灯就是它的后代。
30 秒实验
- 在纸上画出七段的 a~g,试着用 0/1 标出【8】该怎么亮(答案:全亮 1111111)。
- 把 16 课树莓派【点亮一颗 LED】的实验回想一遍——思想与本章完全同源。
常见误区
- 以为数码管认识数字——它只认七段码,是【点亮哪些段】的约定让它看起来像数字。
- 以为外设越复杂原理越不同——原理相同,复杂度都在接口芯片里。
自测三问(点开对答案)
1. 本章的输入输出设备各是什么? —— 输入=拨码开关(一次一个字节),输出=LED 数码管(七段点亮)。 2. 七段码是什么? —— 7 位 0/1 对应数码管 a~g 七段亮暗的约定。 3. 为什么说朴素外设有深意? —— 开关与数码管就是输入输出的本质——一个字节进、一个字节出。- ☐ 下一节(2.10 输入测试程序并进行调试)
相关笔记
- 🍓 树莓派 · 索引 — 点灯实验与本章同源,那边是真机版
- 输入、运算、输出是硬件的基础 — 三件套的骨架总纲
- 💻 计算机是怎样跑起来的 · 索引