bh7jec 发表于 2014-1-7 20:55:53

求教: 多个按键使用中断

arduino 328好象只有2个外部中断可以使用,但是我需要用到4个按键,而且按键功能必须使用中断来触发,想请教下各位,多个按键如何使用中断来判断?

i7456 发表于 2014-1-8 10:39:54

bh7jec 发表于 2014-1-8 09:43 static/image/common/back.gif
因为主循环里有工作要做,耗时也比较长,如果在其中判断按键是否按下,就会出现不按键不灵,因为在做其他工 ...

试试这样行不行:

D6\7\8\9作为输入,外部电阻上拉;
按键一端接地,一端与输入口相连;
D2作为中断输入,上升沿触发;无按键按下时,三极管导通,D2为低电平;
按键按下时,输入口电平被拉低。同时三极管基级被拉低至0.6V,三极管截至,D2为高电平,触发中断;
在中断程序中读取D6-9的状态,哪个为低电平,就是哪个被按下了。




你的主程序里,做了什么工作,导致耗时较长?
上面是按照你的思路的解决方案,用的器件非常多,并不是很好的方案。
较好的方式,应该是程序避免使用延时;然后查询各输入端口的状态。

bh7jec 发表于 2014-1-7 22:48:42

4个按键应该怎样接线呢?

i7456 发表于 2014-1-7 23:46:14

为什么一定要中断触发呢?

zoologist 发表于 2014-1-8 08:58:27

恩 可以试试 polling 的方式,不一定polling就不行,因为按键是一个机械动作,耗时比电子的要长很多的

bh7jec 发表于 2014-1-8 09:43:48

因为主循环里有工作要做,耗时也比较长,如果在其中判断按键是否按下,就会出现不按键不灵,因为在做其他工作的时间中,这个时候按下键并不能够正好被检测到,所以必须使用中断来触发,这样按键才灵敏,而且可以随时中断当前工作。现在我想知道的是,外部中断口才2个,但我要用到4个键,线路改怎么接呢?

zoologist 发表于 2014-1-8 09:54:50

bh7jec 发表于 2014-1-8 09:43 static/image/common/back.gif
因为主循环里有工作要做,耗时也比较长,如果在其中判断按键是否按下,就会出现不按键不灵,因为在做其他工 ...

想办法加入一个或门,挂到中断上。当出现按键的时候就跳到中断程序中,再检查具体是哪个按键。

不过如何设计这样的电路我就不懂了,请高手支招吧。

Be1ieve 发表于 2014-1-9 22:41:23

https://code.google.com/p/arduino-pinchangeint/
用內建的pinchange中斷做觸發
好處是寫法跟現在的中斷幾乎一樣,atmega328所有輸入都可以用
缺點是跟同樣用到pinchange中斷的庫相衝,例如software serial

#include <PinChangeInt.h>
PCintPort::attachInterrupt(按鍵,程序,狀態);

bh7jec 发表于 2014-1-10 09:23:03

请问楼上的,如果用內建的pinchange中斷做觸發的话,是不是外围电路就没这么复杂了,只需要在几个输入端口上接按键就可以了?

bh7jec 发表于 2014-1-10 10:57:01

http://blog.ardublock.com/zh/2013/10/29/evaluating-of-event-driven-libraries-on-arduino/
Arduino上有关事件驱动库的评估

貌似上面的很多库应该可以解决,还没试,先贴上链接。:)

hz0806 发表于 2016-5-25 09:59:05

求源代码!!!!
1.本设计题目要求当51单片机遇到几个外部中断事件都需要使用外部中断的情况(但51单片机的外部中断只有两个)此时可使用联合中断申请的方式来处理。使用外部中断0来检测4个外部中断事件。
2.硬件电路要求:3个由按键和上拉电阻构造的低电平事件信号通过74LS21四输入与门连接到单片机的外部中断引脚INT0(P3.2)上,然后3个信号分别连接到单片机的P1.0—P1.2引脚上。

老来疯 发表于 2016-5-28 18:08:23

还有14 + 6 个 外部 电平变化中断
页: [1]
查看完整版本: 求教: 多个按键使用中断