关于51单片机的独立键盘检测

在51单片机中,怎么用中断的方式检测按键是否按下?希望最好能有代码。谢谢。

4个回答

、、。引起中断肯定要设置触发事件,键盘的话你肯定要设置低电平中断或者下降沿中断,然后打开该接口对应的中断,再打开总中断,首先确定该键盘对应的接口是中断接口,传统51一共有两个外部中断接口,中断0(P3.2)和中断1(P3.3)
也就是说你的按键必须接到这两个口才能引起中断。
void EX0Init()
{
IT0 = 1; //外部中断0为下降沿中断
EX0 = 1;//外部中断0对应的中断打开
EA = 1; //打开总中断。
}
//一旦有按键按下引起中断,MCU就会自动进入到下面这个程序里
void EX0Isr() interrupt 0
{
//要执行的代码
}

1、引用楼上的说法,我要补充一点:
void EX0Init()
{
IT0 = 1; //外部中断0为下降沿中断
EX0 = 1;//外部中断0对应的中断打开
EA = 1; //打开总中断。
}
//一旦有按键按下引起中断,MCU就会自动进入到下面这个程序里,
由于按键抖动的问题,会频繁进入中断,很不稳定;而且,干扰产生的低电平也很容易引起中断
void EX0Isr() interrupt 0
{
//要执行的代码,
}

2、可以改为这样,采用定时中断,去扫描按键,定时查询,这样既不会调用delay这种耗时的延时,
也避免了频繁进入中断。
初始化定时器
void timer1_init()
{
}

void timer_sr() interrupt 1()
{
//做一个1ms的定时
//1ms定时到了,放一个标志位 flag = 1;
}

void mian()
{
while(1)
{
if(flag == 1)
{
//执行按键扫描处理
}
}
}

按键按下有个电平变化,检测中断的电平是高电平触发还是低电平触发就行了。代码木有啊,早转行了。

传统51一共有两个外部中断接口,中断0(P3.2)和中断1(P3.3)

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