【全栈计划 —— 单片机】——Part_02 结合LED灯,拿捏底层输入输出(2)

简介: 【全栈计划 —— 单片机】——Part_02 结合LED灯,拿捏底层输入输出(2)

二、 GPIO 结构框图与工作原理


对于当前来说,知道GPIO是用于输入输出的这点其实就够了,


下面的结构图和工作原理阐述的是数字电路的知识,现阶段不会它们丝毫不影响咱们把小灯灯搞亮,根据小伙伴们的选择进行阅读吧。


倘若想了解底层原理的话可以耐心慢慢读,假如想知道咱们的LED灯到底是怎么点亮的了,就可以直接读下面的LED简介模块的

 

51单片机的GPIO引脚主要是有四组,咱们详细剖析P0端口,其他三个端口可以从P0端口的理解中类比。


(1)P0 端口


先浅看一下P0端口的结构框图,从分析结构图的各个模块,同时也就能够加深对一些数字电路的理解。

image.jpeg

在没有数电基础下,直接看端口的结构框图可能够呛。建议跟着我的描述,一点一点的理解。

观察上图,P0 端口由锁存器、输入缓冲器、切换开关(或者说是多路开关)、一个非门、一个与非门及场效应管驱动电路(即上图中的V1、V2)构成。


图的最右边,标号为P0.x 引脚的图标,也就是说P0.x 引脚可以是P0.0 到P0.7 的任何一位,即在P0 口有8 个与上图相同的电路组成。


这几个电路中,容易混淆的应该是门电路这里吧,其他的电路的图标都可以直接从结构框图找到的。趁着看P0端口,顺便把门电路的知识点记录一下


① 数字门电路——掌握与门、或门、非门

现阶段,知道有七种(完整是有八种的)逻辑门电路以及它们对应的电路符号。

然后能够根据咱们学习的编程知识中按位与(&)、按位或(|)、按位非(!)去理解逻辑门电路中的与门、或门、非门就可以了

微信图片_20221019152724.png

下面开始划重点了

① 与门

image.png

② 或门

image.png

③ 非门

image.png

④ 组合

微信图片_20221019152904.jpg微信图片_20221019152913.jpg

② 输入缓冲器——认识三态门+缓冲器


① 浅识三态门:

三态指其输出既可以是一般二值逻辑电路,即正常的高电平(逻辑1)或低电平(逻辑0),还可以保持特有的高阻抗状态。高阻态相当于隔断状态(电阻很大,相当于开路)。高阻态的意义在于实际电路中不可能断开电路。三态电路的输出逻辑状态的控制,是通过一个输入引脚实现的。

三态门都有一个EN控制使能端,来控制门电路的通断。 可以具备这三种状态的器件就叫做三态器件。

当EN有效时,三态电路呈现正常的0或1的输出;

当EN无效时,三态电路给出高阻态输出。

微信图片_20221019152947.png

② 缓冲器

缓冲寄存器又称缓冲器(buffer),它分输入缓冲器和输出缓冲器两种。

前者的作用是将外设送来的数据暂时存放,以便处理器将它取走;

后者的作用是用来暂时存放处理器送往外设的数据。

有了数控缓冲器,就可以使高速工作的CPU与慢速工作的外设起协调和缓冲作用,实现数据传送的同步。由于缓冲器接在数据总线上,故必须具有三态输出功能

③ 原理运用

P0端口中主要是有两个三态缓冲器。

上面一个是读锁存器的缓冲器,也就是说,要读取D 锁存器输出端Q 的数据,那就得使读锁存器的这个缓冲器的三态控制端(上图中标号为读锁存器端)有效。


下面一个是读引脚的缓冲器,要读取P0.x引脚上的数据,也要使标号为读引脚的这个三态缓冲器的控制端有效,引脚上的数据才会传输到我们单片机的内部数据总线上。


③ D 锁存器—— 认识D触发器

image.png

构成一个锁存器,依赖时序电路。

51单片机的32根I/O口都是用户一个D触发器来构成锁存器的。上图中的D锁存器,D端是数据输入端,CP(CLK)端是控制端(也就是时序控制信息输入端),Q端是输出端,Q非是反向输出端。


D触发器工作模拟:


对于D触发器而言,当D输入端有一个输入信号,但是这个时候,控制端CP(CLK)是没有信号的,此时输入端D的数据是无法传到输出端Q以及反向输出端Q非的。

但是当时序控制端CP的时序脉冲一旦到了,这时D端输入的数据可以传到输出端Q以及输出端Q非。


数据传输过来之后,当CP时序控制端的时序信号消失了,这时输出端还会保持上次输入端D的数据(也就是所谓的把上次的数据锁存起来了)。如果下一个时序控制脉冲信号来了,这时输出端D的数据才能又传到输出端,改变输出端的状态。


④ 多路开关


多路选择开关是用于选择是做为普通I/O 口使用还是作为数据/地址总线使用的选择开关


⑤ 场效应管输出驱动


