#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;
}
}
|