按键扫描函数(正点原子)

说明下面正点原子按键扫描函数逻辑思路

u8 KEY_Scan(u8 mode)
{     
    static u8 key_up=1;//按键按松开标志
    if(mode)key_up=1;  //支持连按          
    if(key_up&&(KEY0==0||KEY1==0||WK_UP==1))
    {
        delay_ms(10);//去抖动 
        key_up=0;//标记按键已经被按下
        if(KEY0==0)return KEY0_PRES;
        else if(KEY1==0)return KEY1_PRES;
        else if(WK_UP==1)return WKUP_PRES;
    }else if(KEY0==1&&KEY1==1&&WK_UP==0)key_up=1; //标记按键已经被释放        
     return 0;// 无按键按下
}

1. static u8 key_up=1;静态变量key_up初始化,说一下静态变量,如下图1所示,切记不是说声明为静态变量后,其值就是一直不变的。初始化一般来讲可以随意赋值,这里不影响。

图1

2.main主函数第一次调用时(key=KEY_Scan(0);),key_up被初始化为1,此时如果有按键按下,进入if(key_up&&(KEY0==0||KEY1==0||WK_UP==1))语句,key_up被赋值为0,并且返回返回值参与下一步的逻辑运算,此时等待此次操作结束,再次调用key=KEY_Scan(0);函数时,key_up被再次赋值为1,如果此时再有按键按下,继续上述的操作。

总结来讲,上述(u8 KEY_Scan(u8 mode))函数主要时检测是否有按键按下的函数,如果有按键按下,并且返回到底是那个按键按下。(所以说可以看到key_up在大部分条件判断下,都被赋值为1,因为要保证进入按键是否按下的检测函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值