#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 **************************************/ //}