|
本帖最后由 人人學(xué)會單片機(jī) 于 2021-1-20 10:34 編輯
15 03 20 02 按鍵抖動的波形.png (195.24 KB, 下載次數(shù): 98)
下載附件
2021-1-20 10:31 上傳
22222.png (143.66 KB, 下載次數(shù): 97)
下載附件
2021-1-20 10:34 上傳
#define KEY_NO 0
#define KEY_S 1
#define KEY_M 2
#define KEY_L 3
u8 xdata Read_Data_Key=0;
void WQX_15W_Key_Init()
{
P3M0&=0x1f;
P3M1&=0x1f;
WQX_15W_Key=1;
}
void WQX_15W_Key_Scan_Drive()
{
static bit flag1=0;
static bit flag2=1;
static bit key_down=0;
static u8 count1=0;
static u16 count2=0;
if(key_down==1)
{
count2++;
if(count2>10000)
{
count2=0;
flag1=1;
if(flag2)
{
flag2=0;
Read_Data_Key= KEY_L;
}
}
if( WQX_15W_Key==1)
{
key_down=0;
flag2=1;
count2=0;
if(flag1)
{
flag1=0;
}
else
{
Read_Data_Key= KEY_S;
}
}
}
else
{
if( WQX_15W_Key==0)
{
count1++;
if(count1>100)
{
count1=0;
if( WQX_15W_Key==0)
{
key_down=1;
}
}
}
else
{
count1=0;
}
}
}
以上代碼, WQX_15W_Key表示按鍵IO口,主函數(shù)循環(huán)調(diào)用 WQX_15W_Key_Scan_Drive函數(shù)N次。長短按結(jié)果的輸出是 Read_Data_Key。
其他使用按鍵的地方,判斷一下 Read_Data_Key的值等于KEY_L表示長按、等于KEY_S表示短按,然后必須把Read_Data_Key清0。
|
|