S2.2 最简单的单片机操作

S2.2 io操作

专有名词我会用加粗进行提示,这需要你自行搜索是什么含义
你要做的任务是跟着文章做一遍,然后知道我说的一些名词是什么意思即可。

搭建电路

我们首先搭建一个这样的电路,我们从最简单的LED电路开始。他分别由 VCC 、 蓝色LED灯、 330Ω电阻 、 单片机本体组成。 C51

电路分析

我想你已经注意到了,单片机有许多 引脚 ,从左面有P1.0-P1.7,右面有P0.0-P0.7,还有P2,P3……
我们的大部分内容就是通过控制这些外围引脚来实现设计,以上面最简单的电路举例,我们暂时以一个最简单的数电思维来理解。我们姑且认为电路只有开与关两种状态,这分别用0和1来表示。最开始未定义的引脚处于 高阻态,你可以认为这是断路(实际上这是不对的,自己去搜什么意思),我们对目前的电路进行如下分析。 analyze

红色的线代表电流本应流动的方向(即压差形成的电流流动),蓝色线代表着此时电路的线路,黑色线代表着默认情况下单片机的 高阻态 表示,我们可以看到高阻态将电路的环路截断了(即电压无法到达 GND),所以默认情况下这两颗灯都不会亮。

编写程序

我提供一个非常简单的源码

#include <reg51.h>

void main(){
 	P0 = 0X0F;
}

当我们将源码烧写到芯片之后我们会发现这样的效果 C51LED2 也就是说上方的LED还是不亮的,下方的LED开始发光。学过C语言肯定知道,<reg51.h> 是一个c51单片机的库,真正有效的代码只有:

P0 = 0X0F;

他做的是将P0引脚所使用的寄存器进行赋值,它可以是0x0F,也可以是0b00001111,都是同一个意思。至于前面的0x与0b这是你的C语言功底,如果你不了解可以看 这篇文章

P0 = 0x0f本质上就是给所对应的寄存器进行赋值,而单片机的输出正是由这些寄存器控制。为了直观理解 0x0F 与 0b00001111是等价的,那此时就对应了

  • P0.7: 低电平(0)
  • P0.6: 低电平(0)
  • P0.5: 低电平(0)
  • P0.4: 低电平(0)
  • P0.3: 高电平(1)
  • P0.2: 高电平(1)
  • P0.1: 高电平(1)
  • P0.0: 高电平(1)

所以P0.0口为高电平,电压与VCC近似,此时没有压差LED灯熄灭,P0.7口为低电平,有VCC -> P0.7的压差,电流通过发光二极管,从而使LED灯被点亮。至此,最基本的单片机电路介绍完成。

作业

  1. 搭建相似的电路,点亮全部的LED灯。(提供图片)
  2. 为什么搭建的电路使用VCC提供电势差的形式点亮LED灯,而不是通过单片机输出高电平流经单片机到GND直接点亮。(提供回答)

两个一起发送到邮箱。lab700_hlju@163.com

Licensed under CC BY-NC-SA 4.0