按键长按和短按的控制在很多小型电子设备上很常见,因为它很容易获得一键多用的控制效果。这里我们也来用一用,先把项目的控制任务要求具体化一下:
使用K5按键作为单一按键控制对象,通过K5按键的长按和短按来获得流水灯方向切换和启停控制输出效果。每次短按K5键实现启动和停止的复用,每次长按K5键实现在启动状态下的流水灯方向切换控制。
这个案例要求实现一键4用的控制效果,是不是没想过这样的用法?我们要大胆创新!把想不到的功能想出来,然后想办法实现它,如果有可能,继续开拓市场做进一步创业的事情。
项目控制的要求已经比较具体明确了,下面我们来思考一下用什么方案来实现这个控制功能。回顾前面我们讲到从50毫秒延伸到500毫秒的程序设计方法,使用了一个计数变量来实现。这里我们同样可以这么做,那就是在定时中断服务程序里去检测K5键是否有按下,如果有按下,我们就让这个变量在每次定时到达后做加1的计数。为了界定长按和短按,我们可以设定一个分解点值,比如30次定时中断为界,小于30次的,算是短按,大于等于30次的就认作为长按。
接着在K5键放开后,视长按或者短按做输出控制的分别处理,这个方面的内容在前面的程序设计中多次述及,这里就不重复了。大家按照这个思路先作些设计和调试,然后结合本节的视频讲解做些总结和分析。
由此可以看出,本案例要求的一键四用,灵活应用了定时中断,在中断服务程序里根据任务要求设计了计数变量,以识别长短按的按键动作;同时还在按键释放时结合长短按的效果进一步使用标志位来获得按键复用的控制输出。这里有几个细节需要特别注意:计数变量每次处理完成后必须清零,还有流水灯间隔时间的计数变量累加也要及时清零等等。
本例是一个比较常见的按键应用案例,貌似复杂的问题,被我们一一破解!而且所用程序语句也并不多,只要思路清晰,在我们前面反复编程训练的基础上,便可以获得更多设计能力的提升。请大家学完后自己也重新做一做吧。

