💓2、为什么代码要这种写呢
咱们先系统的认识一下单片机上最为突出的GPIO引脚吧~
🌃 2.1、51 单片机GPIO 介绍
🌻一、 GPIO 概念
GPIO的全称是general purpose intput output。从这个英文名字中的input和output应该可以发现这东西应该是和输入输出有关的。
GPIO(general purpose intput output)是通用输入输出端口的简称,可以通过软件来控制其输入和输出
。51 单片机芯片的GPIO 引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能
GPIO最入门的玩法就是上文代码中的点亮LED灯了。
对于现阶段而言,以下内容是拓展知识,浅浅过一遍,心中有个底就好,后面随着实验的开展,潜移默化中会更加熟悉这些知识点
我们开发板上使用的51 单片机型号是STC89C52 或STC89C516,此芯片共有40 引脚
,芯片引脚图如下图所示:
大致的扫一遍芯片引脚图,看着可能依旧是比较蒙的,继续跟着我的思路走吧。
其实可以看到不是所有引脚都是GPIO引脚
的。
系统的说来,单片机的引脚大致分为以下五种:
(1)电源引脚:引脚图中的VCC、VSS/GND 都属于电源引脚。
(2)晶振引脚:引脚图中的XTAL1、XTAL2 都属于晶振引脚。
(3)复位引脚:引脚图中的RST/VPD 属于复位引脚,不做其他功能使用。
(4)下载引脚:51 单片机的串口功能引脚(TXD、RXD)可以作为下载引脚使用。
(5) GPIO 引脚:引脚图中带有Px.x 等字样的均属于GPIO 引脚。
从引脚图可以看出,GPIO 占用了芯片大部分的引脚,共达32
个,分为了4 组,P0、P1、P2、P3,每组为8 个IO
,而且在P3 组中每个IO 都具备额外功能,只要通过相应的寄存器设置即可配置对应的附加功能,同一时刻,每个引脚只能使用该引脚的一个功能。
学习建议:
单单基础的51就有这么多引脚了,假如到了STM32,引脚就更多的了,咱们需要做的其实只是浅浅的知道它们是什么,这些引脚的具体功能是可以根据配套的芯片资料中查阅到。
随着大家的修为逐渐增长了,其实开发板芯片原理图已经将引脚所有功能都标进去的,所以后面也不需要这么麻烦的查找具体引脚有什么功能,直接看原理图即可喔。
STC89Cxx中文参考手册.pdf——已上传到gitee ^ - ^
💒二、 GPIO 结构框图与工作原理
对于当前来说,知道GPIO是用于输入输出的这点其实就够了
,
下面的结构图和工作原理阐述的是数字电路的知识,现阶段不会它们丝毫不影响咱们把小灯灯搞亮
,根据小伙伴们的选择进行阅读吧。
倘若想了解底层原理的话可以耐心慢慢读,假如想知道咱们的LED灯到底是怎么点亮的了,就可以直接读下面的LED简介模块的
51单片机的GPIO引脚主要是有四组,咱们详细剖析P0端口,其他三个端口可以从P0端口的理解中类比。
🌱(1)P0 端口
先浅看一下P0端口的结构框图,从分析结构图的各个模块,同时也就能够加深对一些数字电路的理解。
在没有数电基础下,直接看端口的结构框图可能够呛。建议跟着我的描述,一点一点的理解。
观察上图,P0 端口由锁存器
、输入缓冲器
、切换开关(或者说是多路开关)
、一个非门
、一个与非门
及场效应管驱动电路(即上图中的V1、V2)
构成。
图的最右边,标号为P0.x 引脚的图标,也就是说P0.x 引脚可以是P0.0 到P0.7 的任何一位,即在P0 口有8 个与上图相同的电路组成。
这几个电路中,容易混淆的应该是门电路这里吧,其他的电路的图标都可以直接从结构框图找到的。趁着看P0端口,顺便把门电路的知识点记录一下。
🍈① 数字门电路——掌握与门、或门、非门
现阶段,知道有七种(完整是有八种的)逻辑门电路以及它们对应的电路符号。
然后能够根据咱们学习的编程知识中按位与(&)、按位或(|)、按位非(!)
去理解逻辑门电路中的与门、或门、非门就可以了😊😊😊
还是那句话,这些知识能了解,能够学会是最好的,倘若觉得看着头痛,也可以暂时不理它们的。这些这是内功,决定以后成长的高度,不影响当前
下面开始划重点了
① 与门
② 或门
③ 非门
④ 组合
了解这五个基础而且常用的就好。假如想深入学习或者了解得更加全面可以看看下面这篇文献,我自己是参考这么博主的博客进行的总结,或者也可以自行搜索。
详细知识请参考这篇文献——这几个基础门电路都不懂还怎么混电子圏?
🍓 ② 输入缓冲器——认识三态门+缓冲器
① 浅识三态门:
三态指其输出既可以是一般二值逻辑电路,即正常的高电平(逻辑1)或低电平(逻辑0),还可以保持特有的高阻抗状态
。高阻态相当于隔断状态(电阻很大,相当于开路)。高阻态的意义在于实际电路中不可能断开电路。三态电路的输出逻辑状态的控制,是通过一个输入引脚实现的。
三态门都有一个EN控制使能端,来控制门电路的通断。 可以具备这三种状态的器件就叫做三态器件。
当EN有效时,三态电路呈现正常的0或1
的输出;
当EN无效时,三态电路给出高阻态输出。
② 缓冲器
缓冲寄存器又称缓冲器(buffer)
,它分输入缓冲器和输出缓冲器两种。
前者的作用是将外设送来的数据暂时存放,以便处理器将它取走;
后者的作用是用来暂时存放处理器送往外设的数据。
有了数控缓冲器,就可以使高速工作的CPU与慢速工作的外设起协调和缓冲作用,实现数据传送的同步。由于缓冲器接在数据总线上,故必须具有三态输出功能
③ 原理运用
P0端口中主要是有两个三态缓冲器。
上面一个是读锁存器的缓冲器,也就是说,要读取D 锁存器输出端Q 的数据,那就得使读锁存器的这个缓冲器的三态控制端(上图中标号为读锁存器
端)有效。
下面一个是读引脚的缓冲器,要读取P0.x引脚上的数据,也要使标号为读引脚
的这个三态缓冲器的控制端有效,引脚上的数据才会传输到我们单片机的内部数据总线上。
🍒 ③ D 锁存器—— 认识D触发器
构成一个锁存器,依赖时序电路。
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 端口输出使用时的工作原理
了解逻辑门的作用+巩固锁存器
P0端口作为I/O端口使用的时候,多路开关的控制信号为0(低电平),上图中的控制信号,也就是那根红线是和与门连接在一起的,与门的工作原理是全1则1,有0则0
。所以与门输出的是一个低电平(0),那么V1管这儿就截止了。
在多路控制开关的信号是0的时候,多路开关是余锁存器的Q非端相连的。P0口作为I/O口的时候,其由数据总线向引脚输出(即输出状态Output
),其工作过程是:
当锁存器信号CP有效时,数据总线信号 ===> 锁存器输入端 ===> 锁存器的反向输出Q非端 ===> 多路开关 ===> V2管的栅极 ===> V2的漏极到输出端P0.X。
实际效果如下图
📁 ⑦ P0口作为I/O 端口输入使用时的工作原理
数据输入时(读P0 口)有两种情况:
1、读引脚
读芯片引脚上的数据,读引脚的时候,读引脚缓冲器打开,也就是此时三态缓冲器的控制端要有效,通过内部数据总线进行输入。
2、读锁存器
通过打开读锁存器的三态缓冲器,读取锁存器输出端Q的状态
好了,详细分析了P0端口的内部逻辑,输入输出流程,下面的P1、P2、P3端口就换汤不换药啦
?(2)P1 端口
P1 端口是具有输出锁存的静态口。
P1 口的结构最简单,用途也单一,仅作为数据输入/输出端口使用。输出的信息有锁存,输入有读引脚和读锁存器之分
P1 端口与P0 端口的主要差别在于,P1 端口用内部上拉电阻R 代替了P0 端口的场效应管V1,并且输出的信息仅来自内部总线。由内部总线输出的数据经锁存器反相和场效应管反相后,锁存在端口线上,所以,P1 端口是具有输出锁存的静态口。
对于P1端口而言,想从引脚读取信息,需要使场效应管先关闭,以便于由外部输入的信息确定引脚的状态。
为此,在作引脚读入之前,必须先对该端口写入1
。具备这种特征的输入/输出端口被称为准双向I/O口。51单片机中P1、P1、P3端口都是准双向口。因为P0端口的输出具有三态功能,输入前,端口线已经处于高阻态,无序进行先写入1才能进行读的操作。
单片机复位之后,P1、P2、P3端口的各个引脚会被自动写入1,此时可以直接进行输入操作的,如果在应用端口的过程中,人为的向P1——P3端口线输出过0,要再次输入的时候,必须先写入1,再读取引脚。
🎒(3)P2 端口
P2 端口在片内既有上拉电阻,又有切换开关,所以P2 端口在功能上兼有P0 端口和P1 端口的特点。
最主要体现在输出功能上:
当切换开关向下接通时,从内部总线输出的一位数据经与门和场效应管反相后,输出在端口引脚线上;
当切换开关向上接通时,输出的一位地址信号也经与门和场效应管反相后,输出在端口引脚线上。
P2 端口的多路开关总是在进行切换,分时地输出从内部总线来的数据和从地址信号线上来的地址,因此P2 端口是动态的I/O 端口,用来周期性地输出从外存中取指令的地址(高8 位地址)。
🔯(4)P3 端口
P3 口是一个多功能口,它除了可以作为I/O 口外,还具有第二功能
观察上面的结构图,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管脚上其实是串联了一个电阻的(串联分流),这个电阻也可以称为限流电阻,其主要目的是为了使通过发光二极管的电流不要太大。
当发光二极管正在发光时,测量它的两端电压,这个电压被叫做发光二极管的导通降压
常见的为直插式发光二极管和贴片式发光二极管实物图。
发光二极管正极又称阳极,负极又称阴极,电流只能从阳极流向阴极
。直插式发光二极管长脚为阳极,短脚为阴极。贴片式发光二极管正面的一端有彩色标记,通常有标记的一端为阴极。
🌆2.3、硬件设计
开发板上LED 模块电路如下图所示
① 别的花里花哨的咱先不看。首先找到咱们要点亮的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口的操作再其为低电平的操作了。