按键的下降沿和低电平的问题

2019-03-24 09:40发布

请教各位,按键原来是下降沿有效,但我想把按键改为低电平有效,应该怎么改呢,是把原来的下降沿中断去掉吗?
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
16条回答
曾经in
1楼-- · 2019-03-25 12:44
本帖最后由 曾经in 于 2015-11-16 00:02 编辑

看一下数据手册有没跳变沿中断(就是上升沿下降沿都产生中断)有的话按下面处理处理,
没有的话要么手动切换触发的边沿要么用while去卡(就是松手检测), 自己看看
void P1_IODect()
{        static unsigned int old_Push_Key=0;
        unsigned int Push_Key=0;
        //-----排除输出IO的干扰后,锁定唯一被触发的中断标志位-----
        Push_Key=P1IFG&(~P1DIR);
        //-----延时一段时间,避开机械抖动区域-----
        __delay_cycles(10000);                                                        //消抖延时
        //----判断按键状态是否与延时前一致-----
        if((P1IFG&(~P1DIR))==Push_Key)                                 //如果该次按键确实有效
   {
        switch(old_Push_Key^Push_Key)       //按键有变化
        {
         //----判断具体哪个IO有变化,调用该IO的事件处理函数-----
         case BIT3:         P13_Onclick(Push_Key&BIT3);                break;
         default:                                                                        break;                //任何情况下均加上default
         }
         old_Push_Key=Push_Key;
   }
}

void P13_Onclick(unsigned int key)
{
       if(key==0)
       {//按键松开
       }
       else
       {//按键按下
       }
}



chunyang
2楼-- · 2019-03-25 18:07
crysislove 发表于 2015-11-15 13:47
我就是想按键是按下的状态时,P1.0端口输出高电平。按键松开的状态,P1.0输出电平

看来是MCU了,那就是纯软件问题,多次查询判断状态即可。
crysislove
3楼-- · 2019-03-25 21:55
 精彩回答 2  元偷偷看……
crysislove
4楼-- · 2019-03-25 23:00
chunyang 发表于 2015-11-16 21:45
看来是MCU了,那就是纯软件问题,多次查询判断状态即可。

恩,谢谢指导
qiushenghua
5楼-- · 2019-03-26 04:53
给三条建议:
第一,搞清楚什么叫低功耗模式,如何进入和退出低功耗模式,在低功耗模式下MCU会怎么工作
第二,别将按键检测全部放在外部中断里,尝试将部分检测工作放到主函数里去
第三,尝试使用定时器中断而不是__delay_cycles函数来处理延时的问题。

楼主先参照这三条建议修改一下代码,明后天再给楼主上参考代码
qiushenghua
6楼-- · 2019-03-26 05:59
 精彩回答 2  元偷偷看……

一周热门 更多>

相关问题

    相关文章