单片机按键检测函数

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机按键检测函数

/****************************************************************

***函数功能:判断某一按键的状态;返回值:0x00-未按键,0x01-短按键,

0x02-长按键;(本程序不设连发功能)注意:本长短按键是在同一按键上实现;

长按键是持续按下2 秒后认为是长按键,此时可以执行按键功能程序,必须释

放按键后才可以再次执行按键判断;短按键是按下时间在2 秒以内并释放的为

短按键,含20ms 的防抖,按键执行是在按键释放后执行的;为了定时方便,

本函数是每10ms 执行一次的,如果执行周期有变,注意更改相关变量。(可以

将此函数以结构体形式扩展为多个通道检测,本处测试函数未做。)

********************************************************************/

uchar get_sw_state(void){ static uchar count=0; //按键状态计时;static uchar long_key=0; //长按键标志;static uchar t50ms_for_err=0; //50ms 防释放干扰或人认抖动,即有按键时,须检测到释放时间达到50ms 才认为真的是释放;uchar value_tmp=0x00; //键值;if(NO_SWITCH) { if(t50ms_for_err!=0) t50ms_for_err- -; if(0==t50ms_for_err) //确实释放;{ if(0==long_key) //不可省,防止按键一直

不放,count 从TOP 值又到了BOTTOM 重新计数;{ if(count2)

t50ms_for_err=5; if((200==count)&&(0==long_key)) { long_key=1; value_tmp=0x02; }}return value_tmp;}tips:感谢大家的阅读,本文由我司收集整编。仅供参阅!

相关文档
最新文档