RISC-V MCU中文社区

【求助】 中断点灯不亮,有帮忙看看嘛?

发表于 开源蜂鸟E203 2024-06-19 21:40:07
0
2260
0

include

include

include

//#define KEY1 3 // 按键连接到GPIO引脚3
//#define LED1 1 // LED连接到GPIO引脚1

int main(void) {
// 配置LED GPIO
GPIO_REG(GPIO_INPUT_EN) &= ~(0x1 << LED1); // 关闭LED GPIO的输入使能
GPIO_REG(GPIO_OUTPUT_EN) |= (0x1 << LED1); // 打开LED GPIO的输出使能
GPIO_REG(GPIO_OUTPUT_VAL) &= ~(0x1 << LED1); // 初始化为关闭状态
printf(“LED GPIO configured.\n”);

// 配置按键GPIO
GPIO_REG(GPIO_OUTPUT_EN) &= ~(0x1 << KEY1);  // 关闭按键GPIO的输出使能
GPIO_REG(GPIO_PULLUP_EN) |= (0x1 << KEY1);   // 打开按键GPIO的输入上拉
GPIO_REG(GPIO_INPUT_EN) |= (0x1 << KEY1);    // 打开按键GPIO的输入使能
printf("Button GPIO configured.\n");

uint8_t led_state = 0;  // LED当前状态,0表示关闭,1表示打开
uint8_t last_button_state = 1;  // 上一次按键状态,初始化为未按下(高电平)

while (1) {
    // 读取按键状态
    uint8_t button_state = (GPIO_REG(GPIO_INPUT_VAL) & (0x1 << KEY1)) == 0 ? 0 : 1;

    // 检测按键的下降沿(从未按下到按下的过渡)
    if (button_state == 0 && last_button_state == 1) {
        // 切换LED状态
        led_state = !led_state;
        if (led_state) {
            GPIO_REG(GPIO_OUTPUT_VAL) |= (0x1 << LED1);  // 点亮LED
            printf("LED ON\n");
        } else {
            GPIO_REG(GPIO_OUTPUT_VAL) &= ~(0x1 << LED1); // 熄灭LED
            printf("LED OFF\n");
        }
    }

    // 更新上一次按键状态
    last_button_state = button_state;
}

return 0;

}

喜欢0
用户评论
小松

小松 实名认证

袁青松

积分
问答
粉丝
关注
  • RV-STAR 开发板
  • RISC-V处理器设计系列课程
  • 培养RISC-V大学土壤 共建RISC-V教育生态
RV-STAR 开发板