打印
[PIC®/AVR®/dsPIC®产品]

【CuriosityNano测评报告】07.中断方式下长短按键功能的实现

[复制链接]
637|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hu9jj|  楼主 | 2021-4-10 10:33 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 hu9jj 于 2021-4-10 10:34 编辑

#申请原创#
    扩展按键功能最简单的方法就是实现长短按键的识别,这样一个按键就可以替代多个按键。我是在按键处理模块中不断对一个变量进行自加,从而获得按键时间的长短,为了提高处理的效率,我使用的是按键的中断方式。下面简单介绍实现的过程:
    一、开启中断功能
    进入MCC代码配置器,设置按键引脚的下降沿中断模式:


    启用中断:


    生成代码后,在主程序中设置好相应的参数,按键的中断功能就启用了:


    二、中断处理函数
void interruptHandier(void)
{
    if(0 == KEY1_GetValue()){  //捕获按键动作
        DELAY_milliseconds(20);
        if(0 == KEY1_GetValue()){
            while(!KEY1_GetValue()){
                if(key1<256){
                   key1++;
                    DELAY_milliseconds(20);
                }
            }
        }
    }
}


    三、在主循环中对全局变量key1进行处理,我这里仅仅是显示按键数值:
if(key1>0){                         //滚轮按键处理
    LCD_write_value(0,0,3,0,1,key1);//显示按键值
    key1 = 0;                      //清按键
        }


    下面是测试过程的动画,按下按键立即释放,此时的key1值大约在6~10左右;按下按键,稍等片刻后释放,key1值大约为20~30左右;按下约一秒后释放,key1值将大于40(参见屏幕左上角的数值),用户只要稍微练习一下,便可轻松掌握至少三种按键状态。

使用特权

评论回复
沙发
别看我照片| | 2021-4-10 19:01 | 只看该作者
感谢楼主的分享,期待楼主有更好的作品出来。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:Microchip
简介:让我们来为您提供帮助。我们可提供各种资源来帮助您解决一切问题。是否需要与我们的客户支持团队联系?您可以通过电话、在线聊天功能或电子邮件与他们联系。

151

主题

1059

帖子

11

粉丝