1.计算机组成
(只要包含这些部件,就可以构成一台计算机)计算机的组成:控制器、运算器、存储器(内存和外存)、输出设备、输入设备。

2.最小系统
最小系统是指能够让单片机正常工作所需要的最少器件组合。
晶振:控制单片机的运行频率和节拍。
CPU:Central Processing Unit,中央处理器,负责完成数据运算和指令执行。
MCU:Micro Controller Unit,微控制器,集成度高,将所有的功能集成到同一块芯片中,成本低。
GPU:图像处理器,负责图形处理。
NPU:神经网络处理器,用于 AI 推理加速。
FPU:浮点数运算单元,负责完成浮点数运算。
SoC:片上系统,将多个功能芯片集成在一块芯片上(体积小、功耗低)。
存储器的一些概念
内存:存放程序运行时的变量,掉电数据丢失,读写速度快。
外存:存放代码指令,掉电数据不丢失,价格相对便宜。
3.CPU 与 RAM 交互的三大总线
RAM:随机访问存储器,存放单片机运行过程中的变量。
ROM:只读存储器,存放程序运行中不变的代码和常量。
CPU 与 RAM 交互依赖三大总线:
-
地址总线,一共有 8 根:CPU 通过地址总线寻找 RAM 中的变量地址,2^8 = 256(方向是单向的,CPU → RAM)。
-
数据总线,一共有 8 根:CPU 与 RAM 进行数据交换传输(可以双向传输)。
-
控制总线,一共有 8 根:负责传输控制信号,协调读写操作。
下面是我在运行代码时 CPU 与 RAM 进行数据交换的过程(通过三大总线进行控制操作):

外设寄存器:能够操作硬件,具有固定的地址空间。
比如说,这里我用的是 P2 系列寄存器。连接电源的一方是共阳极,GND 连接的一边是共阴极。

位运算:在单片机中进行点灯与灭灯操作就需要用到这一点。
下面我通过几个例子来讲解常用的位运算符:
1. | 按位或:将两个二进制数对应位进行比较,如果全为 0,则结果为 0;如果有一个 bit 为 1,则结果为 1。
2. & 按位与:将两个二进制数对应位进行比较,如果全为 1,则结果为 1;如果有一个 bit 为 0,则结果为 0。
3. ~ 按位取反:将二进制数的每一位进行翻转(0 变 1,1 变 0)。
4. ^ 按位异或:将两个二进制数对应位进行比较,相同为 0,相异为 1。
5. << 按位左移:将二进制数左移 n 位,低位补 0。
6. >> 按位右移:将二进制数右移 n 位(分为逻辑右移和算术右移)。
举个例子,假设我有一个变量 a = 0b00001111(即十进制的 15):
c
unsigned char a = 0x0F; // 二进制:0000 1111
unsigned char b;
b = a << 2; // 左移 2 位:0011 1100,即 0x3C
b = a >> 1; // 右移 1 位:0000 0111,即 0x07
b = ~a; // 按位取反:1111 0000,即 0xF0
b = a | 0x30; // 按位或:0011 1111,即 0x3F
b = a ^ 0x0F; // 按位异或:0000 0000,即 0x00
4.共阴极数码管(四位)
数码管每一次只能单独显示一个数值。
同一时刻只能显示一位数字。
在开始之前,我们需要完成以下步骤:
1. 位选
通过 4 个 NPN 型三极管控制。给三极管基极对应的引脚高电平,三极管导通,对应位的数码管就被选中(使用 P1 寄存器的低 4 位)。
2. 段选
通过 P0 寄存器控制。给对应段引脚高电平,这个段就被点亮了。
动态显示:快速轮询,利用人眼视觉暂留效应。先在第一位数码管显示一个数值,快速刷新;再在第二位数码管显示下一位数值,如此循环,人眼看起来就像同时点亮了多位。
