电路
实现功能
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