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

341 lines
10 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;
}
unsigned char key_i = 0;
unsigned int key_cnt[3];//计数
unsigned char key_no[3];//哪个按键
unsigned char key_msg[3];//按键标识
unsigned char key_val[3];//按键值
#define KEY_CNT 10000
//清除
void key_clr(char no)
{
key_cnt[no] = 0;
key_msg[no] = 0;
key_no[no] = 0;
}
void Key_Scan(void) // 扫描K1-K3的状态
{
// char no = 0;
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;//按键按下
key_no[key_i] = 1; //哪个按键
}
}
if (key_val[key_i] == 1 && key_msg[key_i] == 2)//按键抬起
{
key_cnt[key_i]++;
if(key_cnt[key_i] > KEY_CNT)
{
key_cnt[key_i] = 0;
key_msg[key_i] = 3;//按键抬起2
key_no[key_i] = 1; //哪个按键
}
}
//按键按顺序增加
key_i++;
if(key_i >= 3) key_i = 0;
}
//按键功能
void key_act(void)
{
switch(key_no[key_i])
{
case 1 :
{
if(key_msg[key_i] == 1)
{
HAL_GPIO_WritePin(GPIOA, LED_NOR_Pin, GPIO_PIN_RESET);//LED 执行一次
key_clr(key_i);//清除
key_msg[key_i] = 2;
}
if(key_msg[key_i] == 3)
{
HAL_GPIO_WritePin(GPIOA, LED_NOR_Pin, GPIO_PIN_SET);//LED 执行一次
key_clr(key_i);//清除
}
}
break;
}
}
// 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 **************************************/
//}