这两个MOS 管一次只能导通一个,当V1 导通时,V2 就截止,当V2 导通时,V1 截止。


⑥ P0口作为I/O 端口输出使用时的工作原理


了解逻辑门的作用+巩固锁存器

image.png

P0端口作为I/O端口使用的时候,多路开关的控制信号为0(低电平),上图中的控制信号,也就是那根红线是和与门连接在一起的,与门的工作原理是全1则1,有0则0。所以与门输出的是一个低电平(0),那么V1管这儿就截止了。


在多路控制开关的信号是0的时候,多路开关是余锁存器的Q非端相连的。P0口作为I/O口的时候,其由数据总线向引脚输出(即输出状态Output),其工作过程是:

当锁存器信号CP有效时,数据总线信号 ===> 锁存器输入端 ===> 锁存器的反向输出Q非端 ===> 多路开关 ===> V2管的栅极 ===> V2的漏极到输出端P0.X。

实际效果如下图

微信图片_20221019153142.png


⑦ P0口作为I/O 端口输入使用时的工作原理


数据输入时(读P0 口)有两种情况:

1、读引脚

读芯片引脚上的数据,读引脚的时候,读引脚缓冲器打开,也就是此时三态缓冲器的控制端要有效,通过内部数据总线进行输入。

image.png

2、读锁存器

通过打开读锁存器的三态缓冲器,读取锁存器输出端Q的状态微信图片_20221019153237.png


(2)P1 端口


P1 端口是具有输出锁存的静态口。

P1 口的结构最简单,用途也单一,仅作为数据输入/输出端口使用。输出的信息有锁存,输入有读引脚和读锁存器之分


P1 端口与P0 端口的主要差别在于,P1 端口用内部上拉电阻R 代替了P0 端口的场效应管V1,并且输出的信息仅来自内部总线。由内部总线输出的数据经锁存器反相和场效应管反相后,锁存在端口线上,所以,P1 端口是具有输出锁存的静态口。

微信图片_20221019153343.jpg

对于P1端口而言,想从引脚读取信息,需要使场效应管先关闭,以便于由外部输入的信息确定引脚的状态。

为此,在作引脚读入之前,必须先对该端口写入1。具备这种特征的输入/输出端口被称为准双向I/O口。51单片机中P1、P1、P3端口都是准双向口。因为P0端口的输出具有三态功能,输入前,端口线已经处于高阻态,无序进行先写入1才能进行读的操作。

单片机复位之后,P1、P2、P3端口的各个引脚会被自动写入1,此时可以直接进行输入操作的,如果在应用端口的过程中,人为的向P1——P3端口线输出过0,要再次输入的时候,必须先写入1,再读取引脚。


(3)P2 端口

微信图片_20221019153351.jpg

P2 端口在片内既有上拉电阻,又有切换开关,所以P2 端口在功能上兼有P0 端口和P1 端口的特点。

最主要体现在输出功能上:


当切换开关向下接通时,从内部总线输出的一位数据经与门和场效应管反相后,输出在端口引脚线上;

当切换开关向上接通时,输出的一位地址信号也经与门和场效应管反相后,输出在端口引脚线上。


P2 端口的多路开关总是在进行切换,分时地输出从内部总线来的数据和从地址信号线上来的地址,因此P2 端口是动态的I/O 端口,用来周期性地输出从外存中取指令的地址(高8 位地址)。


(4)P3 端口

P3 口是一个多功能口,它除了可以作为I/O 口外,还具有第二功能

微信图片_20221019153448.jpg

观察上面的结构图,P3 端口和Pl 端口的结构相似,区别仅在于P3 端口的各端口线有两种功能选择。


当处于第一功能时,第二输出功能线为1,此时,内部总线信号经锁存器和场效应管输入/输出,其作用与P1 端口作用相同,也是静态准双向I/O 端口。

当处于第二功能时,锁存器输出1,通过第二输出功能线输出特定的内含信号,在输入方面,即可以通过缓冲器读入引脚信号,还可以通过替代输入功能读入片内的特定第二功能信号。

由于输出信号锁存并且有双重功能,故P3 端口为静态双功能端口


P0、P1、P2、P3端口小总结


①P0 口是漏极开路,要使其输出高电平,必须外接上拉电阻,通常选择4.7K~10K 阻值。

②P0、P1、P2 几乎都用作普通I/O 口使用,既可作为输入,又可作为输出。

③P3 口既可用作普通I/O 口,又可作为第二功能使用,比如串口、外部中断、计数器等。


2.2、LED简介


LED

LED即发光二极管,具有单向导电性,通过5mA左右的电流就可以使其发光,电流越大,LED的亮度就越强。但是也得有个度,倘若电流太大,emmmm,灯也是会被烧毁的。常规情况下,我们会将电流控制在3mA ~ 20mA 之间。

这里还有一个小知识,为了避免不必要的烧毁,LED管脚上其实是串联了一个电阻的(串联分流),这个电阻也可以称为限流电阻,其主要目的是为了使通过发光二极管的电流不要太大。

