嵌入式 - 硬件:51单片机

本节重点

  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: t &= ~(1 << 0); t &= ~(1 << 7);
^ 按位异或 相同则 0,不同则 1 指定位翻转(0 变 1,1 变 0) 把 t 的 bit0 翻转: t ^= (1 << 0);

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:新建工程

  1. 点击菜单栏「Project」→「New Project」,选择工程保存路径,命名(如 "LED_Blink");
  2. 选择芯片型号:在弹出的 "Select Device for Target" 窗口中,展开「Atmel」→选择「AT89C51」
  3. 弹出 "Copy Standard 8051 Startup Code to Project Folder" 时,点击「否」---------------------不拷贝启动代码

步骤 3:添加 C 语言文件

  1. 点击菜单栏「File」→「New」,新建空白文本;
  2. 按「Ctrl+S」保存,命名为 "main.c"(必须加.c 后缀,保存到工程同一目录);
  3. 双击左侧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 文件

  1. 点击菜单栏「Project」→「Options for Target 'Target 1'」(或直接点工具栏 "魔术棒" 图标);
  2. 切换到「Output」选项卡,勾选「Create HEX File」(生成可下载的十六进制文件),点击「OK」;
  3. 点击工具栏「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" 的段码,显示 "1",延时 1ms;
  2. 位选选中第 2 位,段选输出 "2" 的段码,显示 "2",延时 1ms;
  3. 位选选中第 3 位,段选输出 "3" 的段码,显示 "3",延时 1ms;
  4. 位选选中第 4 位,段选输出 "4" 的段码,显示 "4",延时 1ms;
  5. 循环执行 1~4 步,由于切换速度快(总周期 4ms),人眼看到 "1234" 同时显示。

十、重点总结 + 工具推荐

必背重点(面试 / 实操高频)

  1. 概念辨析:MCU(集成度高、简单控制)vs MPU(需外接外设、复杂应用);
  2. 存储区别:RAM(临时变量、掉电丢失)vs ROM(程序指令、掉电不丢);
  3. 三大总线:地址总线(单向、寻址)、数据总线(双向、传数据)、控制总线(时序控制);
  4. LED 导通:共阳极需阴极接低电平,共阴极需阳极接高电平;
  5. 位运算应用|置 1、&清 0、^翻转;
  6. 程序流程:Keil 编译生成 HEX,STC-ISP 下载,复位单片机生效。

实用工具推荐

  • 文档编写:Typora(用 Markdown 写技术文档,可导出 PDF);
  • 截图工具:PixPin(精准截图,支持标注,适合画原理图注释);
  • AI 辅助:腾讯元宝、ima(解决编程报错、原理疑问,提升学习效率)。

编写 .h

相关推荐
GalaxySinCos13 小时前
10 51单片机之DS1302实时时钟
单片机·嵌入式硬件·51单片机
gmmi13 小时前
嵌入式学习 51单片机基础
嵌入式硬件·学习·51单片机
小莞尔13 小时前
【51单片机】【protues仿真】 基于51单片机智能电子秤系统
stm32·单片机·嵌入式硬件·51单片机·proteus
猫猫的小茶馆14 小时前
【STM32】状态机(State Machine)
c语言·stm32·单片机·嵌入式硬件·mcu·51单片机·智能硬件
ShiMetaPi21 小时前
【GM3568JHF】FPGA+ARM异构开发板 使用指南:显示与触摸
arm开发·嵌入式硬件·fpga开发·rk3568
亿道电子Emdoor21 小时前
【ARM】MDK出现:Unable to find ARM libraries
arm开发·stm32·单片机
逼子格1 天前
【Proteus仿真】8*8LED点阵控制系列仿真——循环显示数字/按键控制显示图案
单片机·嵌入式硬件·proteus·嵌入式·定时器·硬件工程师·led点阵
猫猫的小茶馆1 天前
【STM32】贪吃蛇 [阶段 8] 嵌入式游戏引擎通用框架设计
stm32·单片机·嵌入式硬件·mcu·物联网·游戏引擎·智能硬件
小莞尔1 天前
【51单片机】【protues仿真】基于51单片机音乐盒(8首歌曲)系统
c语言·开发语言·单片机·嵌入式硬件·51单片机