嵌入式系统定义
以应用为中心,以计算机技术为基础,软硬件可裁剪的专用计算机系统。
51单片机发展及厂商
时间 | 厂商/型号 | 特点 |
---|---|---|
1980 | Intel MCS-51系列(8051) | 工业控制领域,MCU转型到CPU |
- | Atmel AT89C51 | 兼容MCS-51架构 |
- | Philip P89V51(增强型) | 支持ISP在线编程 |
- | STC宏晶半导体(STC89C51等) | 广泛用于教学和低成本开发 |
核心概念对比
处理器类型
缩写 | 全称 | 功能特点 | 应用场景 |
---|---|---|---|
CPU | Central Processing Unit | 数据运算、指令处理 | 通用计算 |
MCU | Micro Controller Unit | 高度集成(CPU+RAM+ROM+外设),低成本 | 简单控制(家电、传感器) |
MPU | Micro Processing Unit | 低集成度(需外接存储/外设),支持复杂系统 | Linux/高端嵌入式设备 |
GPU | Graphics Processing Unit | 图形渲染加速 | 游戏、图像处理 |
NPU | Neural Processing Unit | AI推理、神经网络加速(如华为达芬奇NPU) | 智能终端 |
FPU | Floating Point Unit | 浮点数运算(遵循IEEE 754) | 科学计算 |
其他术语
- SOC:System On Chip,片上系统(集成多芯片功能,如手机处理器)。
存储类型对比
类型 | 特点 | 典型用途 | 示例 |
---|---|---|---|
外存 | 掉电不丢失,速度慢,成本低 | 存储程序/代码 | 硬盘(1T约300元) |
内存 | 掉电丢失,速度快,成本高 | 运行时临时数据存储 | 内存条(16G约300元) |
ROM | 只读存储器,存程序指令 | 固化程序(如单片机代码) | Flash ROM |
RAM | 随机存取存储器,存临时变量 | 运行时数据缓存 | SRAM/DRAM |
单片机内部结构
主要模块
- 核心单元:CPU(运算/控制)
- 存储单元:ROM(程序存储)、RAM(数据缓存)
- 外设模块:Timer(定时)、PWM(脉宽调制)、IO(输入输出)、UART(串口通信)、中断系统。
三大总线
总线类型 | 功能 | 方向 | 示例参数 |
---|---|---|---|
地址总线 | 寻址RAM空间(范围2^n) | 单向 | 8位总线→256字节 |
数据总线 | 传输数据 | 双向 | 8位并行传输 |
控制总线 | 时序/中断/IO控制信号 | 双向 | 读写信号线 |
补充说明
- 浮点运算:FPU通常集成于CPU内,提升科学计算效率。
- SOC应用:如手机芯片集成CPU+GPU+NPU+基带,实现多功能一体化。
(注:表格和分级标题优化了信息呈现,关键参数和对比清晰标出。)
芯片信息表
属性 | 描述 |
---|---|
型号 | STC89C52RC |
封装形式 | DIP40(双列直插式,40引脚) |
端口分组 | 4组(P0、P1、P2、P3),每组8位,对应寄存器为unsigned char P2 等 |
LED模块特性说明
类型 | 连接方式 | 电平要求 | 导通条件 |
---|---|---|---|
共阳极 | 阳极接VCC,阴极接单片机引脚 | 阴极输出低电平(0V) | 阳极(5V)与阴极(0V)形成压差 |
共阴极 | 阴极接GND,阳极接单片机引脚 | 阳极输出高电平(5V) | 阳极(5V)与阴极(0V)形成压差 |
关键概念补充
网络编号
在电路设计中,相同网络编号的引脚表示电气连通,无需物理连线直接连接。例如:
- 若P2.0和LED阴极均为网络编号“NET1”,则两者实际已导通。
寄存器操作示例
通过直接赋值控制端口电平(以P2为例):
P2 = 0x00; // P2所有引脚输出低电平(共阳极LED点亮)
P2 = 0xFF; // P2所有引脚输出高电平(共阳极LED熄灭)
数码管基础概念
数码管是一种常见的显示设备,由多个LED发光二极管组成,通常分为共阴极和共阳极两种类型。共阴极数码管的阴极连接在一起,阳极独立控制;共阳极则相反。51单片机通过位选和段选信号控制数码管的显示内容。
4位共阴极数码管
- 结构:包含4个独立的数码管单元,每个单元可显示0-9或部分字母。
- 特点:同一时刻仅能显示一位数字,通过快速切换位选实现多位显示(动态扫描)。
位选与段选
位选:选择当前操作的数码管位。
- 51单片机通过P1寄存器控制,将对应位设置为1(共阴极)或0(共阳极)。
- 示例代码(位选第二位):
P1 = 0x02; // 0000 0010,选中第二位
段选:控制当前选中位的显示内容。
- 通过P0或其他端口发送段码(共阴极为例):
// 显示数字0的段码(a~dp对应P0.0~P0.7) unsigned char segCode[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; // 0~9 P0 = segCode[0]; // 显示数字0
- 通过P0或其他端口发送段码(共阴极为例):
静态显示与动态显示
静态显示:
- 每个数码管位独立连接驱动电路,所有位同时显示,无需扫描。
- 优点:亮度高、无闪烁;缺点:占用I/O资源多。
动态显示:
- 通过快速轮询位选和段选,利用视觉暂留效应实现多位显示。
- 示例流程:
while (1) { for (int i = 0; i < 4; i++) { P1 = 1 << i; // 位选第i位 P0 = segCode[data[i]]; // 段选数据 delay_ms(5); // 短暂延时 } }
- 优点:节省I/O;缺点:需精确控制延时,否则易闪烁。
共阴极数码管驱动注意事项
- 限流电阻:每个段选信号需串联电阻(通常220Ω)。
- 消隐处理:切换位选时关闭段选,避免残影。
- 驱动能力:若电流不足,需使用三极管或专用驱动芯片(如74HC595)。
参考段码表(共阴极)
数字 | 段码(a~dp) | 二进制 |
---|---|---|
0 | 0x3F | 0011 1111 |
1 | 0x06 | 0000 0110 |
2 | 0x5B | 0101 1011 |
... | ... | ... |
9 | 0x6F | 0110 1111 |
通过合理配置位选、段选及显示模式,可实现稳定高效的多位数码管显示。