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