|
// 按鍵
#define key_state_0 0
#define key_state_1 1
#define key_state_2 2
#define key_state_3 3
#define key_no 0
#define key_click 1
#define key_double 2
#define key_long 3
sbit KEY = P0^4;
sbit key1=P5^0;// 紅光
sbit key2=P3^0;//綠光開關(guān)
sbit key3=P0^2; //藍(lán)
sbit key4=P4^0; //白
sbit key5=P0^3; //加濕度
sbit key6=P5^2;//自動
static unsigned char key_read(void)
{
static unsigned char key_state_buffer1 = key_state_0;
static unsigned char key_timer_cnt1 = 0;
static unsigned char temp=0;
unsigned char key_return = key_no;
// unsigned char key;
//key = KEY; //read the I/O states
switch(key_state_buffer1)
{
case key_state_0:
if((KEY == 0)||(key1 == 0)||(key2==0)||(key3==0)||(key4==0)||(key5==0)||(key6==0))
{ key_state_buffer1 = key_state_1; temp=0;
return 0;
}
//按鍵被按下,狀態(tài)轉(zhuǎn)換到按鍵消抖和確認(rèn)狀態(tài)//
break;
case key_state_1:
if(KEY== 0)
{
temp=1;
key_timer_cnt1 = 0;
key_state_buffer1 = key_state_2;
//按鍵仍然處于按下狀態(tài)
//消抖完成,key_timer開始準(zhǔn)備計(jì)時(shí)
//狀態(tài)切換到按下時(shí)間計(jì)時(shí)狀態(tài)
}
else if(key1==0)
{
temp=2;
// key_timer_cnt1 = 0;
key_state_buffer1 = key_state_2;
}
else if(key2==0)
{
temp=4;
// key_timer_cnt1 = 0;
key_state_buffer1 = key_state_2;
}
else if(key3==0)
{
temp=5;
// key_timer_cnt1 = 0;
key_state_buffer1 = key_state_2;
}
else if(key4==0)
{
temp=6;
// key_timer_cnt1 = 0;
key_state_buffer1 = key_state_2;
}
else if(key5==0)
{
temp=7;
// key_timer_cnt1 = 0;
key_state_buffer1 = key_state_2;
}
else if(key6==0)
{
temp=8;
// key_timer_cnt1 = 0;
key_state_buffer1 = key_state_2;
}
else
{
key_state_buffer1 = key_state_0; temp=0;
}
//按鍵已經(jīng)抬起,回到按鍵初始狀態(tài)
break; //完成軟件消抖
case key_state_2:
if((KEY == 0)||(key1 == 0)||(key2==0)||(key3==0)||(key4==0)||(key5==0)||(key6==0))
{
key_state_buffer1 = key_state_2;
if(temp==1)
{
if(++key_timer_cnt1 >= 100) //按鍵繼續(xù)按下,計(jì)時(shí)超過1000ms
{
key_return = key_long; //送回長按事件
key_state_buffer1 = key_state_3; //轉(zhuǎn)換到等待按鍵釋放狀態(tài)
}
}
}
else
{
key_return = temp; //按鍵抬起,產(chǎn)生一次click操作
key_state_buffer1 = key_state_0; //轉(zhuǎn)換到按鍵初始狀態(tài)
}
/* if(KEY == 1)
{
key_return = key_click; //按鍵抬起,產(chǎn)生一次click操作
key_state_buffer1 = key_state_0; //轉(zhuǎn)換到按鍵初始狀態(tài)
}
else if(++key_timer_cnt1 >= 100) //按鍵繼續(xù)按下,計(jì)時(shí)超過1000ms
{
key_return = key_long; //送回長按事件
key_state_buffer1 = key_state_3; //轉(zhuǎn)換到等待按鍵釋放狀態(tài)
} */
break;
case key_state_3: //等待按鍵釋放
if((KEY == 0)||(key1 == 0)||(key2==0)||(key3==0)||(key4==0)||(key5==0)||(key6==0)) //按鍵釋放
key_state_buffer1 = key_state_3; //切回按鍵初始狀態(tài)
else //按鍵釋放
key_state_buffer1 = key_state_0; //切回按鍵初始狀態(tài)
break;
}
return key_return;
}
|
|