zoukankan      html  css  js  c++  java
  • [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

  • 相关阅读:
    [ARC 102D]All Your Paths are Different Lengths
    [NOI 2016] 优秀的拆分
    [TJOI 2015] 线性代数
    [LUOGU 4717] 快速沃尔什变换
    [NOI 2006] 最大获利
    Javascript继承机制的设计
    必应输入法产品分析
    你不得不知道的HTML5的新型标签
    Mobile Web
    10行代码爬取网页
  • 原文地址:https://www.cnblogs.com/doitjust/p/13877992.html
Copyright © 2011-2022 走看看