[nRF51822]3. GPIO输入按键检测

电路

 

 实现功能

1. 按键S1按下,D1点亮,按键S1松开,D1熄灭;

2. 按键S2按下,D2点亮,按键S2松开,D2熄灭;

3. 按键S3按下,D3点亮,按键S3松开,D3熄灭;

4. 按键S4按下,D4点亮,按键S4松开,D4熄灭。

 

代码

 

 

 main.c

#include "nrf_delay.h"
#include "nrf_gpio.h"

/* 设置LED引脚号 */
#define LED_START    21
#define LED_1    21   
#define LED_2    22
#define LED_3    23
#define LED_4    24
#define LED_END    24

/* 设置按键引脚号 */
#define KEY_START    17
#define KEY_1    17
#define KEY_2    18
#define KEY_3    19
#define KEY_4    20
#define KEY_END    20


int main(void)
{
    //配置P0.21 ~ P0.24为输出
    nrf_gpio_range_cfg_output(LED_START,LED_END);    
    
    //熄灭所有LED
    nrf_gpio_pin_set(LED_1);    // 熄灭LED1
    nrf_gpio_pin_set(LED_2);    // 熄灭LED2
    nrf_gpio_pin_set(LED_3);    // 熄灭LED3
    nrf_gpio_pin_set(LED_4);    // 熄灭LED4
    
    
    //配置P0.17 ~ P0.20为上拉输入
    nrf_gpio_range_cfg_input(KEY_START,KEY_END,NRF_GPIO_PIN_PULLUP);    
    
    while(1)
    {
        if(nrf_gpio_pin_read(KEY_1) == 0)         //判断KEY1按下
        {
            nrf_gpio_pin_clear(LED_1);            //点亮LED1
            while(!nrf_gpio_pin_read(KEY_1));     //KEY1没有松开,阻塞
            nrf_gpio_pin_set(LED_1);              // 熄灭LED1
        }
        
        if(nrf_gpio_pin_read(KEY_2) == 0)         //判断KEY2按下
        {
            nrf_gpio_pin_clear(LED_2);            //点亮LED2
            while(!nrf_gpio_pin_read(KEY_2));     //KEY2没有松开,阻塞
            nrf_gpio_pin_set(LED_2);              // 熄灭LED2
        }
        
        if(nrf_gpio_pin_read(KEY_3) == 0)         //判断KEY3按下
        {
            nrf_gpio_pin_clear(LED_3);            //点亮LED3
            while(!nrf_gpio_pin_read(KEY_3));     //KEY3没有松开,阻塞
            nrf_gpio_pin_set(LED_3);              // 熄灭LED3
        }
        
        if(nrf_gpio_pin_read(KEY_4) == 0)         //判断KEY4按下
        {
            nrf_gpio_pin_clear(LED_4);            //点亮LED4
            while(!nrf_gpio_pin_read(KEY_4));     //KEY4没有松开,阻塞
            nrf_gpio_pin_set(LED_4);              // 熄灭LED4
        }
    }
}

 

知识点

void nrf_gpio_range_cfg_input(uint32_t pin_range_start, uint32_t pin_range_end, nrf_gpio_pin_pull_t pull_config)

  配置多个相邻引脚号的引脚为输入,和输入的上拉模式,API提供了上拉模式的宏定义

 

uint32_t nrf_gpio_pin_read(uint32_t pin_number)

  读取输入引脚号的输入电平,低电平返回0,高电平返回1

 

posted @ 2020-10-26 13:22  doitjust  阅读(440)  评论(0编辑  收藏  举报