一种单片机按键长按短按识别处理方法

有一个项目,用于自动温湿度控制,在使用的时候,需要操作者在人机界面对温湿度的目标值用按键进行设置,设置操作的使用频率不高。

为了防止误操作,客户要求长按3秒才能进入设置模式,之前在编程的时候使用单片机内部计时器开发,编写的代码冗长而且对外设资源的利用率不高。

后来看到别人写的一个代码,比之前写的更加精妙一些,虽然使用软件延时精度不高但是对于按键长按短按识别已足够,分享给大家。该例程实现了单片机区别处理按键长按(大于3秒)和短按(小于3秒)的方法,源码来自于他人,仅供学习参考。

单片机按键的引脚用WKUP_KD表示,需要事先进行定义;

此程序还需要一个延时30毫秒的子程序段delay_ms(30)和计时变量t;

实现的流程为:

1.检测WKUP_KD按键是否按下,一旦按下进入Check_WKUP程序段;

2.进入while死循环,在循环中反复检测WKUP_KD的按下状态。

如按键一直按下,计时变量t加一,直到检测到的按下时间大于3秒,退出循环返回1;

如循环中检测到按键抬起,则认定为按键按下时间不足3秒,退出循环返回0;

3.在其他程序中分别对Check_WKUP的不同返回值处理,以区别处理按键长按还是短按。

图1 长按短按C程序代码

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180413G0RGYP00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券