其实这个是可以很简单的去实现的,你这个搞得看起来好恐怖方便的话,把硬件电路上传一下,把涉及商业机密抹去就行如果是直接检测充电电源的话,中断是一定会有抖动的
那么,中断被触发之后,只作清除标志位和置位一个触发标志位,用来告诉主程序:充电线插入或者拔出了,并清除定时器控制的某个变量
主函数再通过定时器变量和触发标志位来进行操作
这是我一个8051的充电检测,只有高电平充电检测,没有拔出检测,但原理是差不多的,你参考一下就知道了
如果是要检测插入和拔出,就增加对应的检测就可以了
KEY为中断端口
void main(void)
{
Mcu_Rst(); //单片机初始化
while(1)
{
if(key_press&&(key_10ms>=30)&&KEY)key_disp(); //处理
//key_press中断触发标志位,只在key_disp();函数中清除
}
}
//───────────────────────────────────────────────
void Int0_isr() interrupt 0 //外部中断0
{
key_press=1; //中断触发
key_10ms=0x00; //每次进入中断都清除定时器变量,这样定时器就会在抖动之后才开始计时,从最后一次退出中断开始计时
IE0=0;//清除中断标志位
}
//────────────────────────────────────────────────
void key_disp()//处理
{
key_press=0; //清标志位
}
|