Arduino教程入门系列-第二十三课-使用IO口内部上拉功能 教程,按键,功能,LED灯

在《Arduino入门教程--第四课--按钮控制的LED延时开关》中,我们学习了按键控制LED灯,当时我们在按键下拉了一个10K的电阻来确保按键稳定,不会误触发
有人会问,如果我们去掉这个下拉电阻,有没有办法达到和之前一样的效果呢?
答案是肯定的。

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

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

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

本次实验你将可能会用到如下器件
器件 数量
5MM红色LED 1
220Ω电阻 1
超大微动开关 1
标准面包板 1
Arduino mango控制板 1
面包板专用跳线盒 1
引脚整形器 1

面包板的接线图如下

Untitled Sketch_bb.jpg

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

程序如下
ARDUINO 代码复制打印

/*
作者:极客工坊
时间:2012年12月18日
IDE版本号:1.0.1
发布地址:www.geek-workshop.com
作用:使用单片机内部上拉实现按键功能
*/
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);
 
}
}

这个程序的核心就是下面这句代码
ARDUINO 代码复制打印

pinMode(2,INPUT_PULLUP);

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

提示:ATmega328P仅仅只有内上拉功能,没有下拉功能哦!
via - 极客工坊

标签: Arduino教程