在我们之前的教程中,我们使用了一个基本的LED闪烁程序作为N76E003指南的入门,我们已经学习了如何配置Keil IDE以及如何为nuvoton微控制器单元N76E003编程的环境。现在是时候进一步发展,并使用基本的GPIO接口来控制其他硬件了。如果您有兴趣,还可以查看下面列出的其他微控制器GPIO教程-
- 带有CubeMx和TrueSTUDIO的STM32 Nucleo64 – LED控制
- 带有Cosmic C GPIO控制的STM8S
- 带有MPLABX LED闪烁的PIC教程
- 具有Code Composer Studio的MSP430 –简单的LED控制
由于在上一教程中,我们仅通过将IO引脚用作输出来使LED闪烁。在本教程中,我们将学习如何使用另一个IO引脚作为输入并控制另一个LED。在不浪费时间的情况下,让我们评估一下我们需要哪种硬件设置。
硬件设置和要求
由于需要将开关用作输入,因此我们需要的第一件事是按钮。我们还需要通过该按钮控制其他LED。除了这两个以外,我们还需要一个电阻器来限制LED电流,并需要一个附加电阻器用于按钮上的下拉目的。这将在原理图部分中进一步说明。我们需要的组件-
- 一个按钮(特别是任何一种瞬时开关-触觉开关)
- 任何颜色的LED
- 4.7k电阻,用于下拉目的
- 100R电阻
更不用说,除了上述组件之外,我们还需要基于N76E003微控制器的开发板以及Nu-Link编程器。另外,还需要面包板和连接线来连接所有组件,如下所示。
N76E003 LED和按钮接口电路
从下面的示意图中可以看到,开发板内部的测试LED连接在端口1.4上,另一个LED连接在端口1.5上。电阻R3用于限制LED电流。
在引脚1.6中,连接了一个名为SW的按钮。每当按下按钮时,引脚就会变高。否则,它将被4.7K下拉电阻R1变为低电平。如果您不熟悉此概念,则可以了解有关上拉和下拉电阻的更多信息。
该引脚还是程序员可以访问的与程序相关的引脚。用于发送程序数据。但是,我们将看到选择这些引脚的原因以及获得有关N76E003引脚映射的合理信息。
N76E003引脚排列图
N76E003的引脚图如下图所示:
如我们所见,每个引脚都有多种功能,可以用于不同的目的。让我们举个例子。引脚1.7可用作中断,模拟输入或通用输入输出操作。因此,如果将任何引脚用作I / O引脚,则相应的功能将不可用。
因此,用作LED输出引脚的引脚1.5将失去PWM和其他功能。但这不是问题,因为该项目不需要其他功能。之所以选择引脚1.5作为输出,引脚1.6作为输入的原因,是因为GND和VDD引脚的可用性最近,以便于连接。
但是,在该单片机的20引脚中,有18引脚可以用作GPIO引脚。引脚2.0专门用于复位输入,不能用作输出。除了该引脚以外,所有引脚都可以配置为下述模式。
根据数据手册,PxM1.n和PxM2.n是两个寄存器,用于确定I / O端口的控制操作。现在,写入和读取GPIO端口已经完全不同了。因为写入端口控制寄存器会更改端口的锁存状态,而读取端口则会获取逻辑状态的状态。但是要读取端口,必须将其设置为输入模式。
适用于N76E003的简单GPIO控制程序
本教程中使用的完整程序可以在页面底部找到,代码说明如下。
将引脚设置为输入
让我们先从输入开始。如前所述,要读取端口的状态,需要将其设置为输入。因此,由于我们选择P1.6作为输入开关引脚,因此通过下面的代码片段行对其进行了表示。
#定义SW P16
需要将该相同的引脚设置为输入。因此,在设置功能上,使用以下行将引脚设置为输入。
无效设置(无效){P14_Quasi_Mode; P15_Quasi_Mode; P16_Input_Mode; }
这行 P16_Input_Mode; 在“ BSP包含库”中的 Function_define.h 头文件中定义,该文件将引脚位设置为 P1M1- = SET_BIT6; P1M2&=〜SET_BIT6 。所述 SET_BIT6 也以相同的头文件中定义原样
#定义SET_BIT6 0x40
将引脚设置为输出
与输入引脚相同,板载测试LED和外部LED1使用的输出引脚也在代码的第一部分中定义了相应的PIN。
#定义测试_LED P14#定义LED1 P15
这些引脚在设置功能中使用以下几行设置为输出。
无效设置(无效){ P14_Quasi_Mode; //输出P15_Quasi_Mode; //输出P16_Input_Mode; }
这些行也在 Function_define.h 头文件中定义,在此文件中,将引脚位设置为 P1M1&=〜SET_BIT4; P1M2&=〜SET_BIT4 。 所述 SET_BIT6 也以相同的头文件中定义原样
#定义SET_BIT4 0x10
无限While循环
如果硬件与电源相连且工作正常,并且可以连续输出,则应用程序永不会停止。在无限的时间内,它做同样的事情。这是一个无限while循环的功能。while循环中的应用程序无限运行。
while(1){ Test_LED = 0; sw_delay(150); Test_LED = 1; sw_delay(150); if(SW == 1){LED1 = 0; } else {LED1 = 1; }}}
上面的while循环根据 sw_delay 值使led闪烁,并检查SW的状态。如果按下该开关,则P1.6将为高电平,因此,当按下它时,读取状态将为1。在这种情况下,在此期间,按下该开关并且端口P1.6保持为高电平,则LED1将发光。
对N76E003进行编程并验证输出
在我们的N76E003入门教程中,我们已经学习了如何对N76E003进行编程,因此,我们将在此处重复相同的步骤对电路板进行编程。代码成功编译并返回0警告和0错误,并使用Keil的默认闪烁方法闪烁。
如上图所示,当我按下按钮时,我们的外部LED会亮起。您可以在下面的视频中找到该项目的完整工作。希望您喜欢本教程,并从中学到了一些有用的东西,如果您有任何疑问,请将其留在下面的评论部分。您还可以使用我们的论坛提出其他技术问题。