jianhong_wu 发表于 2015-1-17 14:09:01

利用外部中断按键唤醒掉电模式,如何在外部中断函数里去抖动?已解答。

本帖最后由 jianhong_wu 于 2015-1-17 14:31 编辑

威-广州:
我设置了外部中断为下降沿触发,


是这样子的,我要实现通过按键对单片机的工作状态进行取反,也就是睡眠和唤醒功能。因为单片机工作于掉电模式的时候需要外部中断触发才能唤醒,当唤醒的时候是点亮液晶的背光,否则背光灯关闭。当我按下按键的时候会出现抖动。

鸿哥-深圳:
毫无疑问,你在按键IO口处加的0.1uF是犯了江湖大忌,绝对不行。按键一般不能加电容,即使加电容,也不能那么大,那个0.1uF电容改成20p的电容吧。否则真的太大了。我今年曾经把李总解决过一个大的技术问题,这个问题在鸿哥还没出手前,李总的美国客户都为了这个问题专门过来,而且还相互扯皮僵持了三个月,最后鸿哥一出手,发现是他们的材料清单物料给错了,把按键的下拉电阻换成了一个104电容,引起按键不灵敏。这个问题被我发现后,从此李总对我刮目相看。

威-广州:

在外部中断服务函数是这么写,延时一会。但是不加电容去抖动效果也不行,怎么处理比较好?


鸿哥-深圳:
主要依靠软件去抖动的。你可以在外部中断里加一个标志位置1(而不是取反),然后通过标志把这个消息转移到主函数里进行去抖动处理,去抖动处理你可以参考我连载技术贴按键部分的内容,我的去抖不是用delay的。

威-广州:
我的矩阵键盘是移植鸿哥你的例程。我把这个开关机键独立拉出来,接到外部中断的。

鸿哥-深圳:
理解。独立按键你可以参考我的代码。主要依靠软件去抖动的。你可以在外部中断里加一个标志位置1(而不是取反),然后通过标志把这个消息转移到主函数里进行去抖动处理。这个是我的思路。

威-广州:
但是单片机进入掉电模式的时候,时钟信号都是停止的,那么定时器就没有工作了。

鸿哥-深圳:
你也可以这样加delay延时,延时后再判断一次P3.2的IO口状态。如果是51单片机,注意在判断读取P3.2之前要先把P3.2置1。

威-广州:
是在中断服务函数里面判断?

鸿哥-深圳:
对。

威-广州:
按照你这么做,正确的。已经解决了。程序修改如下:


页: [1]
查看完整版本: 利用外部中断按键唤醒掉电模式,如何在外部中断函数里去抖动?已解答。