nrf52840用keil5实现按下按键1、2、3、4,定时器分别以500ms、1s、2s、3s的时间使LED灯1、2、3、4做流水灯操作
时间: 2023-12-28 17:23:22 浏览: 163
以下是使用Keil5实现nrf52840按下按键1、2、3、4,定时器分别以500ms、1s、2s、3s的时间使LED灯1、2、3、4做流水灯操作的代码:
```c
#include "nrf.h"
#include "nrf_gpio.h"
#include "nrf_delay.h"
#define LED1_PIN 13
#define LED2_PIN 14
#define LED3_PIN 15
#define LED4_PIN 16
#define BUTTON1_PIN 11
#define BUTTON2_PIN 12
#define BUTTON3_PIN 24
#define BUTTON4_PIN 25
void timer_init(uint32_t time_ms)
{
NRF_TIMER0->MODE = TIMER_MODE_MODE_Timer;
NRF_TIMER0->BITMODE = TIMER_BITMODE_BITMODE_32Bit;
NRF_TIMER0->PRESCALER = 4; // 1MHz
NRF_TIMER0->CC[0] = time_ms * 1000; // Convert to microseconds
NRF_TIMER0->SHORTS = TIMER_SHORTS_COMPARE0_CLEAR_Msk;
NRF_TIMER0->TASKS_CLEAR = 1;
NRF_TIMER0->TASKS_START = 1;
}
void led_init()
{
nrf_gpio_cfg_output(LED1_PIN);
nrf_gpio_cfg_output(LED2_PIN);
nrf_gpio_cfg_output(LED3_PIN);
nrf_gpio_cfg_output(LED4_PIN);
}
void button_init()
{
nrf_gpio_cfg_input(BUTTON1_PIN, NRF_GPIO_PIN_PULLUP);
nrf_gpio_cfg_input(BUTTON2_PIN, NRF_GPIO_PIN_PULLUP);
nrf_gpio_cfg_input(BUTTON3_PIN, NRF_GPIO_PIN_PULLUP);
nrf_gpio_cfg_input(BUTTON4_PIN, NRF_GPIO_PIN_PULLUP);
}
void led_on(uint32_t led_pin)
{
nrf_gpio_pin_clear(led_pin);
}
void led_off(uint32_t led_pin)
{
nrf_gpio_pin_set(led_pin);
}
int main(void)
{
led_init();
button_init();
timer_init(500); // Set initial timer to 500ms
while (1)
{
if (!nrf_gpio_pin_read(BUTTON1_PIN))
{
timer_init(500);
}
else if (!nrf_gpio_pin_read(BUTTON2_PIN))
{
timer_init(1000);
}
else if (!nrf_gpio_pin_read(BUTTON3_PIN))
{
timer_init(2000);
}
else if (!nrf_gpio_pin_read(BUTTON4_PIN))
{
timer_init(3000);
}
if (NRF_TIMER0->EVENTS_COMPARE[0])
{
NRF_TIMER0->EVENTS_COMPARE[0] = 0;
led_on(LED1_PIN);
nrf_delay_ms(100);
led_off(LED1_PIN);
led_on(LED2_PIN);
nrf_delay_ms(100);
led_off(LED2_PIN);
led_on(LED3_PIN);
nrf_delay_ms(100);
led_off(LED3_PIN);
led_on(LED4_PIN);
nrf_delay_ms(100);
led_off(LED4_PIN);
}
}
}
```
阅读全文