key0按下红灯亮,key0抬起红灯灭;key1按下绿灯亮,key1抬起绿灯灭。。另外mode为0是一个按键按下则锁定三个按键,抬起时解锁;mode为1时一个按键按下只锁定本按键,抬起时解锁。key_prs,key0Judge,key1Judge,wk_upJudge均为静态变量。程序无任何实际意义,纯属脑子抽筋。。。以下为按键扫描代码:
[mw_shl_code=c,true]u8 KEY_Scan(u8 mode)
{
if(mode)key_prs=1;
if(key_prs&&(KEY0==0||KEY1==0||WK_UP==1)) //按键按下触发事件
{
delay_ms(10);
key_prs = 0;
if(KEY0 == 0 && key0Judge == 0)
{
key0Judge = 1;
return KEY0_DOWN;
}
if(KEY1 == 0 && key1Judge == 0)
{
key1Judge = 1;
return KEY1_DOWN;
}
if(WK_UP == 1 && wk_upJudge == 0)
{
wk_upJudge = 1;
return WKUP_DOWN;
}
}
if((KEY0 == 1 || KEY1 == 1 || WK_UP == 0)&& key_prs == 0) //按键抬起触发事件
{
delay_ms(10);
if(KEY0 == 1 && key0Judge == 1)
{
key0Judge = 0;
key_prs = 1;
return KEY0_UP;
}
if(KEY1 == 1 && key1Judge == 1)
{
key1Judge = 0;
key_prs = 1;
return KEY1_UP;
}
if(WK_UP == 0 && wk_upJudge == 1)
{
wk_upJudge = 0;
key_prs = 1;
return WKUP_UP;
}
}
return 0;
}[/mw_shl_code]
以下为按键数据处理代码:
[mw_shl_code=c,true]void keytest(u8 mode)
{
u8 t = 0;
t = KEY_Scan(mode);
switch(t)
{
case KEY0_DOWN:
LED0 = 0;break;
case KEY1_DOWN:
LED1 = 0;break;
case WKUP_DOWN:
LED0 = 0;LED1 = 0;break;
case KEY0_UP:
LED0 = 1;break;
case KEY1_UP:
LED1 = 1;break;
case WKUP_UP:
LED0 = 1;LED1 = 1;break;
default:break;
}
}[/mw_shl_code]
|