| 
 
| 本帖最后由 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);              //等待按键松开
 }
 }
 }
 }
 
 
 | 
 |