油飙咔翅 2024-10-04 21:30 采纳率: 0%
浏览 11
问题最晚将于10月12日00:00点结题

一个小问题,本人刚入门,哪位可以help

想通过添加exit,把频率改变放到中断函数中执行,按键按下产生中断,准确的调频,让按键灵敏,应该怎么操作,谁能帮我改一下 后面第二三部分的pwm呼吸灯

img

#include <stm32f10x.h>#include "menu.h"#include "OLED.h"#include "RE_basic.h"#include "delay.h"#include "LED.h"int menu1(){int menu1_flag=1; OLED_ShowString(1,3,"pattern1"); OLED_ShowString(2,3,"pattern2");OLED_ShowString(3,3,"pattern3");uint8_t KeyNum;while(1){ KeyNum = Key_GetNum();if(KeyNum==1){menu1_flag++;if(menu1_flag==4) menu1_flag=1;}if(KeyNum==2){OLED_Clear();return menu1_flag;}switch(menu1_flag){case 1:{OLED_ShowString(1,1,"");OLED_ShowString(2,1," ");OLED_ShowString(3,1," ");}break;case 2:{OLED_ShowString(1,1," ");OLED_ShowString(2,1,"");OLED_ShowString(3,1," ");}break;case 3:{OLED_ShowString(1,1," ");OLED_ShowString(2,1," ");OLED_ShowString(3,1,"*");}break;}}}int menu2_pattern1(){OLED_ShowString(3,5,"pattern1");uint8_t KeyNum;while(1){ KeyNum = Key_GetNum();if(KeyNum==3){OLED_Clear();return 0;} LED3_ON(); OLED_ShowChar (1,1,'1');Delay_s(2); LED3_OFF(); OLED_ShowChar (1,1,'0');Delay_s(1); LED4_ON(); LED5_ON(); OLED_ShowChar (1,1,'2'); OLED_ShowChar (2,1,'3');Delay_s(1); LED4_OFF(); LED5_OFF(); OLED_Clear (); OLED_ShowString(3,5,"pattern1"); OLED_ShowChar (1,1,'0'); Delay_s(2);}}int menu2_pattern2(){int menu2_flag=1; uint8_t i; uint8_t KeyNum;while(1){KeyNum = Key_GetNum();if(KeyNum==3){OLED_Clear();return 0;} for (i = 0;i <= 100; i++){OLED_ShowString(2,6,"T=2.5s");OLED_ShowString(3,5,"pattern2");PWM_SetCompare1(i);PWM_SetCompare2(i);PWM_SetCompare3(i);Delay_ms (10);}for (i = 0;i <= 100; i++){PWM_SetCompare1(100-i);PWM_SetCompare2(100-i);PWM_SetCompare3(100-i);Delay_ms (10);}}} int menu2_pattern3() { int menu2_flag = 1; uint8_t i; uint8_t KeyNum = 0; uint8_t displayMode = 0; while (1) { KeyNum = Key_GetNum();if(KeyNum==3){OLED_Clear();return 0;} OLED_ShowString(2, 6, "T=2.5s"); OLED_ShowString(3, 5, "pattern3"); for (i = 0;i <= 100; i++){PWM_SetCompare1(i);PWM_SetCompare2(i);PWM_SetCompare3(i);Delay_ms (10);}for (i = 0;i <= 100; i++){PWM_SetCompare1(100-i);PWM_SetCompare2(100-i);PWM_SetCompare3(100-i);Delay_ms (10);} KeyNum = Key_GetNum(); if (KeyNum == 1) { OLED_Clear(); OLED_ShowString(2, 6, "T=3.0s"); OLED_ShowString(3, 5, "pattern3"); while(2){for (i = 0;i <= 130; i++){PWM_SetCompare1(i);PWM_SetCompare2(i);PWM_SetCompare3(i);Delay_ms (10);}for (i = 0;i <= 130; i++){PWM_SetCompare1(130-i);PWM_SetCompare2(130-i);PWM_SetCompare3(130-i);Delay_ms (20);} displayMode = 1; } } else if (KeyNum == 2) { OLED_Clear(); OLED_ShowString(2, 6, "T=2.0s"); OLED_ShowString(3, 5, "pattern3"); while(2){for (i = 0;i <= 60; i++){PWM_SetCompare1(i);PWM_SetCompare2(i);PWM_SetCompare3(i);Delay_ms (10);}for (i = 0;i <= 60; i++){PWM_SetCompare1(60-i);PWM_SetCompare2(60-i);PWM_SetCompare3(60-i);Delay_ms (10);} displayMode = 2; } } else { OLED_ShowString(2, 6, "T=2.5s"); displayMode = 0; } } return 0; }

  • 写回答

13条回答 默认 最新

  • 阿里嘎多学长 2024-10-04 21:50
    关注

    AIGC生成:


    问题解决方案

    你想在中断函数中执行频率改变操作,这样可以实现按键按下产生中断,准确的调频,让按键灵敏。要实现这个功能,你需要在中断函数中使用 HAL_GPIO_WritePin 函数来控制 GPIO pin 的状态。

    首先,你需要在中断函数中获取当前的按键状态,然后根据状态来改变频率。下面是一个简单的示例代码:

    void EXTI0_IRQHandler(void) {
        // 获取当前的按键状态
        uint16_t keyState = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0);
    
        // 根据状态来改变频率
        if (keyState == 0) {
            // 按键按下,改变频率
            HAL_PWM_SetDutyCycle(PWM_HandleTypeDef* hPWM, 50);
        } else {
            // 按键释放,恢复频率
            HAL_PWM_SetDutyCycle(PWM_HandleTypeDef* hPWM, 100);
        }
    }
    

    在上面的代码中,我们使用 HAL_GPIO_ReadPin 函数来获取当前的按键状态,然后根据状态来改变频率。我们使用 HAL_PWM_SetDutyCycle 函数来设置 PWM 的 duty cycle。

    需要注意的是,你需要在中断函数中使用 HAL_GPIO_WritePin 函数来控制 GPIO pin 的状态,而不是在主循环中。这样可以确保按键按下产生中断时,频率改变操作能够正确地执行。

    如果你需要更多帮助,请提供更多的代码和详细信息。


    评论

报告相同问题?

问题事件

  • 创建了问题 10月4日

悬赏问题

  • ¥15 如果要做一个老年人平板有哪些需求
  • ¥15 k8s生产配置推荐配置及部署方案
  • ¥15 matlab提取运动物体的坐标
  • ¥15 人大金仓下载,有人知道怎么解决吗
  • ¥15 一个小问题,本人刚入门,哪位可以help
  • ¥15 python安卓开发
  • ¥15 使用R语言GD包一直不出结果
  • ¥15 计算机微处理器与接口技术相关问题,求解答图片的这个问题,有多少个端口,端口地址和解答问题的方法和思路,不要AI作答
  • ¥15 如何根据一个截图编写对应的HTML代码
  • ¥15 stm32标准库的PID角度环