[PIC®/AVR®/dsPIC®产品] 【CuriosityNano测评报告】07.中断方式下长短按键功能的实现

[复制链接]
856|1
 楼主| hu9jj 发表于 2021-4-10 10:33 | 显示全部楼层 |阅读模式
本帖最后由 hu9jj 于 2021-4-10 10:34 编辑

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


    启用中断:


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


    二、中断处理函数
  1. void interruptHandier(void)
  2. {
  3.     if(0 == KEY1_GetValue()){  //捕获按键动作
  4.         DELAY_milliseconds(20);
  5.         if(0 == KEY1_GetValue()){
  6.             while(!KEY1_GetValue()){
  7.                 if(key1<256){
  8.                    key1++;
  9.                     DELAY_milliseconds(20);
  10.                 }
  11.             }
  12.         }
  13.     }
  14. }


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


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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
别看我照片 发表于 2021-4-10 19:01 | 显示全部楼层
感谢楼主的分享,期待楼主有更好的作品出来。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

151

主题

1063

帖子

11

粉丝
快速回复 在线客服 返回列表 返回顶部