#include "Key.h"
u16 Key_Lock; //按鍵鎖定
u16 Key_Down; //按鍵被按下
u16 Key_Up; //按鍵釋放
u16 Key_Count[16]; //消抖計數
//消抖次數
code u16 Key_Threshold[] =
{
100, //0x0001
100, //0x0002
1, //0x0004
1, //0x0008
1, //0x0010
1, //0x0020
1, //0x0040
1, //0x0080
1, //0x0100
1, //0x0200
1, //0x0400
1, //0x0800
1, //0x1000
1, //0x2000
1, //0x4000
1 //0x8000
};
/*========================================================
//觸摸按鍵檢測 主程序 長調用
//
=========================================================*/
void Key_Scan()
{
u8 i;
u16 Loop_Bit = 1;
u16 Key = 0;
if(K1_IO == 0)
{
Key |= 0x01;
}
if(K2_IO == 0)
{
Key |= 0x02;
}
for(i = 0; i < 16; i++)
{
if((Key_Lock & Loop_Bit) == 0) //如果按鍵未鎖定
{
if(Key & Loop_Bit) //如果按鍵被按下,把相應位置位
{
Key_Count[i]++;
if(Key_Count[i] >= Key_Threshold[i])
{
Key_Count[i] = 0;
Key_Lock |= Loop_Bit; //鎖定按鍵
Key_Down |= Loop_Bit; //觸發按鍵
}
}
else
{
Key_Count[i] = 0;
}
}
else //如果按鍵被鎖定
{
if((Key & Loop_Bit) == 0) //如果按鍵被釋放,把相應為清零
{
Key_Count[i]++;
if(Key_Count[i] >= Key_Threshold[i])
{
Key_Count[i] = 0;
Key_Lock &= ~Loop_Bit;
Key_Up |= Loop_Bit;
}
}
else
{
Key_Count[i] = 0;
}
}
Loop_Bit <<= 1;
}
}
/*
10毫秒調用一次
*/
void Key_Handle()
{
//組合按鍵
if((Key_Lock & (KEY1 | KEY2)) == (KEY1 | KEY2))
{
}
//任意按鍵按下
if(Key_Down)
{
}
//按鍵按下觸發--
if(Key_Down & KEY1)
{
Key_Down &= ~KEY1;
}
//按鍵釋放觸發
if(Key_Up & KEY1)
{
Key_Up &= ~KEY1;
}
//按鍵按下觸發--
if(Key_Down & KEY2)
{
Key_Down &= ~KEY2;
}
//按鍵釋放觸發
if(Key_Up & KEY2)
{
Key_Up &= ~KEY2;
}
//按鍵按下觸發--
if(Key_Down & KEY3)
{
Key_Down &= ~KEY3;
}
//按鍵釋放觸發
if(Key_Up & KEY3)
{
Key_Up &= ~KEY3;
}
//按鍵按下觸發--
if(Key_Down & KEY4)
{
Key_Down &= ~KEY4;
}
//按鍵釋放觸發--
if(Key_Up & KEY4)
{
Key_Up &= ~KEY4;
}
}
|