0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用数字读/写引脚

科技观察员 来源:circuitdigest 作者:阿斯文斯·拉吉 2022-11-18 14:47 次阅读

在本教程中,我们将学习如何使用数字读取和数字写入选项来读取输入设备(如开关)的状态,并控制多个输出(如 LED)。在本教程结束时,您将学习使用数字输入和输出,它可用于连接许多数字传感器,如红外传感器、PIR 传感器等,还可以打开或关闭输出,如 LED、蜂鸣器等。听起来很有趣吧!!?让我们开始吧。

所需材料:

MSP430G2 启动板

任何颜色的 LED – 8

开关 – 2

1k 电阻器 – 8

连接线

电路图:

在之前的教程中,我们注意到发射台本身在板上有两个 LED 和一个开关。但是在本教程中,我们将需要更多,因为我们计划在按下按钮时按顺序点亮八个 LED 灯。我们还将在按下另一个按钮时更改顺序,以使其有趣。所以我们必须建立一个带有8个LED灯和两个开关的电路,完整的电路图可以在下面找到。

pYYBAGN3KouAdhs1AAB1kvg_WyY891.png

这里的8个LED是输出,两个开关是输入。我们可以将它们连接到电路板上的任何 I/O 引脚,但我已将 LRD 从引脚 P1.0 连接到 P2.1,并将开关 1 和 2 分别连接到引脚 P2.4 和 P2.3,如上所示。

LED的所有阴极引脚都接地,阳极引脚通过电阻连接到I/O引脚。该电阻器称为限流电阻器,此电阻器对于 MSP430 不是必需的,因为它的 I/O 引脚可以提供的最大电流仅为 6mA,引脚上的电压仅为 3.6V。但是,使用它们是一个很好的做法。当这些数字引脚中的任何一个变为高电平时,相应的 LED 将亮起。如果你能回忆起上一个教程的LED程序,那么你就会记得数字写入(LED_pin_name,高)将使LED发光,数字写入(LED_pin_name,低)将使LED转动。

开关是输入设备,开关的一端连接到接地端子,另一端连接到数字引脚P2.3和P2.4。这意味着每当我们按下开关时,I/O 引脚(2.3 或 2.4)都将接地,如果不按下按钮,I/O 引脚将保持空闲状态。让我们看看如何在编程时使用这种安排。

编程说明:
当按下开关 1 时,必须编写程序以顺序方式控制 8 LED,然后当按下开关 2 时,必须更改顺序。完整的程序和演示视频可以在此页面底部找到。下面我将逐行解释程序,以便您轻松理解。

与往常一样,我们应该从 void setup() 函数开始,在该函数中,我们将声明我们使用的引脚是输入或输出引脚。在我们的程序中,输出 8 个 LED 引脚,输入 2 个开关。这 8 个 LED 从 P1.0 连接到 P2.1,即电路板上的引脚编号 2 到 9。然后将开关连接到引脚P2.3和引脚2.4,分别是引脚编号11和12。所以我们在 void setup() 中声明了以下内容

void setup() {
for (int i = 2; i <= 9; i++) {
pinMode(i, OUTPUT);
}
for (int i = 2; i <= 9; i++) {
digitalWrite(i, LOW);
}
pinMode (11, INPUT_PULLUP);
pinMode (12, INPUT_PULLUP);
}
众所周知,pinMode() 函数将引脚声明为输出或输入,而 digitalWrite() 函数使其高电平 (ON) 或低电平 (OFF)。我们使用 for 循环来做出此声明以减少行数。变量 “i” 将在 for 循环中从 2 递增到 9,并且对于每个增量,将执行其中的函数。另一件可能让您感到困惑的事情是术语“INPUT_PULLUP”。只需调用函数pinMode(Pin_name,INPUT)即可将引脚声明为输入,但在这里我们使用了INPUT_PULLUP而不是INPUT,它们都有明显的变化。

当我们使用任何微控制器引脚时,该引脚应连接到低电平或高电平。在这种情况下,引脚 11 和 12 连接到开关,按下时开关将接地。但是,当开关未按下时,引脚未连接到任何内容,这种情况称为浮动引脚,对微控制器不利。因此,为了避免这种情况,我们要么使用上拉电阻器,要么使用下拉电阻器,在引脚浮动时将引脚保持在某种状态。在 MSP430G2553 微控制器中,I/O 引脚内置了一个上拉电阻。要使用它,我们所要做的就是在声明期间调用 INPUT_PULLUP 而不是 INPUT,就像上面所做的那样。

现在让我们进入 void loop() 函数。在此函数中编写的任何内容都将永远执行。我们程序的第一步是检查开关是否被按下,如果按下,我们应该开始按顺序闪烁 LED。要检查按钮是否按下,请使用以下行

