什么是嵌入式
概念:以应用为中心,以计算机技术为基础,软硬件可裁剪的专用计算机系统
51单片机
-
1980年,Intel公司推出一款MCS-51系列(8051型号单片机),从MCU转型CPU市场
-
Atmel -> AT89C51、Philip(P89V51 增强型单片机,支持单片机ISP在线编程)、STC(宏晶半导体 STC89C51、STC89C52、STC89C52RC)
相关概念
|-------------|------------------------------------------------------------------------------------------|
| 概念 | 作用 |
| MCU | Micro Ctroller Unit,微控制器,集成度高,将所有功能集成到一块芯片中(CPU、RAM、ROM、IO控制器、UART控制器、定时器、中断系统),成本低,简单控制 |
| CPU | Central Processing Unit,中央处理器,完成数据运算、指令处理,CPU性能越好,完成数据运算的时间就越快 |
| MPU | Micro Processing Unit,微处理器,集成度低,只有CPU模块,需要单独外接一些功能模块(存储、外设),成本高,复杂应用,可以跑Linux操作系统 |
| GPU | Graphics Processing Unit(图像处理单元),处理图形数据,图像渲染(GPU性能越好,图像处理质量越高) |
| NPU | Neural Processing Unit(神经网络处理单元),AI推理、硬件加速、神经网络处理(华为 达芬奇NPU AI自动优化照片) |
| FPU | Float Point Unit(浮点数单元),完成浮点数运算和处理(IEE754),集成在CPU内部 |
| SOC | System On Chip(片上系统),将多个功能芯片集成到一起 |
| ROM | Read-Only Memory,只读存储器,主要存放单片机程序和指令,单片机掉电数据不丢失 |
| RAM (片内RAM) | Random Access Memory, 随机访问存储器,主要单片机程序运行过程的变量,掉电数据丢失 大小256byte |
51单片机芯片内部资源:

MCU单片机芯片
原理图

1~40:引脚的标号
P开头的为网络编号,在其他原理图中,含有相同网络编号的引脚彼此互通,可避免复杂连线
实物图

STC:宏晶半导体
89C52RC:单片机芯片型号
DIP40:双列直插式,40个引脚
将40个引脚划为4组(P0, P1, P2, P3)
Pi:Pi_0 ~ Pi_7(i = 0,1,2,3)
板功能示意图

芯片上方绿色的杆:拔码杆,可用来插拔芯片,注意芯片不要插反了
发光二极管
二极管:阳极+阴极,具有单向导通性
共阳极二极管:将所有发光二极管的阳极连接到VCC,发光二极管的阴极接到单片机的引脚,此时阳极输出高电平,给对应单片机引脚低电平,造成电压差,满足发光二极管的单项导通性,使其发亮
共阴极与之相反,阴极接到GND,阳极接引脚
原理图

竖线一侧为阴极,另一头为阳极,例如上图左侧为阴极右侧为阳极
RP7,RP7:四位一体电阻,限流,防止电流过大烧毁二极管
实物图

位运算
|-----|------|----------------------------------------------------------|-------------|------------------------|
| 运算符 | 名称 | 功能 | 应用场景 | 例子 1001 1110 1101 0011 |
| & | 按位与 | 将对应位的bit进行比较,如果都为1,结果为1,如果有一个bit为0,结果为0(有0则0) | 指定位清0,其余位不变 | 1001 0010 |
| | | 按位或 | 将对应位的bit进行比较,如果有一个为1,结果为1,如果都为0,结果是0(有1则1) | 指定位置1,其余位不变 | 1101 1111 |
| ^ | 按位亦或 | 将对应位的bit进行比较,如果两个bit相同,则结果为0,如果两个bit不相同,则结果为1(相同为0,相异为1) | 电平翻转 | 0100 1101 |
| ~ | 按位取反 | 每一位的bit进行翻转(1,0转换) | | 0110 0001 0010 1100 |
以P2 = 0000 0000为例解释应用场景(一共7位,最左侧为第0位)
指定位置1:P2 |= (1 << 5) | (1 << 2),此时P2 = 0001 0100
指定位清0:P2 &= ~(1 << 2),此时P2 = 0001 0000
电平翻转:P2 = P2 ^ (0xFF),此时P2 = 1110 1111
注意:&的用法不能像|可以连续用,例如P2 &= ~(1 << 2) | ~(1 << 5),事实上这并不是指定第二位和第五位清零,要达到这样的效果需要写两行&
进制转换表
八进制转二进制
|-----|-----|-----|-----|-----|-----|-----|-----|
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 000 | 001 | 010 | 011 | 100 | 101 | 110 | 111 |
十六进制转二进制(0-7同上并在二进制前加"0")
|------|------|------|------|------|------|------|------|
| 8 | 9 | A | B | C | D | E | F |
| 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 1111 |
51单片机程序开发流程
1,安装Keil4软件

2,打开Keil4软件


3,创建单片机工程
1)上方Project → New μVision Project

2)选择Atmel中的AT89C51,点击OK

3)是否选择启动代码加入工程,选择否

4)将.c文件加入到Source Group 1目录下,双击Source Group 1,选择并点击add


4,编写单片机程序
包含头文件reg51.h
5,点击Target Options → Output → Create HEX File → OK


6,编译,左上角Bulid(快捷键F7)和Rebuild,由于勾第五步进行了勾选,会生成自动.hex文件

7,打开单片机程序STC-ISP

8,选择单片机芯片和串口,并打开程序文件.hex

9,点击左下角下载/编程,需要对开发板进行复位
逻辑分析仪
作用:以方波的形式获取引脚电平变化

CH0-CH7:逻辑分析仪通道,通过杜邦线将通道与引脚连接
GND:通过杜邦线将逻辑分析仪GND与单片机的GND连接
逻辑分析软件Logic
看到如下字样,代表逻辑分析仪连接成功:

点击Device Setting按钮,可以设置通道和速率:

显示形式:鼠标指向的表示高/低电平持续的时间

数码管
数码管:基极 + 发射极 + 集电极,51单片机上搭载了4位共阴极数码管,每一个数码管可以独立显示一个数值,但在同一时刻只能有一个数码管被点亮
注意:与二极管相反,二极管是共阳极,数码管是共阴极,所以数码管要亮起,引脚应该为高电平,此时基极和发射极会产生压降,使集电极和发射机导通,即三极管被导通
原理图

根据P0对应的字母对应数码管亮起的部位,其中P07对应的dp是小数点
三极管有PNP和NPN两种类型,箭头朝外为NPN,对于NPN来说箭头的起点为基极,箭头指向的为发射极,箭头另一侧为集电极,PNP相反,如图中B为基极,E为发射极,C为集电极

实物图

数码管显示
1,先位选,再段选
位选:将数码管对应的NPN三极管的基级(P10-P13)给定高电平,就可以选中某一位数码管
段选:给定对应段的引脚高电平,即可选中某一段
具体例子
二极管
亮灭

n搭配while做了个简易的延时,首先是P2=0,二进制就是八个0,0对应低电平,八个二极管全部亮起,短暂延时后P2 = 0xA5,二级制1010 0101,所以第1、3、4、6,也就是D2、4、5、7亮起


连续亮起


左下角的警告是正常的,意思是在led.c文件中有函数没有用到
该代码的效果是二极管从D1依次亮到D8然后再亮回D1
数码管
亮起


位选为1,P0二进制为0000 0110,高电平亮起低电平熄灭,所以第三个数码管亮1

同时显示
数码管在同一时刻只能显示一位,但利用人的肉眼视觉暂留效应(余晖效应),在某一位数码管显示一个数值后,可以通过快速刷新延时,再去在其他位数码管显示数值


通过逐步取余,并代入位选和段选参数,delay(100)耗时极短,可产生余晖效应