当前位置:首页 > 单片机 > 8号线攻城狮
[导读]▼点击下方名片,关注公众号▼一、如何进行按键检测检测按键有中断方式和GPIO查询方式两种。推荐大家用GPIO查询方式。1.从裸机的角度分析中断方式:中断方式可以快速地检测到按键按下,并执行相应的按键程序,但实际情况是由于按键的机械抖动特性,在程序进入中断后必须进行滤波处理才能判定...

点击下方名片,关注公众号

一、如何进行按键检测

检测按键有中断方式和GPIO查询方式两种。推荐大家用GPIO查询方式。

1.从裸机的角度分析

  • 中断方式:中断方式可以快速地检测到按键按下,并执行相应的按键程序,但实际情况是由于按键的机械抖动特性,在程序进入中断后必须进行滤波处理才能判定是否有效的按键事件。如果每个按键都是独立的接一个 IO 引脚,需要我们给每个 IO 都设置一个中断,程序中过多的中断会影响系统的稳定性。中断方式跨平台移植困难。

  • 查询方式:查询方式有一个最大的缺点就是需要程序定期的去执行查询,耗费一定的系统资源。实际上耗费不了多大的系统资源,因为这种查询方式也只是查询按键是否按下,按键事件的执行还是在主程序里面实现。

2.从OS的角度分析

  • 中断方式:在 OS 中要尽可能少用中断方式,因为在RTOS中过多的使用中断会影响系统的稳定性和可预见性。只有比较重要的事件处理需要用中断的方式。
  • 查询方式:对于用户按键推荐使用这种查询方式来实现,现在的OS基本都带有CPU利用率的功能,这个按键FIFO占用的还是很小的,基本都在1%以下。

二、最简单的按键检测程序

先给他说了一种经典的按键检测代码,相信大多数人使用按键函数都见过它,很简单就不过多介绍了!

#define KEY0_PRES 1  //KEY0  
#define KEY1_PRES 2  //KEY1 
#define WKUP_PRES 3  //WK_UP 

u8 KEY_Scan(u8 mode)
{  
 static u8 key_up=1;//按键按松开标志
 if(mode)key_up=1;  //支持连按    
 if(key_up
本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