【硬件学习入门】--嵌入式51单片机点灯与延迟效应

1.计算机组成

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

2.最小系统

最小系统是指能够让单片机正常工作所需要的最少器件组合。

晶振:控制单片机的运行频率和节拍。

CPU:Central Processing Unit,中央处理器,负责完成数据运算和指令执行。

MCU:Micro Controller Unit,微控制器,集成度高,将所有的功能集成到同一块芯片中,成本低。

GPU:图像处理器,负责图形处理。

NPU:神经网络处理器,用于 AI 推理加速。

FPU:浮点数运算单元,负责完成浮点数运算。

SoC:片上系统,将多个功能芯片集成在一块芯片上(体积小、功耗低)。

存储器的一些概念

内存:存放程序运行时的变量,掉电数据丢失,读写速度快。

外存:存放代码指令,掉电数据不丢失,价格相对便宜。

3.CPU 与 RAM 交互的三大总线

RAM:随机访问存储器,存放单片机运行过程中的变量。

ROM:只读存储器,存放程序运行中不变的代码和常量。

CPU 与 RAM 交互依赖三大总线:

  1. 地址总线,一共有 8 根:CPU 通过地址总线寻找 RAM 中的变量地址,2^8 = 256(方向是单向的,CPU → RAM)。

  2. 数据总线,一共有 8 根:CPU 与 RAM 进行数据交换传输(可以双向传输)。

  3. 控制总线,一共有 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 寄存器控制。给对应段引脚高电平,这个段就被点亮了。

动态显示:快速轮询,利用人眼视觉暂留效应。先在第一位数码管显示一个数值,快速刷新;再在第二位数码管显示下一位数值,如此循环,人眼看起来就像同时点亮了多位。

相关推荐
Godspeed Zhao3 小时前
从零开始学AI25——无监督学习之层次聚类
学习·机器学习·聚类
David猪大卫10 小时前
【C++修炼】map 和 set 的使用
c语言·开发语言·数据结构·c++·经验分享·笔记·学习
HPtiger10 小时前
C++ 入门笔记:从 C 到 C++ 的核心过渡(命名空间、输入输出、缺省参数、重载、引用、内联)
c语言·c++·学习
fengci.11 小时前
CTF2MISC中等部分
开发语言·前端·学习
YueTann13 小时前
mgtv5th-baseline学习
学习
蒸蒸yyyyzwd15 小时前
从后端面经学到的 3 个知识
笔记·学习
17岁的勇气15 小时前
Unity Shader unity文档学习笔记(二十二):shader变体
笔记·学习·unity
路灯上の马陈17 小时前
Java 内部类 学习笔记
笔记·学习
前进的李工18 小时前
Agent 学习笔记 12:Agent 的工具应该怎么设计
人工智能·笔记·学习·agent·工具调用·skill·工具设计
li星野18 小时前
从 DICOM 到声学属性学习记录:HU 值怎么变成密度和声速
学习