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

78 lines
1.5 KiB
C

#include "key.h"
#include "main.h"
#include "tmc5160.h"
#include "oled.h"
unsigned char key_i = 0;
unsigned int key_cnt[3];//延时用计数
unsigned char key_msg[3];//按键事件
unsigned char key_val[3];//按键值
#define KEY_CNT 100
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;//按键按下
}
}
if (key_val[key_i] == 1 && key_msg[key_i] == 1)//按键抬起
{
key_cnt[key_i]++;
if(key_cnt[key_i] > KEY_CNT)
{
key_cnt[key_i] = 0;
key_msg[key_i] = 2;//完成按下+抬起
}
}
//按键按顺序增加
key_i++;
if(key_i >= 3) key_i = 0;
}
//按键功能
void key_act(void)
{
if(key_msg[0] == 2)//K1完成按下+抬起后,绿灯亮起,蓝灯熄灭
{
HAL_GPIO_WritePin(LED_NOR_GPIO_Port,LED_NOR_Pin,GPIO_PIN_RESET);
HAL_GPIO_WritePin(LED_ERR_GPIO_Port,LED_ERR_Pin,GPIO_PIN_SET);
//tmc5160_act();
key_msg[0] = 0; //清除按键事件
}
if(key_msg[1] == 2)//K2完成按下+抬起后,绿灯熄灭,蓝灯亮起
{
HAL_GPIO_WritePin(LED_NOR_GPIO_Port,LED_NOR_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(LED_ERR_GPIO_Port,LED_ERR_Pin,GPIO_PIN_RESET);
key_msg[1] = 0;
}
}