楼上的,用心去评论,非常到位非常牛逼。我很少夸人,不得不给你点赞。 |
其实这个是可以很简单的去实现的,你这个搞得看起来好恐怖方便的话,把硬件电路上传一下,把涉及商业机密抹去就行如果是直接检测充电电源的话,中断是一定会有抖动的 那么,中断被触发之后,只作清除标志位和置位一个触发标志位,用来告诉主程序:充电线插入或者拔出了,并清除定时器控制的某个变量 主函数再通过定时器变量和触发标志位来进行操作 这是我一个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; //清标志位 } |
lkc8210 发表于 2022-7-19 13:31 time_3s_ok置1 只有在定时器中断到时间后才置1 其余代码都是配置 设置不影响 目前功能就是写了我上面发的这些,我把定时器中断的代码也发出来
|
代码不全 单看你提供的代码 KG在三秒内只会出现一次高电平 怀疑time_3s_ok被重复置1 |