河北今年实现农村生活垃圾处理体系全覆盖
中新网石家庄4月27日电(赵丹媚)27日,河北省住房和城乡建设厅发布消息称,为提高农村生活垃圾治理水平,2022年,农村生活垃圾收集转运设施
(资料图片)
在电子产品中经常用到按键,尤其是经常需要MCU判断短按和长按这两种动作,本篇我们来专门聊下这个话题。
只谈理论太无聊,我们还是结合着实际应用来说明。之前写过一篇关于《CH573第一篇:实现自拍杆蓝牙遥控器1》的文章,例子默认的功能是蓝牙连接后不断的发送数据,从而不断的拍照。而实际中的遥控器通常是按一次按键,控制一次,我们在来实现该功能。
板子上只有两个按键,一个是RESET按键,一个是DOWNLOAD按键,我们使用DOWNLAOD按键,按键的一端接GND,另外一端接CH573的PB22引脚。
原理图中有一个NC的C5,但是实际板子上我却没有找到它,可能是版本不一致。
提前说明一下:CH573的代码里跑了TMOS(Task Management Operating System),可以理解为一个简单的操作系统,所以下面的代码一般的裸机代码看着略有不同,不过核心思想都是一样的,用在其他地方也很容易移植,只需要将其中的定时器部分改写即可。
最初我是这么做的,把PB22配置为上拉输入,开启下降沿中断,在中断服务函数里,启动一个事件,执行蓝牙发送。代码如下:
{GPIOB_ModeCfg(GPIO_Pin_22,GPIO_ModeIN_PU);GPIOB_ITModeCfg(GPIO_Pin_22,GPIO_ITMode_FallEdge);PFIC_EnableIRQ(GPIO_B_IRQn);}
{{{{GPIOB_ModeCfg(GPIO_Pin_22,GPIO_ModeIN_PU);}
{if(events&START_LONGCHECK_TIMER){key_long_press_flag=true;PRINT("longpress\n");return(events^START_LONGCHECK_TIMER);}
上面的这段代码初次看着有点绕,但是看明白了之后会觉得这个实现逻辑还是挺好的,注释写了,这里不再详细解释了,我在多个项目里使用的都是它。它兼顾了去抖和短按/长按的检测,并且长按可以判断出长按按下/长按弹起。短按是检测到弹起时认为是短按动作。另外如果想同时支持多个长按,也很方便添加。
轮询和中断各有优缺点,大家可以根据实际情况来选择,你一般常用哪种方式呢?
标签: