作者小头像 Lv.7
6351 成长值

个人介绍

熟悉CC++、Qt、单片机,嵌入式,音视频、物联网相关项目开发。 关注微信公众号:《DS小龙哥 嵌入式技术资讯》 可以下载论坛里、博客里所有发布项目的源码工程。

感兴趣或擅长的领域

人工智能、IoT
个人勋章
  • 小有名气
  • 万人瞩目
成长雷达
5605
723
0
0
23

个人资料

个人介绍

熟悉CC++、Qt、单片机,嵌入式,音视频、物联网相关项目开发。 关注微信公众号:《DS小龙哥 嵌入式技术资讯》 可以下载论坛里、博客里所有发布项目的源码工程。

感兴趣或擅长的领域

人工智能、IoT

达成规则

他的回复:
// 定义全局变量,用于记录按键按下的次数volatile uint8_t keyPressState = 1; // 初始化为1// 延时函数,单位为毫秒void delay_ms(uint32_t ms){ uint32_t i, j; for (i = 0; i ms; i++) { for (j = 0; j 8000; j++) // 以72MHz时钟频率,大约为1ms延时 { __NOP(); } }}// 外部中断回调函数void EXTI0_IRQHandler(void){ if (EXTI->PR & EXTI_PR_PR0) // 检查是否是来自引脚0的中断 { EXTI->PR |= EXTI_PR_PR0; // 清除中断标志位 // 按键按下时,更新变量 keyPressState++; if (keyPressState > 3) { keyPressState = 1; // 超过3次就归1 } }}// 初始化GPIO用于控制小灯void LED_Init(void){ RCC->AHB1ENR |= RCC_AHB1ENR_GPIOCEN; // 使能GPIOC时钟 GPIOC->MODER |= GPIO_MODER_MODE13_0; // 设置PC13为输出模式}// 初始化外部中断void EXTI_Init(void){ RCC->APB2ENR |= RCC_APB2ENR_SYSCFGEN; // 使能SYSCFG时钟 SYSCFG->EXTICR[0] &= ~SYSCFG_EXTICR1_EXTI0; // 清除配置 SYSCFG->EXTICR[0] |= SYSCFG_EXTICR1_EXTI0_PA; // 选择PA0作为外部中断输入(假设按键接在PA0) EXTI->IMR |= EXTI_IMR_MR0; // 使能外部中断线路0 EXTI->FTSR |= EXTI_FTSR_TR0; // 配置下降沿触发中断 NVIC_EnableIRQ(EXTI0_IRQn); // 使能外部中断0的中断请求}int main(void){ LED_Init(); // 初始化LED EXTI_Init(); // 初始化外部中断 while (1) { if (keyPressState == 1) // 0.5秒间隔闪烁 { GPIOC->ODR |= GPIO_ODR_OD13; // 点亮LED delay_ms(500); // 延时500ms GPIOC->ODR &= ~GPIO_ODR_OD13; // 熄灭LED delay_ms(500); // 延时500ms } else if (keyPressState == 2) // 0.1秒间隔闪烁 { GPIOC->ODR |= GPIO_ODR_OD13; // 点亮LED delay_ms(100); // 延时100ms GPIOC->ODR &= ~GPIO_ODR_OD13; // 熄灭LED delay_ms(100); // 延时100ms } else if (keyPressState == 3) // 熄灭LED { GPIOC->ODR &= ~GPIO_ODR_OD13; // 熄灭LED } }}LED_Init():初始化PC13为输出模式,用于控制LED的点亮和熄灭。EXTI_Init():配置PA0引脚为外部中断输入,并且设置下降沿触发。然后使能中断请求并启用中断处理函数EXTI0_IRQHandler。EXTI0_IRQHandler():这是外部中断的回调函数。当检测到PA0按键按下时,keyPressState变量递增,控制LED的不同闪烁模式。如果keyPressState大于3,则将其重置为1。delay_ms():延时函数,用于控制LED闪烁的间隔。主循环:在主循环中,根据keyPressState的值,分别控制LED的闪烁模式:如果是1,LED以0.5秒间隔闪烁。如果是2,LED以0.1秒间隔闪烁。如果是3,LED熄灭。
发布时间 2024/12/13 15:54:55 最后回复 DS小龙哥 2024/12/14 20:58:48 版块 云计算
18 5 0