if (digitalRead(12) == LOW)
这里的新功能是digitalRead()函数,该函数将读取数字引脚的状态,并在引脚获得一定电压时返回HIGH(1),当引脚接地时返回低LOW(0)。在我们的硬件中,只有当我们按下按钮时,引脚才会接地,否则它会很高,因为我们使用了上拉电阻。所以我们使用 if 语句来检查按钮是否被按下。

按下按钮后,我们进入无限 while (1) 循环。这是我们开始按顺序闪烁 LED 的地方。下面显示了一个无限的while循环,循环中写入的任何内容都将永远运行,直到中断;使用语句。

whiel(1){
}
在无限内,我们检查连接到引脚 11 的第二个开关的状态。

如果按下此开关,我们将按一个特定顺序闪烁 LED,否则我们将以另一个顺序闪烁。

if (digitalRead(11) == LOW)
{
for (int i = 2; i <= 9; i++)
{
digitalWrite(i, HIGH);
delay(100);
}
for (int i = 2; i <= 9; i++)
digitalWrite(i, LOW);
}
为了按顺序闪烁 LED,我们再次使用 for 循环,但这次我们使用 delay(100) 函数使用 100 毫秒的小延迟,以便我们可以注意到 LED 变高。为了一次只使一个LED发光,我们还使用另一个for回路来关闭所有LED。因此,我们打开 LED 等待一段时间,然后关闭所有 LED,然后增加计数打开 LED 等待一段时间,循环继续。但只要不按下第二个开关,这一切都会发生。

如果按下第二个开关,然后我们更改顺序,程序将或多或少与 LED 打开的顺序相同。下面显示的行尝试查看并找出已更改的内容。


else
{
for (int i = 9; i >= 2; i--)
{
digitalWrite(i, HIGH);
delay(100);
}
for (int i = 2; i <= 9; i++)
digitalWrite(i, LOW);
}
是的,for 循环已更改。以前,我们让 LED 从数字 2 一直发光到 9。但是现在我们将从数字 9 开始,一直减少到 2。这样我们就可以注意到开关是否被按下。

闪烁 LED 序列的硬件设置:

好的,所有的理论和软件部分都足够了。让我们获取一些组件,看看该程序的实际效果。该电路非常简单,因此可以很容易地构建在面包板上。但是我已经在性能板上焊接了LED和开关,只是为了让它看起来整洁。我焊接的性能板如下所示。

poYBAGN3Ko2AcVBFAADEGutBH7Y102.jpg

如您所见,我们将LED和开关的输出引脚作为连接器引脚取出。现在,我们已经使用母对母连接器线连接 LED 并切换至 MSP430 LaunchPad 板,如下图所示。

pYYBAGN3Ko-AaZrGAADxwel-DSk191.jpg

上传和工作:

完成硬件操作后,只需将MSP430板连接到计算机并打开Energia IDE并使用本页末尾给出的程序即可。确保在Energia IDE中选择了正确的电路板和COM端口,然后单击“上传”按钮。该程序应该编译成功,上传后将显示“完成上传”。

现在按下板上的按钮 1,LED 应按顺序亮起,如下所示

poYBAGN3KpSATY2mAADkKLoy-IY508.jpg

您也可以按住第二个按钮来检查顺序是否被更改。

/*

TUTORIAL 2 - Learning to use I/O

This program will control 8 LEDs based ont he input from two push button

LED should be connected form P1.0 to P2.1 (pin 2 to 7)

Switch is connected to P2.3 and P2.4 (pin 8 and 9)

*/


void setup() {

for (int i = 2; i <= 9; i++) {

pinMode(i, OUTPUT);

}

for (int i = 2; i <= 9; i++) {

digitalWrite(i, LOW);

}



pinMode (11, INPUT_PULLUP);

pinMode (12, INPUT_PULLUP);

}


// the loop routine runs over and over again forever:

void loop() {


if (digitalRead(12) == LOW)

{

while (1)

{

if (digitalRead(11) == LOW)

{

for (int i = 2; i <= 9; i++) 

{

digitalWrite(i, HIGH);

delay(100);

}

for (int i = 2; i <= 9; i++)

digitalWrite(i, LOW);

}

else

{

for (int i = 9; i >= 2; i--)

{

digitalWrite(i, HIGH);

delay(100);

}

for (int i = 2; i <= 9; i++)

digitalWrite(i, LOW);

}

}

}

}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • led
    led
    +关注

    关注

    240

    文章

    22899

    浏览量

    649956
  • 输入设备
    +关注

    关注

    0

    文章

    22

    浏览量

    8453
  • MSP430G2
    +关注

    关注

    1

    文章

    17

    浏览量

    12871
