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

259 lines
8.3 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 "main.h"
int Key_State[3]; // 使用一个三维数组描述K1-K3的状态1为按下0为抬起[1 0 0]->[K1按下 K2抬起 K3抬起]
int Key_Mode[3]; // 模式0按住执行抬起停止
// 模式1只要按下就执行不考虑抬起
// 模式2完成按下+抬起)的动作才执行。
// K1, K2, K3三者模式独立
int Key_Busy[3] = {0, 0, 0};
void Key_Init(void) // 按键状态&模式初始化
{
Key_State[0] = 0;
Key_State[1] = 0;
Key_State[2] = 1;
Key_Mode[0] = 0;
Key_Mode[1] = 2;
Key_Mode[2] = 2;
}
void Key_Scan(void) // 扫描K1-K3的状态
{
int i = 0;
if (Key_State[2] == 0)//K3使能K1,K2 begin
{
/*********************************** K1 begin **************************************/
// mode 0 begin
if (Key_Mode[0] == 0)
{
if (HAL_GPIO_ReadPin(KEY1_GPIO_Port, KEY1_Pin) == 0)
{
for (i = 0; i < 10000; i++)
; // 按下延时防抖
if (HAL_GPIO_ReadPin(KEY1_GPIO_Port, KEY1_Pin) == 0)
{
Key_State[0] = 1;
}
}
if (HAL_GPIO_ReadPin(KEY1_GPIO_Port, KEY1_Pin) == 1)
{
for (i = 0; i < 10000; i++)
; // 抬起延时防抖
if (HAL_GPIO_ReadPin(KEY1_GPIO_Port, KEY1_Pin) == 1)
{
Key_State[0] = 0;
}
}
}
// mode 0 end
// mode 1 begin
if (Key_Mode[0] == 1)
{
if ((HAL_GPIO_ReadPin(KEY1_GPIO_Port, KEY1_Pin) == 0) && (Key_Busy[0] == 0))
{
for (i = 0; i < 10000; i++)
; // 按下延时防抖
if (HAL_GPIO_ReadPin(KEY1_GPIO_Port, KEY1_Pin) == 0)
{
Key_State[0] = !Key_State[0];
Key_Busy[0] = 1;
}
}
if (HAL_GPIO_ReadPin(KEY1_GPIO_Port, KEY1_Pin) == 1)
{
for (i = 0; i < 10000; i++)
; // 抬起延时防抖
if (HAL_GPIO_ReadPin(KEY1_GPIO_Port, KEY1_Pin) == 1)
{
Key_Busy[0] = 0;
}
}
}
// mode 1 end
// mode 2 begin
if (Key_Mode[0] == 2)
{
if (HAL_GPIO_ReadPin(KEY1_GPIO_Port, KEY1_Pin) == 0)
{
for (i = 0; i < 10000; i++)
; // 按下延时防抖
if (HAL_GPIO_ReadPin(KEY1_GPIO_Port, KEY1_Pin) == 0)
{
Key_Busy[0] = 1; // 完成按下
}
}
if ((HAL_GPIO_ReadPin(KEY1_GPIO_Port, KEY1_Pin) == 1) && (Key_Busy[0] == 1))
{
for (i = 0; i < 10000; i++)
; // 按下延时防抖
if (HAL_GPIO_ReadPin(KEY1_GPIO_Port, KEY1_Pin) == 1)
{
// 完成抬起
Key_State[0] = !Key_State[0];
Key_Busy[0] = 0;
}
}
}
// mode 2 end
/*********************************** K1 end **************************************/
/*********************************** K2 begin **************************************/
// mode 0 begin
if (Key_Mode[1] == 0)
{
if (HAL_GPIO_ReadPin(KEY2_GPIO_Port, KEY2_Pin) == 0)
{
for (i = 0; i < 10000; i++)
; // 按下延时防抖
if (HAL_GPIO_ReadPin(KEY2_GPIO_Port, KEY2_Pin) == 0)
{
Key_State[1] = 1;
}
}
if (HAL_GPIO_ReadPin(KEY2_GPIO_Port, KEY2_Pin) == 1)
{
for (i = 0; i < 10000; i++)
; // 抬起延时防抖
if (HAL_GPIO_ReadPin(KEY2_GPIO_Port, KEY2_Pin) == 1)
{
Key_State[1] = 0;
}
}
}
// mode 0 end
// mode 1 begin
if (Key_Mode[1] == 1)
{
if ((HAL_GPIO_ReadPin(KEY2_GPIO_Port, KEY2_Pin) == 0) && (Key_Busy[1] == 0))
{
for (i = 0; i < 10000; i++)
; // 按下延时防抖
if (HAL_GPIO_ReadPin(KEY2_GPIO_Port, KEY2_Pin) == 0)
{
Key_State[1] = !Key_State[1];
Key_Busy[1] = 1;
}
}
if (HAL_GPIO_ReadPin(KEY2_GPIO_Port, KEY2_Pin) == 1)
{
for (i = 0; i < 10000; i++)
; // 抬起延时防抖
if (HAL_GPIO_ReadPin(KEY2_GPIO_Port, KEY2_Pin) == 1)
{
Key_Busy[1] = 0;
}
}
}
// mode 1 end
// mode 2 begin
if (Key_Mode[1] == 2)
{
if (HAL_GPIO_ReadPin(KEY2_GPIO_Port, KEY2_Pin) == 0)
{
for (i = 0; i < 10000; i++)
; // 按下延时防抖
if (HAL_GPIO_ReadPin(KEY2_GPIO_Port, KEY2_Pin) == 0)
{
Key_Busy[1] = 1; // 完成按下
}
}
if ((HAL_GPIO_ReadPin(KEY2_GPIO_Port, KEY2_Pin) == 1) && (Key_Busy[1] == 1))
{
for (i = 0; i < 10000; i++)
; // 按下延时防抖
if (HAL_GPIO_ReadPin(KEY2_GPIO_Port, KEY2_Pin) == 1)
{
// 完成抬起
Key_Mode[0] = (Key_Mode[0] + 1) * ((Key_Mode[0] + 1) < 3); // 使用K2切换K1模式
Key_State[1] = !Key_State[1];
Key_Busy[1] = 0;
}
}
}
// mode 2 end
/*********************************** K2 end **************************************/
}//K3使能K1,K2 begin
/*********************************** K3 begin **************************************/
// mode 0 begin
if (Key_Mode[2] == 0)
{
if (HAL_GPIO_ReadPin(KEY3_GPIO_Port, KEY3_Pin) == 0)
{
for (i = 0; i < 10000; i++)
; // 按下延时防抖
if (HAL_GPIO_ReadPin(KEY3_GPIO_Port, KEY3_Pin) == 0)
{
Key_State[2] = 1;
}
}
if (HAL_GPIO_ReadPin(KEY3_GPIO_Port, KEY3_Pin) == 1)
{
for (i = 0; i < 10000; i++)
; // 抬起延时防抖
if (HAL_GPIO_ReadPin(KEY3_GPIO_Port, KEY3_Pin) == 1)
{
Key_State[2] = 0;
}
}
}
// mode 0 end
// mode 1 begin
if (Key_Mode[2] == 1)
{
if ((HAL_GPIO_ReadPin(KEY3_GPIO_Port, KEY3_Pin) == 0) && (Key_Busy[2] == 0))
{
for (i = 0; i < 10000; i++)
; // 按下延时防抖
if (HAL_GPIO_ReadPin(KEY3_GPIO_Port, KEY3_Pin) == 0)
{
Key_State[2] = !Key_State[2];
Key_Busy[2] = 1;
}
}
if (HAL_GPIO_ReadPin(KEY3_GPIO_Port, KEY3_Pin) == 1)
{
for (i = 0; i < 10000; i++)
; // 抬起延时防抖
if (HAL_GPIO_ReadPin(KEY3_GPIO_Port, KEY3_Pin) == 1)
{
Key_Busy[2] = 0;
}
}
}
// mode 1 end
// mode 2 begin
if (Key_Mode[2] == 2)
{
if (HAL_GPIO_ReadPin(KEY3_GPIO_Port, KEY3_Pin) == 0)
{
for (i = 0; i < 10000; i++)
; // 按下延时防抖
if (HAL_GPIO_ReadPin(KEY3_GPIO_Port, KEY3_Pin) == 0)
{
Key_Busy[2] = 1; // 完成按下
}
}
if ((HAL_GPIO_ReadPin(KEY3_GPIO_Port, KEY3_Pin) == 1) && (Key_Busy[2] == 1))
{
for (i = 0; i < 10000; i++)
; // 按下延时防抖
if (HAL_GPIO_ReadPin(KEY3_GPIO_Port, KEY3_Pin) == 1)
{
// 完成抬起
Key_State[2] = !Key_State[2];
Key_Busy[2] = 0;
}
}
}
// mode 2 end
/*********************************** K3 end **************************************/
}