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

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

3天内不再提示

使用IO引脚作为输入控制LED的教程

科技观察员 来源:circuitdigest 作者:Sourav Gupta 2022-08-10 16:26 次阅读

在本教程中,我们将学习如何使用另一个IO 引脚作为输入并控制额外的 LED。在不浪费太多时间的情况下,让我们评估一下我们需要什么样的硬件设置。

硬件设置和要求

由于需要将开关用作输入,我们首先需要的是一个按钮。我们还需要一个额外的 LED 来由该按钮控制。除了这两个之外,我们还需要一个电阻器来限制 LED 电流,以及一个用于下拉按钮的附加电阻器。这将在示意图部分进一步说明。我们需要的组件 -

一个按钮(任何种类的瞬时开关,特别是触觉开关)

LED的任何颜色

4.7k 下拉电阻

100R电阻

更不用说,除了上述组件,我们还需要基于N76E003 微控制器的开发板以及Nu-Link 编程器。此外,还需要面包板和连接线来连接所有组件,如下所示。

poYBAGLzaxWAb0ZAAAgFYBZm4kU983.png

N76E003 LED和按钮接口电路

正如我们在下面的示意图中看到的,开发板内部的测试 LED 连接在端口 1.4上,另外一个 LED 连接在端口 1.5上。电阻 R3 用于限制 LED 电流。

poYBAGLzaxGAdnqZAABdkXrjiFk951.png

在引脚 1.6 中,连接了一个名为 SW 的按钮。每当按下按钮时,引脚将变为高电平。否则会被 4.7K的下拉电阻R1 拉低。

该引脚也是编程器访问的与程序相关的引脚。它用于发送程序数据。但是,我们将看到选择这些引脚的原因,并获得有关N76E003 引脚映射的公平信息

N76E003 引脚图

N76E003的引脚图如下图所示——

poYBAGLzaw2AUJsyAAGf4FH534E652.png

正如我们所看到的,每个引脚都有多种功能,可以用于不同的目的。让我们举个例子。引脚 1.7 可用作中断、模拟输入或通用输入输出操作。因此,如果任何引脚用作 I/O 引脚,则相应的功能将不可用。

因此,用作 LED 输出引脚的引脚 1.5 将失去 PWM 和其他功能。但这不是问题,因为该项目不需要其他功能。之所以选择引脚 1.5 作为输出,引脚 1.6 作为输入,是因为 GND 和 VDD 引脚最近可用,便于连接。

但是,在这个微控制器的 20 个引脚中,有 18 个引脚可以用作 GPIO 引脚。引脚 2.0 专用于复位输入,不能用作输出。除此引脚外,所有引脚均可配置为下述模式。

pYYBAGLzawmAYLvzAACA3ltsVFc528.png

根据数据表,PxM1.n 和 PxM2.n 是两个寄存器,用于确定 I/O 端口的控制操作。现在,开始写入和读取 GPIO 端口是完全不同的事情。因为写入端口控制寄存器会改变端口的锁存状态,而读取端口会获得逻辑状态的状态。但要读取端口,必须将其设置为输入模式。

N76E003 的简单 GPIO 控制程序

本教程使用的完整程序可以在本页底部找到,代码解释如下。

将引脚设置为输入

让我们先从输入开始。如前所述,要读取端口的状态,需要将其设置为输入。因此,由于我们选择了 P1.6 作为我们的输入开关引脚,我们通过下面的代码片段行来表示它。

#define SW P16

需要将相同的引脚设置为输入。因此,在设置功能上,使用下面的行将引脚设置为输入。

无效设置(无效){

P14_准模式;

P15_准模式;

P16_输入模式;

}

这一行P16_Input_Mode; 在“BSP include library”的Function_define.h头文件中定义,将pin位设置为P1M1|=SET_BIT6; P1M2&=~SET_BIT6。SET_BIT6也在同一个头文件中定义为 -

#define SET_BIT6 0x40

将引脚设置为输出

与输入引脚相同,板载测试 LED 和外部 LED1 使用的输出引脚也在代码的第一部分中定义了各自的引脚。

#define Test_LED P14

#define LED1 P15

这些引脚使用以下行在设置函数中设置为输出。

无效设置(无效){

P14_Quasi_Mode; // 输出

P15_准模式;// 输出

P16_输入模式;

}

这些行也在Function_define.h头文件中定义,它将引脚位设置为P1M1&=~SET_BIT4; P1M2&=~SET_BIT4。SET_BIT6也在同一个头文件中定义为 -

#define SET_BIT4 0x10

无限循环

一个硬件,如果连接到电源并且工作正常,应该连续输出,应用程序永远不会停止。它无限次地做同样的事情。无限while循环的功能来了。while 循环内的应用程序无限运行。

而(1){

Test_LED = 0;

sw_delay(150);

测试_LED = 1;

sw_delay(150);

如果(SW == 1){

LED1 = 0;

}

其他 {

LED1 = 1;

}

}

}

上面的 while 循环根据sw_delay值使 LED 闪烁,并检查 SW 的状态。如果开关被按下,P1.6 为高电平,因此当按下时,读取状态为 1。在这种情况下,当开关被按下并且端口 P1.6 保持高电平时, LED1 将发光。

对 N76E003 进行编程并验证输出

在我们的 N76E003 入门教程中,我们已经学习了如何对 N76E003 进行编程,因此我们将在这里重复相同的步骤来对我们的电路板进行编程。代码编译成功,返回0个warning和0个Errors,使用Keil默认的刷机方式刷机。

