逻辑判断
按键的判断标准,当按键的一端接地时未按下时端口为1按下时端口为0(上拉模式),当一端接高电平时未按下时为0按下时为1(下拉模式),
当识别到按键按下时再加上一端10—20ms的延时防止误触,其中按键模式分为连续模式和非连续模式 连续模式时,在一直按下的同时一直输出按下的值:非连续模式下,只输出一次按下的值,等松开后再按下才再一次输出按下的值。
判断逻辑
设置键值key_up为1是表示未按下按键,if按键未按下即按键值key_up为1且有按键按下即有按键输入时返回按键值(1-4),代表1-4的按键按下。
静态变量
按键值用static来定义表示静态变量可以保持数据不变,不随意初始化,static u8 key_up=1;//按键按松开标志 if(mode)key_up=1; //支持连按
编程逻辑
u8 KEY_Scan(u8 mode)
{
static u8 key_up=1;//按键按松开标志
if(mode)key_up=1; //支持连按
if(key_up&&(KEY0= =0||KEY1= =0||KEY2= =0||WK_UP= =1)) //key_up为0时无法进入if语句
{
delay_ms(10);//去抖动
key_up=0;
if(KEY00)return KEY0_PRES;
else if(KEY10)return KEY1_PRES;
else if(KEY20)return KEY2_PRES;
else if(WK_UP1)return WKUP_PRES;
}else if(KEY01&&KEY11&&KEY21&&WK_UP0)key_up=1; //判断无按键按下状态
return 0;// 无按键按下 当未松开时key_up为0
}