使用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 作为我们的输入开关引脚,我们通过下面的代码片段行来表示它。
#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默认的刷机方式刷机。
如上图所示,当我按下按钮时,我们的外部 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_输入模式;
}

变电站防雷接地电阻的要求和处理接地电阻的方法
深圳IC基地创新驱动 ,构建IC设计与应用产业链
为当今游戏市场开发决胜配件
非隔离电源与隔离电源对比哪个好?
芯明天S38系列压电偏转镜的特点、应用及参数
使用IO引脚作为输入控制LED的教程
Gartner:中东和北非地区逐渐步增加云支出 2020年公共云服务收入将增长21%
三星将对毒工厂患职业病工人进行赔偿
LTE网络容量空中接口测试
基于CX25838设计的8路视频监视系统
苹果还要在新总部开新品发布会?高刷新率屏幕10.5英寸iPad即将亮相
毫米波通信主要技术挑战包括哪些
CCD与CMOS影像感光元件结构透视与分析
我国云计算行业进入快速增长期 三大巨头瓜分主要市场份额
M1 MacBook编译代码测试,竟和8万的Intel电脑一样快
开启400G以太网:Spirent 400G以太网测试系统
云拿科技公司已完成天使轮融资,资金将主要用于产品的研发、迭代
未来机器人会代替那些职业
蔚来ES6开始接受预定 最大综合续航510公里
联想智慧大屏亮相深圳并斩获2020华显奖