有一个项目,用于自动温湿度控制,在使用的时候,需要操作者在人机界面对温湿度的目标值用按键进行设置,设置操作的使用频率不高。 为了防止误操作,客户要求长按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程序代码 |
|