当发光二极管正在发光时,测量它的两端电压,这个电压被叫做发光二极管的导通降压

常见的为直插式发光二极管和贴片式发光二极管实物图。

微信图片_20221019153554.jpg

 

发光二极管正极又称阳极,负极又称阴极,电流只能从阳极流向阴极。直插式发光二极管长脚为阳极,短脚为阴极。贴片式发光二极管正面的一端有彩色标记,通常有标记的一端为阴极。


2.3、硬件设计


开发板上LED 模块电路如下图所示

微信图片_20221019153602.png

① 别的花里花哨的咱先不看。首先找到咱们要点亮的LED灯,首先先进行实验一中的点亮第一个LED灯,也就是图中的D1。


② 要点亮它,那么得给它一个输入的电流吧。观察原理图,D1 ~ D8的LED灯分别和P2引脚的0~7的八个IO口相连,咱们要点亮D1,就需要对与其直接相连的P20进行操作了。


③ 原理图中LED 采用共阳接法,即所有LED 阳极管脚接电源VCC,阴极管脚通过一个471 欧的限流电阻接到P2 口上。根据前面LED 的介绍我们知道,要让LED 发光即对应的阴极管脚应该为低电平,若为高电平则熄灭。


因此就出现了上面代码中,使用sbit 关键字来定义P2.0 管脚,定义好后即可使用LED1 来替代P2.0口的操作再其为低电平的操作了。

#include "reg52.h"
sbit LED1=P2^0; //将P2.0 管脚定义为LED1
void main()
{
  LED1=0; //LED1 端口设置为低电平
  while(1)//这个循环放不放都没有影响的,出于考虑还在熟悉模板,就放吧
  {
  }
}

image.png

拓展——内存操作,单片机的灵魂微信图片_20221019153800.png

 

浅看编译后的结果,假如忘记了怎么编译的小伙伴可以看看这张图

微信图片_20221019153820.png

回归正题,编译之后首先看有没有报错和警告吧,然后重心就可以转到Program Size上了。。从编译信息可以看出,我们的代码占用FLASH 大小为:19 字节,所用的SRAM 大小为:9 个字节

微信图片_20221019153846.png

然后框出来的三个数据都要清楚,因为以后随时都要打交道的。

code:表示程序所占用FLASH 的大小。

data:数据储存器内部RAM 占用大小。

xdata:数据储存器外部RAM 占用大小。


3、总结


① 能够独立的把三个小项目的代码写出来,然后得到相应的实验效果就取得了很大的进步

② 能够清楚LED的基本构造,分清楚阳极和阴极,能够结合开发板的硬件设计来知道哪个引脚控制哪个LED灯

③ 这篇博客最重要的是GPIO的知识。知道什么是GPIO,知道GPIO用于输入输出就可以啦,至于拓展的端口知识

相关实践学习
实时数据及离线数据上云方案
本实验通过使用CANAL、DataHub、DataWorks、MaxCompute服务,实现数据上云,解决了数据孤岛问题,同时把数据迁移到云计算平台,对后续数据的计算和应用提供了第一步开山之路。
相关文章
|
6天前
4-2 51单片机点亮LED
4-2 51单片机点亮LED
15 2
|
6天前
|
数据格式
用C51单片机制作LED流水的灯
用C51单片机制作LED流水的灯
52 0
【51单片机】Kn独立按键控制【LED亮灭】【LED状态】【LED二进制式显示】【LED不断移位】(4)
【51单片机】Kn独立按键控制【LED亮灭】【LED状态】【LED二进制式显示】【LED不断移位】(4)
|
6天前
|
编译器 C语言 C++
【51单片机】LED的三个基本项目(LED点亮&LED闪烁&LED流水灯)(3)
【51单片机】LED的三个基本项目(LED点亮&LED闪烁&LED流水灯)(3)
定时器+按键控制LED流水灯模式+定时器时钟——“51单片机”
定时器+按键控制LED流水灯模式+定时器时钟——“51单片机”
|
6天前
|
C语言
独立按键控制LED亮灭、独立按键控制LED状态、独立按键控制LED显示二进制、独立按键控制LED移位——“51单片机”
独立按键控制LED亮灭、独立按键控制LED状态、独立按键控制LED显示二进制、独立按键控制LED移位——“51单片机”
|
6天前
|
C语言
点亮一个LED+LED闪烁+LED流水灯——“51单片机”
点亮一个LED+LED闪烁+LED流水灯——“51单片机”
|
6天前
51单片机实现led灯亮度变化!
51单片机实现led灯亮度变化!
14 0
|
6天前
|
传感器 物联网 C语言
单片机在智能家居中的应用:以LED灯控制为例
单片机在智能家居中的应用:以LED灯控制为例
76 0
单片机在智能家居中的应用:以LED灯控制为例
|
6天前
|
C语言
###51单片机学习-----如何通过C语言运用延时函数设计LED流水灯
###51单片机学习-----如何通过C语言运用延时函数设计LED流水灯
86 0