收藏 人收藏

    评论

    相关推荐

    DDR 1&2&3的“”和“”眼图分析

    DDR 1&2&3的“”和“”眼图分析:现在不论做主板设计或测试的工程师,还是做内存或DDR芯片设计或测试的工程师都会面临这样一个问题:如何能够分离出“”和“
    发表于 09-14 08:05 35次下载

    电池管理器件的/操作

    电池管理器件的/操作 Dallas Semiconductor 的电池管理IC 采用相同的通信协议和相同的存储器地址不同类型的存储器可以分别进行/操作本应用笔记阐述了唯
    发表于 04-12 08:50 21次下载

    C语言教程之/BIOS计时器

    C语言教程之/BIOS计时器,很好的C语言资料,快来学习吧。
    发表于 04-25 16:49 0次下载

    使用寄存器级&控制基于PXI平台的FPGA

    SVF)和软件控制例程。概述了如何使用GX3500设计128通道的静态I/O。此设计实例配置为4组32通道双向引脚,双缓冲结构支持同步更新128通道逻辑状态的。使用Altera Quartus II软件。
    发表于 09-27 17:46 10次下载

    如何使用寄存器级&控制基于PXI平台的FPGA

    如何使用寄存器级&控制基于PXI平台的FPGA
    发表于 10-16 15:20 14次下载
    如何使用寄存器级<b class='flag-5'>读</b>&<b class='flag-5'>写</b>控制基于PXI平台的FPGA

    如何使用寄存器级&控制基于PXI平台的FPGA

    如何使用寄存器级&控制基于PXI平台的FPGA
    发表于 10-19 08:48 12次下载

    MCS-51单片机指令系统“-改-”指令

    单片机首先将欲修改的寄存器的内容回ALU,对相应位进行修改,然后再整个写回原来的寄存器地址,完成该功能的指令就叫做“-改-”指令。 锁存器和
    发表于 11-23 13:38 1566次阅读

    NXP MFRC523高集成/器的主要特性及应用

    MFRC523是NXP公司的一个的高集成/器,用于13.56MHz频率的非接触式通信。MFRC523阅读器支持ISO/IEC 14443 A/MIFARE模式。MFRC523的内部发射器无需额外
    的头像 发表于 01-21 17:48 3929次阅读
    NXP MFRC523高集成<b class='flag-5'>读</b>/<b class='flag-5'>写</b>器的主要特性及应用

    具有/遥测功能的μ模块调节器

    具有/遥测功能的μ模块调节器
    发表于 04-30 11:18 3次下载
    具有<b class='flag-5'>读</b>/<b class='flag-5'>写</b>遥测功能的μ模块调节器

    PIC何谓-修改-,导致的问题及其解决之道

    何谓-修改-,导致的问题及其解决之道: 只要PICmicro的命令,所处理的FILE (暂存器,内存,和I/O的统称),其最终的值,和命令处理前的值有关,那么,这种命令便是所谓的-修改-
    发表于 11-16 15:51 2次下载
    PIC何谓<b class='flag-5'>读</b>-修改-<b class='flag-5'>写</b>,导致的问题及其解决之道

    51单片机引脚端口测试总结

    51的P0 - P3都是准双向I/O端口,作为输入端口时需要先将其置1,然后再读取引脚状态。这里抛开汇编,单纯讲下C51编程时的哪种情况是引脚、哪种情况是端口,以及
    发表于 11-23 16:23 7次下载
    51单片机<b class='flag-5'>读</b><b class='flag-5'>引脚</b>和<b class='flag-5'>读</b>端口测试总结

    车载ECU嵌入式设备的诊断测试–

    本篇讲述UDS中的服务,读写服务几乎是工程师日常使用最为频繁的服务,特别是服务。
    的头像 发表于 10-28 15:43 748次阅读
    车载ECU嵌入式设备的诊断测试–<b class='flag-5'>读</b>和<b class='flag-5'>写</b>

    使用System IO Ports SerialPort进行串行/

    电子发烧友网站提供《使用System IO Ports SerialPort进行串行/.zip》资料免费下载
    发表于 11-21 09:56 0次下载
    使用System IO Ports SerialPort进行串行<b class='flag-5'>读</b>/<b class='flag-5'>写</b>

    MegaRAID CacheCade Pro 2.0/缓存软件

    电子发烧友网站提供《MegaRAID CacheCade Pro 2.0/缓存软件.pdf》资料免费下载
    发表于 08-22 10:59 0次下载
    MegaRAID CacheCade Pro 2.0<b class='flag-5'>读</b>/<b class='flag-5'>写</b>缓存软件

    为什么异步fifo中地址同步在时钟域时序分析不通过?

    为什么异步fifo中地址同步在时钟域时序分析不通过? 异步FIFO中地址同步在时钟域时序分析不通过的原因可能有以下几个方面: 1.
    的头像 发表于 10-18 15:23 558次阅读