CC2530按键控制led灯的代码,LED1是P1_0口,LED2是P1_1口,按键是SW1在P1_2口,实现按一下LED1灯亮按两下LED2灯亮的代码
时间: 2024-12-19 10:18:51 浏览: 20
按键控制LED_cc2530点灯程序_51按键_51单片机闪烁_按键_
5星 · 资源好评率100%
在CC2530上实现这种功能,首先需要初始化GPIO,然后配置按键输入和LED输出。以下是一个简化的C代码示例,假设已经有一个库支持中断处理和GPIO操作:
```c
#include <stdio.h>
#include "cc2530_gpio.h"
#define LED1_PIN P1_0
#define LED2_PIN P1_1
#define SW1_PIN P1_2
enum LedState {
LED1_OFF,
LED1_ON,
LED2_ON,
};
LedState led_states[] = {LED1_ON, LED2_ON}; // 初始状态数组
uint8_t led_index = 0; // 当前LED索引
void led_toggle(void) {
led_states[led_index] ^= 1; // 取反切换LED状态
GPIO_write(LED1_PIN, led_states[0]);
GPIO_write(LED2_PIN, led_states[1]);
}
void sw1_isr() {
static uint8_t count = 0; // 记录按键次数
if (count++ == 1) { // 按下一次
led_index = (led_index + 1) % 2; // 切换到下一个LED
led_toggle();
} else if (count == 2) { // 按两次
count = 0; // 重置计数
led_index = !led_index; // 切换LED1和LED2状态
led_toggle();
}
GPIO_disableIRQ(SW1_PIN); // 退出中断服务,防止抖动
GPIO_enableIRQ(SW1_PIN); // 重新启用中断
}
void init_gpio() {
GPIO_config(P1_0, GPIO_OUTPUT); // 配置LED1为输出
GPIO_config(P1_1, GPIO_OUTPUT); // 配置LED2为输出
GPIO_config(P1_2, GPIO_INPUT pull_up_down); // 配置SW1为上升沿触发输入
GPIO_registerInterrupt(SW1_PIN, sw1_isr, INT_EDGE_RISING);
}
int main() {
init_gpio();
while (1) {
// 主程序在这里等待中断,或者做其他事情
}
}
阅读全文