本节重点
1. MCU、CPU、GPU、NPU、SOC、MPU、FPU
2. 内存、外存的区别
3. RAM和ROM的区别,单片机RAM大小
4. 三大总线及其特点
5. 发光二极管分类及其特点
6. 数码管显示原理
一、嵌入式
以应用为中心,以计算机技术为基础,软硬件可裁剪的专用计算机系统。
二、51 单片机
1980 年,由 Intel 公司推出 MCS-51 系列的8051 型号单片机(多用于工业控制领域),实现从 MCU 向类 CPU 功能的拓展。
其他厂商代表型号:
- Atmel:AT89C51;
- Philip:P89V5 系列单片机(增强型单片机,支持 ISP 在线编程);
- STC 宏晶半导体:STC89C51、STC89C52、STC89C52RC。
三、相关概念
术语 | 全称 & 核心解释 |
---|---|
CPU | Central Processing Unit(中央处理器):负责数据运算、指令处理;CPU 性能越高,指令处理和数据运算速度越快。 |
MCU | Micro Controller Unit(微控制器)--- 单片机:集成度高,将 CPU、RAM、ROM、定时器、UART、IO 等功能集成到单芯片中;适用于简单控制场景,成本低。 |
MPU | Micro Processing Unit(微处理器):集成度低,仅包含单独 CPU,需外接外设、存储模块;适用于复杂应用领域(如运行 Linux 系统),成本高。 |
GPU | Graphics Processing Unit(图形处理器) ---- 显卡:负责图形处理、图形渲染;GPU 性能越好,图形显示质量越高。 |
NPU | Neural Processing Unit(神经网络处理器):负责 AI 推理、硬件加速、神经网络处理(如卷积运算);例如华为 Mate60 的 “达芬奇 NPU” 可实现 AI 自动优化照片。 |
FPU | Floating Point Unit(浮点数运算单元):专门完成浮点数的运算和处理(遵循 IEEE 754 标准);大部分集成在 CPU 内部。 |
SOC | System On Chip(片上系统):集成度高,将存储芯片、外设芯片等多个功能模块集成到单块芯片上。 |
四、RAM 和 ROM
- 外存:主要存放程序、代码、指令;掉电数据不丢失,读写速度慢,价格便宜(如移动硬盘 1T 约 300 元)。
- 内存:主要存放程序运行过程中的临时变量;掉电数据丢失,读写速度快,价格昂贵(如内存条 16G 约 300 元)。
- ROM:Read-Only Memory(只读存储器);存放单片机程序、指令,掉电数据不丢失。
- RAM:Random Access Memory(随机访问存储器);存放临时变量、临时数据,掉电数据丢失。
单片机的存储系统简化为 “ROM+RAM”,分工明确:
- ROM(只读存储器):单片机的 “程序仓库”,存放我们编写的控制程序、指令,掉电后数据不丢失(比如你写的 “LED 闪烁程序” 就存在这里)。
- RAM(随机访问存储器):单片机的 “临时工作台”,存放程序运行中的临时变量(比如计算过程中的计数器值、传感器的实时数据),掉电后数据丢失。
注意:51 单片机的 RAM 容量很小,经典型号(如 STC89C52)的 RAM 仅为256 字节,因此编程时要避免定义过大的变量。
五、单片机内部结构:三大总线 + 核心模块
51 单片机的内部结构像一个 “微型工厂”,各模块协同工作,而 “三大总线” 负责连接各模块。
1. 核心内部模块
一块 51 单片机芯片内部集成了以下关键模块,无需外接就能实现基础控制功能:
- CPU:核心运算单元,执行程序指令;
- RAM/ROM:存储模块,对应上文的 “临时工作台” 和 “程序仓库”;
- Timer(定时器):实现定时功能(如 “每隔 1 秒亮一次灯”);
- PWM(脉冲宽度调制):控制输出信号的占空比(如调节 LED 亮度、电机转速);
- IO 口:输入 / 输出接口(如连接 LED、按键、数码管);
- 中断:处理紧急事件(如外部按键按下时,暂停当前程序优先响应按键);
- UART(串口):实现单片机与电脑的通信(如程序下载、数据上传)。
2. 三大总线:连接模块的 “桥梁”
三大总线负责在内部模块间传输数据、地址和控制信号,是单片机工作的 “基础设施”:
- 地址总线:“找位置”—— 负责传输 RAM 的地址,告诉 CPU “要访问的临时数据在 RAM 的哪个位置”。51 单片机的地址总线宽度为 8 位,最大寻址范围为
2^8 = 256字节
(对应 RAM 容量),单向传输(只能从 CPU 发往 RAM)。 - 数据总线:“传数据”—— 在 CPU 和 RAM 之间传输实际数据(如变量值),双向传输(可从 RAM 读数据到 CPU,也可从 CPU 写数据到 RAM)。
- 控制总线:“发指令”—— 负责传输控制信号,比如 “开始读数据”“中断请求”“IO 口控制”,协调各模块的工作时序(时序控制)。
六、硬件基础:原理图中的关键元素
要让单片机工作,必须先看懂基础原理图,核心关注 “MCU 封装”“网络编号” 和 “LED 模块”。
1. MCU 封装:以 STC89C52RC 为例
STC89C52RC 最常用的封装是DIP40(双列直插式),即芯片有 40 个引脚,这些引脚分为 4 组 IO 口(P0~P3),对应程序中的端口寄存器(如unsigned char P2;
—— 通过操作 P2 寄存器就能控制 P2 口的 8 个引脚)。
2. 网络编号
在实际电路中的一个编号,避免物理连线,相同网络的编号的引脚在实际电路中是彼此互通
3. LED 模块:单向导通的 “发光二极管”
具有单向导通性,分为共阳极和共阴极二极管
- 共阳极 LED:所有 LED 的阳极接电源正极(VCC,5V),阴极接单片机的 IO 引脚。
导通条件:单片机 IO 引脚输出低电平(0V),此时阳极(5V)和阴极(0V)形成电压差,电流流过 LED,使其发光。 - 共阴极 LED:与共阳极相反,阴极接 GND,阳极接单片机 IO 引脚,需 IO 输出高电平才能发光。
七、编程核心:位运算(置 1 / 清 0 / 异或)
单片机编程频繁操作 IO 口的 “某一位”(比如 “让 P2 口的第 0 位输出低电平”),这就需要位运算—— 直接操作二进制的每一位(bit)。
1. 三种核心位运算
运算符号 | 名称 | 规则(对应 bit 比较) | 核心应用场景 | 示例代码(以 unsigned char t 为例) |
---|---|---|---|---|
| | 按位或 | 有 1 则 1,全 0 则 0 | 指定位置 1(让某 bit=1) | 把 t 的 bit0 和 bit7 置 1: t |= (1 << 0) | (1 << 7); |
& |
按位与 | 全 1 则 1,有 0 则 0 | 指定位清 0(让某 bit=0) | 把 t 的 bit0 和 bit7 清 0:
|
^ |
按位异或 | 相同则 0,不同则 1 | 指定位翻转(0 变 1,1 变 0) | 把 t 的 bit0 翻转:
|
2. 练习
已知:unsigned char a = 0x62; unsigned char b = 0xFF;
(16 进制转二进制:0x62=01100010,0xFF=11111111)
(1)将 a 的 bit0 和 bit7 置 1
a |= (1 << 0) | (1 << 7);
(2)将 b 的高 4 位清 0
t &= ~(0x0F << 4);
t &= ~(0xF0 << 0);
八、单片机程序创建、编写、编译、下载流程:
掌握 “编写 - 编译 - 下载” 流程,你就能让单片机执行你的指令(比如控制 LED 闪烁),这里以Keil4(51 单片机专用开发软件) 为例:
步骤 1:安装 Keil4
步骤 2:新建工程
- 点击菜单栏「Project」→「New Project」,选择工程保存路径,命名(如 “LED_Blink”);
- 选择芯片型号:在弹出的 “Select Device for Target” 窗口中,展开「Atmel」→选择「AT89C51」
- 弹出 “Copy Standard 8051 Startup Code to Project Folder” 时,点击「否」---------------------不拷贝启动代码
步骤 3:添加 C 语言文件
- 点击菜单栏「File」→「New」,新建空白文本;
- 按「Ctrl+S」保存,命名为 “main.c”(必须加.c 后缀,保存到工程同一目录);
- 双击左侧Grpup,点击Add 将文件加入到对应的Group下。
步骤 4:编写程序(以 LED 闪烁为例)
1 .#include <reg51.h>, 加入51单片机头文件
2 .需要加入while(1)避免程序跑飞
示例代码:
#include <reg51.h>
// 延时函数(简单延时,约1秒)
void delay() {
unsigned int i, j;
for(i = 0; i < 60000; i++)
for(j = 0; j < 10; j++);
}
void main() {
while(1) {
P2 = 0xFE; // P2口bit0=0(低电平),其他bit=1,对应LED亮
delay(); // 延时1秒
P2 = 0xFF; // P2口全为1(高电平),LED灭
delay(); // 延时1秒
}
}
步骤 5:编译生成 HEX 文件
- 点击菜单栏「Project」→「Options for Target 'Target 1'」(或直接点工具栏 “魔术棒” 图标);
- 切换到「Output」选项卡,勾选「Create HEX File」(生成可下载的十六进制文件),点击「OK」;
- 点击工具栏「Build」(或按 F7),编译工程,下方 “Build Output” 窗口显示 “0 Errors” 即编译成功,工程目录下会生成 “LED_Blink.hex” 文件。
步骤 6:下载程序到单片机
(1)打开ISP软件,连接串口线
(2)选择单片机芯片型号:STC89C52/C51/C52RC
(3)根据串口识别的端口号,选择对应的端口 COM4
(4)选择"打开程序文件" -> 对应目录下的hex文件
(5)点击"下载/编程"按钮,将单片机复位后程序即可下载到单片机ROM中
九、数码管:单片机的 “显示窗口”
4 位共阴极数码管
数码管:51单片机搭载一个4位共阴极数码管,每一位数码管可以显示一些独立数值,数码管同一时刻只能显示一位
核心是 “位选 + 段选” 的配合。
1. 基本原理
4 位数码管看似能同时显示 4 个数字(如 “1234”),但同一时刻只能显示 1 位—— 利用 “视觉暂留效应”(人眼对光的残留时间约 0.1 秒),快速切换 4 位数码管的显示,让人感觉 “同时亮”。
2. 核心概念
- 位选:“选哪一位显示”—— 选中某一位数码管(将P1寄存器对应bit位置1)
- 段选:“显示什么数字”—— 数码管的每一段(a~g 段 + dp 小数点)对应一个 IO 口,通过控制 “段选端” 的高低电平,显示 0~9 的数字(如显示 “0” 需要 a~f 段亮,g 段灭)。
3. 显示流程(以显示 “1234” 为例)
- 位选选中第 1 位,段选输出 “1” 的段码,显示 “1”,延时 1ms;
- 位选选中第 2 位,段选输出 “2” 的段码,显示 “2”,延时 1ms;
- 位选选中第 3 位,段选输出 “3” 的段码,显示 “3”,延时 1ms;
- 位选选中第 4 位,段选输出 “4” 的段码,显示 “4”,延时 1ms;
- 循环执行 1~4 步,由于切换速度快(总周期 4ms),人眼看到 “1234” 同时显示。
十、重点总结 + 工具推荐
必背重点(面试 / 实操高频)
- 概念辨析:MCU(集成度高、简单控制)vs MPU(需外接外设、复杂应用);
- 存储区别:RAM(临时变量、掉电丢失)vs ROM(程序指令、掉电不丢);
- 三大总线:地址总线(单向、寻址)、数据总线(双向、传数据)、控制总线(时序控制);
- LED 导通:共阳极需阴极接低电平,共阴极需阳极接高电平;
- 位运算应用:
|
置 1、&
清 0、^
翻转; - 程序流程:Keil 编译生成 HEX,STC-ISP 下载,复位单片机生效。
实用工具推荐
- 文档编写:Typora(用 Markdown 写技术文档,可导出 PDF);
- 截图工具:PixPin(精准截图,支持标注,适合画原理图注释);
- AI 辅助:腾讯元宝、ima(解决编程报错、原理疑问,提升学习效率)。
编写 .h
十一、实战练习
1.流水灯
main.c
led.c
2.数码管显示
main.c
digiter.c
digiter.h
delay.c delay.h