#include "key.h" #include "app.h" unsigned char key_i = 0; unsigned int key_cnt[3] = {0}; //延时用计数 unsigned char key_msg[3] = {0}; //按键事件 unsigned char key_val[3] = {0}; //按键值 #define KEY_CNT 5 void Key_Scan(void) // 扫描K1-K3的状态 { key_val[0] = HAL_GPIO_ReadPin(KEY1_GPIO_Port, KEY1_Pin); key_val[1] = HAL_GPIO_ReadPin(KEY2_GPIO_Port, KEY2_Pin); key_val[2] = HAL_GPIO_ReadPin(KEY3_GPIO_Port, KEY3_Pin); //检测按键 if(key_i >= 3) key_i = 0; if(key_val[key_i] == 0 && key_msg[key_i] == 0) //按键按下 { key_cnt[key_i]++; if(key_cnt[key_i] > KEY_CNT) { key_cnt[key_i] = 0; key_msg[key_i] = 1; //按键按下,触发事件1 } } if( key_msg[key_i] == 2 && key_val[key_i] == 1 ) { key_msg[key_i] = 0; //完成对应功能后,再清空事件 } //按键按顺序增加 key_i++; if(key_i >= 3) key_i = 0; } void msg_clr() { key_msg[0] = 0; key_msg[1] = 0; key_msg[2] = 0; } //按键功能 void key_act(void) { if(key_msg[0] == 1) //K1完成按下后 { oled_en = 1; key_msg[0] = 2; } if(key_msg[1] == 1) //K2完成按下后 { switch(oled_p) { case 2: //菜单选择 { if( oled_s[0] < 2 ) { oled_s[0]++; }else { oled_s[0] = 0; } } break; case 4: //运行模式切换 { run_mode_temp[0] = !run_mode_temp[0]; } break; case 5: //运行步长调节 { if(step_temp[0] > 1) { step_temp[0]--; }else { step_temp[0] = 15; } } break; case 6: { direc_temp[0] = 2*(direc_temp[0] == 1) + 1*(direc_temp[0] == 2); } break; case 7: //Cancel & OK 切换 { oled_s_motorok[0] = !oled_s_motorok[0]; } break; case 9: { if(smp_intr_temp[0] > 5) { smp_intr_temp[0]--; }else { smp_intr_temp[0] = 10; } } break; case 10: { if(smp_dpth_temp[0] > 10) { smp_dpth_temp[0]--; }else { smp_dpth_temp[0] = 20; } } break; case 11: { oled_s_magnetok[0] = !oled_s_magnetok[0]; } break; } key_msg[1] = 2; } if(key_msg[2] == 1)//K3完成按下后 { switch(oled_p) { case 2: //菜单选择 { if( oled_s[0] > 0 ) { oled_s[0]--; }else { oled_s[0] = 2; } } break; case 4: //运行模式切换 { run_mode_temp[0] = !run_mode_temp[0]; } break; case 5: //运行步长调节 { if(step_temp[0] < 15) { step_temp[0]++; }else { step_temp[0] = 1; } } break; case 6: { direc_temp[0] = 2*(direc_temp[0] == 1) + 1*(direc_temp[0] == 2); } break; case 7: //Cancel & OK 切换 { oled_s_motorok[0] = !oled_s_motorok[0]; } break; case 9: { if(smp_intr_temp[0] <10 ) { smp_intr_temp[0]++; }else { smp_intr_temp[0] = 5; } } break; case 10: { if(smp_dpth_temp[0] < 20) { smp_dpth_temp[0]++; }else { smp_dpth_temp[0] = 10; } } break; case 11: { oled_s_magnetok[0] = !oled_s_magnetok[0]; } break; } key_msg[2] = 2; } }