在單片機的按鍵編程中,有時會遇到一個問題,用多個按鍵來控制多個死循環,而程序一旦進入循環就跳不出來,此時會想到用中斷,而普通單片機一般只有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黑下載地址:
51單片機單中斷多按鍵的應用.doc
(29 KB, 下載次數: 44)
2019-7-25 12:30 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|