在单片机的按键编程中,有时会遇到一个问题,用多个按键来控制多个死循环,而程序一旦进入循环就跳不出来,此时会想到用中断,而普通单片机一般只有2个外部中断,stc系列的查了一下最多也只有5个外部中断,那要是超过5个按键怎么办?能不能只用一个中断口来判断多个按键呢,这样就不用那么多中断口了,答案是肯定的。经过查阅单片机按键方面的资料,自己自创了如下程序,分享给大家,希望能帮到需要的人。
//51单片机单中断多按键的应用
//应用于STC15W204S,其他单片机修改引脚同样适用
//下附程序中断按键主要部分
...
sbit key0=P5^5;//定义按键引脚
sbit key1=P3^2;
sbit key2=P3^6;
sbit key3=P3^7;
sbit key4=P1^0;
sbit key5=P1^1;
sbit key6=P1^2;
sbit key7=P1^3;
sbit zhd=P3^3;//定义中断1
...
void main()
{
key0=key1=key2=key3=key4=key5=key6=key7=0;
zhd=1;//初始化中断口需为高电平,将中断设置为下降沿即可
...
while(1)
{
while(KT==0){...}//多个程序自循环
while(KT==1){...}
while(KT==2){...}
while(KT==3){...}
while(KT==4){...}
while(KT==5){...}
while(KT==6){...}
while(KT==7){...}
}
}
void EXINT_1() interrupt 2
{
delay(10);
if((P3&0x01)!=0x01)
{
key0=key1=key2=key3=key4=key5=key6=key7=1;zhd=0;
if((P5&0x20)!=0x20)KT=0;
if((P3&0x04)!=0x04){KT=1;LED=0;}
if((P3&0x40)!=0x40)KT=2;
if((P3&0x80)!=0x80)KT=3;
if((P1&0x01)!=0x01)KT=4;
if((P1&0x02)!=0x02)KT=5;
if((P1&0x04)!=0x04)KT=6;
if((P1&0x08)!=0x08)KT=7;
}
key0=key1=key2=key3=key4=key5=key6=key7=0;zhd=1;
while((P3&0x01)!=0x01);//等待按键松开,松手后执行对应主程序
}
以上的Word格式文档51黑下载地址: