2019-03-24 09:40发布
crysislove 发表于 2015-11-15 13:47 我就是想按键是按下的状态时,P1.0端口输出高电平。按键松开的状态,P1.0输出电平
chunyang 发表于 2015-11-16 21:45 看来是MCU了,那就是纯软件问题,多次查询判断状态即可。
最多设置5个标签!
看一下数据手册有没跳变沿中断(就是上升沿下降沿都产生中断)有的话按下面处理处理,
没有的话要么手动切换触发的边沿要么用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
{//按键按下
}
}
看来是MCU了,那就是纯软件问题,多次查询判断状态即可。
恩,谢谢指导
第一,搞清楚什么叫低功耗模式,如何进入和退出低功耗模式,在低功耗模式下MCU会怎么工作
第二,别将按键检测全部放在外部中断里,尝试将部分检测工作放到主函数里去
第三,尝试使用定时器中断而不是__delay_cycles函数来处理延时的问题。
楼主先参照这三条建议修改一下代码,明后天再给楼主上参考代码
一周热门 更多>