pYYBAGLzawOAeEq0AAU8QbGQxg0655.png

如上图所示,当我按下按钮时,我们的外部 LED 会亮起。

#include "N76E003.h"
#include "SFR_Macro.h"
#include "函数定义.h"
#include "Common.h"
#include "延迟.h"
#define Test_LED P14
#define LED1 P15
#define SW P16
无效设置(无效);
无效 sw_delay (int ms);

无效的主要(无效){
设置();
而(1){ Test_LED = 0;

sw_delay(150);
测试_LED = 1;
sw_delay(150);
如果(SW == 1){
LED1 = 0;
}
别的 {
LED1 = 1;
}

}
}

// 基于软件的延迟。时间不准确。
无效 sw_delay (int ms){
整数a,b;
对于(a=0;a<1296;a++){
对于 (b=0; b }

}

//这是应用程序运行前的设置文件
无效设置(无效){
P14_准模式;
P15_准模式;
P16_输入模式;
}

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

    关注

    242

    文章

    23252

    浏览量

    660540
  • LED闪烁
    +关注

    关注

    0

    文章

    29

    浏览量

    9818
  • IO引脚
    +关注

    关注

    0

    文章

    10

    浏览量

    9406
收藏 人收藏

    评论

    相关推荐

    STM32按键控制LED的亮灭

    使用一个按键控制LED的亮灭,按键按下时LED亮起,按键松开时LED熄灭。通过按键控制实验来介绍下 IO
    的头像 发表于 12-11 14:19 3778次阅读
    STM32按键<b class='flag-5'>控制</b><b class='flag-5'>LED</b>的亮灭

    stm32g030j6m6串口如何烧录程序,NRST引脚能否在作为输入IO使用时不复位?

    ; 2.使用SWD下载,NRST引脚必须作为输入,但外部输入低电平时,MCU会复位。 问:串口如何烧录程序,NRST引脚能否在
    发表于 03-11 07:48

    无线io输入控制模块

    工业 大为智通公司隆重推出交流220v无线io输入控制模块dw-j31系列设备,这款设备的特点:(1)设备供电直接采用交流220v,(2)输入采集端接交流220v信号的无线plc工业
    发表于 07-10 15:55

    FPGA Cyclone IV扩展IO作为输入时的电平判断

    在设计系统的过程中,我需要将CycloneIV的扩展IO作为普通的输入引脚来检测外部的输入信号,请问对外部
    发表于 03-16 14:46

    FPGA的扩展IO引脚作为输入直接采集信号?

    想把FPGA(Altera Cyclone IV)的扩展IO引脚作为输入直接采集信号,请问除了电压外,对输入电流有要求吗,最大能够承受多大的
    发表于 03-26 09:31

    请问在运行时配置PIC 32中选择的IO引脚作为输入和输出的最佳方式是什么?

    嗨,在运行时配置PIC 32中选择的IO引脚作为输入和输出的最佳方式是什么?在操作过程中,我需要配置一个引脚
    发表于 07-04 08:55

    DM642的GP0作为通用IO时,是可以做为输入和输出,还是只能作为输入

    DM642的GP0[4]/EXT_INT4----GP0[7]/EXT_INT7作为通用IO时,是可以做为输入和输出,还是只能作为输入?我看
    发表于 07-27 09:37

    IO作为外部中断输入有几个步骤

    I/O口作为外部中断。generalpurpose input and outputSTM32 的每个 IO口都可以作为中断输入,要把 IO
    发表于 08-06 07:02

    介绍下IO作为输入的使用

    前几章我们介绍的都是 IO 口输出的使用,这一章我们通过按键控制实验来介绍下 IO作为输入的使用。本章所要实现的功能是:通过开发板上的
    发表于 08-12 07:03

    如何使用STM32F103的IO作为输入使用

    按键输入实验1. 实验介绍本实验介绍如何使用STM32F103的IO作为输入使用。IO作为
    发表于 08-12 06:52

    stm32f1的io作为输出的使用方法

    3个按键分别控制3个led灯的亮灭。先看看最终的效果:按键检测本章分为以下几个小节:stm32 io口简介硬件设计软件设计proteus仿真stm32 io口简介
    发表于 01-12 06:32

    STM32的引脚可以作为普通IO口使用吗

    STM32 PB3 PB4 PA15引脚作为普通IO口使用指南stm32的PB3 PB4 PA15引脚可以在使用SWD仿真和烧录的情况下释放出来,
    发表于 01-18 06:47

    使用Adafruit IO作为MQTT控制Raspberry Pi GPIO的AC设备

    在本教程中,我们将使用 Adafruit IO 作为 MQTT 代理来控制连接到 Raspberry Pi GPIO 的 AC 设备。
    的头像 发表于 09-01 16:30 2606次阅读
    使用Adafruit <b class='flag-5'>IO</b><b class='flag-5'>作为</b>MQTT<b class='flag-5'>控制</b>Raspberry Pi GPIO的AC设备

    S7-400作为PROFINET IO控制器(TIA)

    S7-400集成PN口和CP443-1均可作为PROFINET IO控制器。本文以CPU 414-3 PN/DP作为IO设备,分别阐述以CP
    的头像 发表于 12-19 15:04 1375次阅读

    使用STM32F10xxx SWJ引脚作为标准IO

    本文介绍了如何使用GPIO固件库来释放SWJ-DP引脚(串行JTAG调试端口),并且重用为标准IO。SWJ-DP IO能够用作标准IOs,它的性能可以达到标准IO的80%。
    的头像 发表于 12-23 11:47 2830次阅读