uint8_t key_scan(uint8_t mode)
{
static uint8_t key_up = 1; /* 按键按松开标志 */
uint8_t keyval = 0;
if (mode) key_up = 1; /* 支持连按 */
if (key_up && (KEY0 == 1 || WK_UP == 1)) /* 按键松开标志为1, 且有任意一个按键按下了 */
{
delay_ms(10); /* 去抖动 */
key_up = 0;
if (KEY0 == 1) keyval = KEY0_PRES;
if (WK_UP == 1) keyval = WKUP_PRES;
}
else if (KEY0 == 0 && WK_UP == 0) /* 没有任何按键按下, 标记按键松开 */
{
key_up = 1;
}
return keyval; /* 返回键值 */
}
* @arg 0, 不支持连续按(当按键按下不放时, 只有第一次调用会返回键值,
* 必须松开以后, 再次按下才会返回其他键值)
* @arg 1, 支持连续按(当按键按下不放时, 每次调用该函数都会返回键值)
key = key_scan(0); /* 按键扫描得到键值:0:不支持连续按;1:支持连续按 */
if (key)
{
switch (key)
{
case KEY0_PRES:
break;
case WKUP_PRES:
break;
}
}
else
{
delay_ms(10);
}