按键扫描C语言思路

按键扫描(支持连续按)的一般思路

 u8 KEY_Scan(void)
    {
      if(KEY按下)
     {
           delay_ms(10);//延时10-20ms,防抖。
           if(KEY确实按下)
            {
               return KEY_Value;
             }
          return 无效值;
     }
    }

按键扫描(不支持连续按)的一般思路

static 关键字

定义一个静态变量,兼具静态存储的局部变量。和自动变量具有相同的作用域,但当包含这些变量的函数完成工作时,它们并不消失

 u8 KEY_Scan(void)
    {
     static u8 key_up=1;
      if(key_up &&  KEY按下)
      {
        delay_ms(10);//延时,防抖
        key_up=0;//标记这次key已经按下
        if(KEY确实按下)
          {
           return KEY_VALUE;
          }
        }else if(KEY没有按下)  key_up=1;
       return 没有按下
    }

static u8 key_up=1; 语句并不是函数的一部分,因为静态变量和全局变量在程序调入内存是就已经就位了。运行函数是static u8 key_up=1; 看起来是跳过了。key_up的存储类是空连接的静态。
函数中 static u8 key_up=1; 定义后,当KET_Scan运行结束后,key_up并不消失,而是保留了赋予的0值,函数下一次运行时仍旧是执行0值

按键扫描(两种模式合二为一)的一般思路

 u8 KEY_Scan(u8 mode)
    {
     static u8 key_up=1;
     if(mode==1) key_up=1;//支持连续按
      if(key_up &&  KEY按下)
      {
        delay_ms(10);//延时,防抖
        key_up=0;//标记这次key已经按下
        if(KEY确实按下)
          {
           return KEY_VALUE;
          }
        }else if(KEY没有按下)  key_up=1;
       return 没有按下
    }

支持连续按时,在if(key_up && KEY按下)判断语句外,key_up 都会等于1,一直返回KEY_VALUE,
不支持连续按,if(mode==1) key_up=1;失效,按下一次后,key_up=0,不会返回KEY_VALUE。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值