欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7666|回復: 6
打印 上一主題 下一主題
收起左側

51單片機單中斷多按鍵的應用源程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:256970 發表于 2019-7-25 12:31 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
    在單片機的按鍵編程中,有時會遇到一個問題,用多個按鍵來控制多個死循環,而程序一旦進入循環就跳不出來,此時會想到用中斷,而普通單片機一般只有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)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:383374 發表于 2019-8-15 01:55 來自觸屏版 | 只看該作者
還要有觸發信號,不然單代碼沒用
回復

使用道具 舉報

板凳
ID:282095 發表于 2019-8-15 11:10 | 只看該作者
沒有觸發電源信號的話 程序調不通啊
回復

使用道具 舉報

地板
ID:256970 發表于 2019-8-15 23:30 | 只看該作者
夢園心田 發表于 2019-8-15 01:55
還要有觸發信號,不然單代碼沒用

不明白你說的意思,這個程序是按鍵觸發中斷的,不需要其他觸發信號了,如果還需要其他觸發信號,這個程序就沒有什么意義了。估計你還沒有完全看懂這段代碼,大概說一下,一般按鍵是一端接按鍵引腳,一端接公共地,而使用這段代碼按鍵不用接公共地,直接將接公共地的一端都接到單個中斷口就行了,初始化中斷口需為高電平,將中斷設置為下降沿,按鍵引腳均設置為低電平,如此只要按鍵按下便能進入中斷了,在中斷內判斷鍵值,主序程中執行對應循環程序。此段代碼意在解決讓多個獨立按鍵具有中斷功能,親測有效!
回復

使用道具 舉報

5#
ID:385637 發表于 2019-8-16 09:54 | 只看該作者
這是個好方法,一個中斷可以同時用好多按鍵,但就是有時要用到組合鍵功能怎么處理?
回復

使用道具 舉報

6#
ID:256970 發表于 2019-8-17 00:03 | 只看該作者
本帖最后由 藍色海陽 于 2019-8-17 23:00 編輯
shenyuqiu 發表于 2019-8-16 09:54
這是個好方法,一個中斷可以同時用好多按鍵,但就是有時要用到組合鍵功能怎么處理?

這個組合按鍵也很容易呀,看下這個位置的代碼:
if((P1&0x01)!=0x01)KT=4;
if((P1&0x02)!=0x02)KT=5;
if((P1&0x04)!=0x04)KT=6;
if((P1&0x08)!=0x08)KT=7;
這是判斷4、5、6、7鍵的鍵值,同時4567鍵均在P1端口,以此端口舉例,在上邊代碼后加如下代碼(其他不變):
if((P1&0x03)!=0x03)KT=11;//4、5鍵同時按下(1+2=3)
if((P1&0x07)!=0x07)KT=111;//4、5、6鍵同時按下(1+2+4=7)
if((P1&0x0F)!=0x0F)KT=1111;//4、5、6、7鍵同時按下(1+2+4+8=15即0F)
主程序中判斷KT的值,執行程序就好
回復

使用道具 舉報

7#
ID:282095 發表于 2019-8-17 00:36 | 只看該作者
組合按鍵 獨立按鍵 觸摸按鍵
回復

使用道具 舉報

8#
無效樓層,該帖已經被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表