打印

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

[复制链接]
1689|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 | 只看该作者
程序贴出来

使用特权

评论回复
5
yy005566|  楼主 | 2018-6-6 14:19 | 只看该作者

已贴出,求教!

使用特权

评论回复
6
Cjy_JDxy| | 2018-6-6 14:23 | 只看该作者
没这样用过。用中断也是定时器中断。

使用特权

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

本版积分规则

27

主题

80

帖子

0

粉丝