硅胶按键,PIC单片机,按键不灵敏问题

[复制链接]
2015|5
 楼主| yy005566 发表于 2018-6-5 22:36 来自手机 | 显示全部楼层 |阅读模式
本帖最后由 yy005566 于 2018-6-6 14:18 编辑

有时按几下才有反应,有时按一次就反应了好多次,不知为何?程序做了按键延时判断,以及while松键判断,求大神救救我?

以下程序:
电平变化中断,唤醒sleep();

       IOCBNbits.IOCBN3=1;       //RB3下降沿触发,用于下降沿触发唤醒SLEEP()
       IOCBNbits.IOCBN4=1;       //RB4下降沿触发,用于下降沿触发唤醒SLEEP()
       IOCBNbits.IOCBN5=1;       //RB5下降沿触发,用于下降沿触发唤醒SLEEP()
       INTCONbits.IOCIF=0;       //标志位清楚
       INTCONbits.IOCIE=1;       //使能电平变化中断
       INTCONbits.INTE=0;
       INTCONbits.INTF=0;
       INTCONbits.PEIE=1;
       INTCONbits.GIE=1;        //总中断
       PORTB=PORTB;            //读B口
       SLEEP();                  //休眠
       NOP();                    //不做任何处理
       NOP();                   //唤醒



void interrupt ISR(void)             //中断
{
     if(INTCONbits.IOCIE&&INTCONbits.IOCIF&&IOCBFbits.IOCBF3)    //RB3电平下降触发中断
     {
        PORTBbits.RB3=~PORTBbits.RB3;        //读一次RB3
        INTCONbits.IOCIF=0;
        IOCBFbits.IOCBF3=0;
        if(PORTBbits.RB3==0)                        //RB3按下
        {
               __delay_ms(20);                        //延时20ms,再次判断
              if(PORTBbits.RB3==0)                 
             {  
              if(flag2==1||flag3==1) return;     //防止按键冲突
              flag1++;                                    //flag1标志位
              flag1=(flag1==1) ? 1:0;  
              while(!PORTBbits.RB3);              //等待按键松开
            }
        }
      }
   }

ayb_ice 发表于 2018-6-6 13:16 | 显示全部楼层
按下时直接读GPIO,返回数据正常就是程序问题
blust5 发表于 2018-6-6 13:48 | 显示全部楼层
先确认是软件逻辑问题还是硬件接触问题,问题定位好了就好解决了。
Cjy_JDxy 发表于 2018-6-6 13:53 | 显示全部楼层
程序贴出来
 楼主| yy005566 发表于 2018-6-6 14:19 | 显示全部楼层

已贴出,求教!
Cjy_JDxy 发表于 2018-6-6 14:23 | 显示全部楼层
没这样用过。用中断也是定时器中断。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

27

主题

80

帖子

0

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