nrf52840按键控制流水灯
时间: 2023-11-23 11:07:14 浏览: 32
以下是nrf52840按键控制流水灯的代码实现:
```c
#include <zephyr.h>
#include <device.h>
#include <devicetree.h>
#include <drivers/gpio.h>
#define LED0_NODE DT_ALIAS(led0)
#define LED0 DT_GPIO_LABEL(LED0_NODE, gpios)
#define PIN0 DT_GPIO_PIN(LED0_NODE, gpios)
#define FLAGS0 DT_GPIO_FLAGS(LED0_NODE, gpios)
#define LED1_NODE DT_ALIAS(led1)
#define LED1 DT_GPIO_LABEL(LED1_NODE, gpios)
#define PIN1 DT_GPIO_PIN(LED1_NODE, gpios)
#define FLAGS1 DT_GPIO_FLAGS(LED1_NODE, gpios)
#define SW0_NODE DT_ALIAS(sw0)
#define SW0 DT_GPIO_LABEL(SW0_NODE, gpios)
#define PIN_SW0 DT_GPIO_PIN(SW0_NODE, gpios)
#define FLAGS_SW0 DT_GPIO_FLAGS(SW0_NODE, gpios)
#define SLEEP_TIME_MS 100
void main(void)
{
const struct device *dev_led0;
const struct device *dev_led1;
const struct device *dev_sw0;
bool led0_is_on = true;
bool led1_is_on = false;
bool sw0_is_pressed = false;
dev_led0 = device_get_binding(LED0);
dev_led1 = device_get_binding(LED1);
dev_sw0 = device_get_binding(SW0);
gpio_pin_configure(dev_led0, PIN0, GPIO_OUTPUT_ACTIVE | FLAGS0);
gpio_pin_configure(dev_led1, PIN1, GPIO_OUTPUT_ACTIVE | FLAGS1);
gpio_pin_configure(dev_sw0, PIN_SW0, GPIO_INPUT | FLAGS_SW0);
while (1) {
gpio_pin_set(dev_led0, PIN0, (int)led0_is_on);
gpio_pin_set(dev_led1, PIN1, (int)led1_is_on);
sw0_is_pressed = !gpio_pin_get(dev_sw0, PIN_SW0);
if (sw0_is_pressed) {
led0_is_on = !led0_is_on;
led1_is_on = !led1_is_on;
k_msleep(SLEEP_TIME_MS);
}
}
}
```
该代码使用了Zephyr RTOS,通过按下nrf52840开发板上的按键,可以控制两个LED灯的状态,从而实现流水灯的效果。