This repository has been archived on 2024-12-31. You can view files and clone it, but cannot push or open issues or pull requests.
mfps/App/Src/key.c

264 lines
4.0 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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] < 3 )
{
oled_s[0]++;
}else
{
oled_s[0] = 0;
}
}
break;
case 4: //运行模式切换
{
run_mode_temp[0] = (run_mode_temp[0] - 1) * (run_mode_temp[0] > 0 ) + 2 * (run_mode_temp[0] == 0);
}
break;
case 5: //运行步长调节,仅限点动模式
{
if(run_mode_temp[0] == 0)
{
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;
case 12:
{
magnet_select[0] = (magnet_select[0] - 1)*(magnet_select[0] > 0) + 2*(magnet_select[0] == 0);
}
break;
case 13:
{
if(magnet_motor_sw != 0)
{
magnet_motor_sw = 0;
}
else
{
magnet_motor_sw = 2;
}
}
break;
case 14:
{
magnet_s_ok[0] = !magnet_s_ok[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] = 3;
}
}
break;
case 4: //运行模式切换
{
run_mode_temp[0] = (run_mode_temp[0] + 1) * (run_mode_temp[0] < 2);
}
break;
case 5: //运行步长调节,仅限点动模式
{
if(run_mode_temp[0] == 0)
{
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;
case 12:
{
magnet_select[0] = (magnet_select[0] + 1)*(magnet_select[0] < 2);
}
break;
case 13:
{
if(magnet_motor_sw != 0)
{
magnet_motor_sw = 0;
}
else
{
magnet_motor_sw = 1;
}
}
break;
case 14:
{
magnet_s_ok[0] = !magnet_s_ok[0];
}
break;
}
key_msg[2] = 2;
}
}