急求单片机外部中断程序

我想用学习版上一个按键控制数码管显示,第一次按,数码管开始计数,第二次按,数码管停在那,第三次按接着往下计数,以此类推。我设想是奇数次按下,数码管计数,偶数次按下让它到外部中断中。该怎么写程序呢?急求!

bit sign=0;
void main()
{
EA =1; //开总中断
EX0=1; //允许外部中断0中断
IT0=0; //设置为电平触发方式
while(1)
{
if(sign==0) //sign=0;显示 sign=1;程序进不来不显示
{
//数码管显示
}
}
}
void WW() interrupt 0
{
sign=~sign;
}

我只是简写一下,大概就是这个意思:第一次按下数码管显示,再按一下数码管不显示

希望对你有所帮助!追问

谢谢你高手,我现在用你的思路写了下,但现在是我按着不放的时候,数码管一直走,一松手就停了,再按接着走,一松手就停,我该怎样在修改呢?

追答

因为你没有对按键做松手检测
sbit P32=P3^2;
void WW() interrupt 0
{
sign=~sign;
while(!P32); // INIT0松手检测 现在做普通IO口使用
//(我是这么写的,不知道还有没有其它对 INIT0的松手检测)
Delay(100); // 延时 (我用100ms)
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-02-25
这相不用中断程序,就是一个按键扫描就行了追问

按键扫描怎么用啊?举个小例子,写几句程序,高手。

追答

按键扫描程序太多了,方式也很多,像你这种最简单的方式是直接在主程序里循环扫描,连续读到几次连接IO口状态都是相同时,认为按键有效就行了。然后你再根据按键次数进行处理

追问

键盘扫描貌似不行,还得用外部中断。要不按键信号不能及时被采集,有些按下都是无效的。

追答

呵呵,按键扫描都是放在定时中断里的,一般的系统都会设置一个定时器吧,1ms或5ms的定时中断,那样去读按键是没有问题的,不过去抖时间你自己可以多试试