/*
Function name:Get_Key
Description:捕获键值
param:None
retval:键值
Remarks:
*/
u8 Get_Key(void)
{
u8 key_value=0;
static u8 key_flag=0;
if((KEY1||KEY2||KEY3||KEY4)&&key_flag==0)
{
Delay_Ms(20);//消抖 防止误触
if(KEY1)
{
key_value=1;
key_flag=1;
}
if(KEY2)
{
key_value=2;
key_flag=1;
}
if(KEY3)
{
key_value=3;
key_flag=1;
}
if(KEY4)
{
key_value=4;
key_flag=1;
}
}
if(!(KEY1||KEY2||KEY3||KEY4)&&key_flag==1)//松手检测
{
key_flag=0;
}
return key_value;
}
按键有按下和回弹两个步骤,所以要弄一个标志位判断按键从按下到回弹的两个步骤为执行一次,防止多个按键同时按下,同时还要消抖以防按键的接触不灵。
图1.按键原理图