使用Arduino IO口内部上拉功能

ATmega328P 芯片内部其实有上拉的功能,我们可以使用 ATmega328P 内部的上拉功能替代外部上拉。ATmega328P Datasheet中有内部上拉的结构介绍,如下图:

介绍一下上拉电阻
在数字电路中,上拉电阻(英语:Pull-up resistors)是当某输入端口未连接设备或处于高阻抗的情况下,一种用于保证输入信号为预期逻辑电平的电阻元件。他们通常在不同的逻辑器件之间工作,提供一定的电压信号。

上拉电阻的作用
在上拉电阻所连接的导线上,如果外部组件未启用,上拉电阻将“微弱地”将输入电压信号“拉高”。当外部组件未连接时,对输入端来说,外部“看上去”就是高阻抗的。这时,通过上拉电阻可以将输入端口处的电压拉高到高电平。如果外部组件启用,它将取消上拉电阻所设置的高电平。通过这样,上拉电阻可以使引脚即使在未连接外部组件的时候也能保持确定的逻辑电平。

本次实验你将可能会用到如下器件
5MM红色LED、220Ω电阻、微动开关、标准面包板、Arduino、导线若干

面包板的接线图如下

可以看到,按键部分去掉上拉电阻后将变的非常简单。

程序如下

void setup ()
{
  pinMode(2,INPUT_PULLUP); //将2号管脚设置为输入并且内部上拉模式
  pinMode(12,OUTPUT);
}

void loop()
{
  int n =digitalRead(2); //创建一个变量n,将4号数字口的状态采集出来赋值给他。
  if (n==LOW) //判断n是否为低电平,如果是执行下面的语句,不是则跳过。
  {
    delay(1000);
    digitalWrite(12,HIGH);
    delay(5000);
    digitalWrite(12,LOW);

  }
}

这个程序的核心就是下面这句代码

pinMode(2,INPUT_PULLUP);

定义了2号引脚为INPUT_PULLUP模式意味着该引脚为输入模式,并且被拉高,这就是为什么按键接到了GND
当按键按下时,2号管脚变为GND,这样就完成了按键的功能
因为ATmega328P单片机管脚默认是高电平,所以我们通常设定低电平有效,这样就可以避免误触发

提示:ATmega328P仅仅只有内上拉功能,没有下拉功能哦!



坐沙发

发表评论