<li id="8g3ty"><tbody id="8g3ty"><th id="8g3ty"></th></tbody></li>
    <label id="8g3ty"><samp id="8g3ty"></samp></label>
  • <span id="8g3ty"></span>

    1. <center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
    2. <bdo id="8g3ty"><meter id="8g3ty"><bdo id="8g3ty"></bdo></meter></bdo><center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
      <label id="8g3ty"><samp id="8g3ty"></samp></label>

    3. 電子開發網

      電子開發網電子設計 | 電子開發網Rss 2.0 會員中心 會員注冊
      搜索: 您現在的位置: 電子開發網 >> 電子開發 >> 單片機 >> 正文

      單片機4×4矩陣鍵盤設計方案

      作者:佚名    文章來源:本站原創    點擊數:    更新時間:2012-2-4

       1、設計原理

        (1)如圖14.2所示,用單片機的并行口P3連接4×4矩陣鍵盤,并以單片機的P3.0-P3.3各管腳作輸入線,以單片機的P3.4-P3.7各管腳作輸出線,在數碼管上顯示每個按鍵 “0-F”的序號。

        (2)鍵盤中對應按鍵的序號排列如圖14.1所示。

      單片機矩陣鍵盤 

        2、參考電路

        單片機矩陣設計   圖14.2 4×4矩陣式鍵盤識別電路原理圖

        3、電路硬件說明

        (1)在“單片機系統”區域中,把單片機的P3.0-P3.7端口通過8聯撥動撥碼開關JP3連接到“4×4行列式鍵盤”區域中的M1-M4,N1-N4端口上。

        (2)在“單片機系統”區域中,把單片機的P0.0-P0.7端口連接到“靜態數碼顯示模塊”區域中的任何一個a-h端口上;要求:P0.0對應著a,P0.1對應著b,……,P0.7對應著h。

        4、程序設計內容

        (1)4×4矩陣鍵盤識別處理 。

        (2)每個按鍵都有它的行值和列值,行值和列值的組合就是識別這個按鍵的編碼。矩陣的行線和列線分別通過兩并行接口和CPU通信。鍵盤的一端(列線)通過電阻接VCC,而接地是通過程序輸出數字“0”實現的。鍵盤處理程序的任務是:確定有無鍵按下,判斷哪一個鍵按下,鍵的功能是什么?還要消除按鍵在閉合或斷開時的抖動。兩個并行口中,一個輸出掃描碼,使按鍵逐行動態接地;另一個并行口輸入按鍵狀態,由行掃描值和回饋信號共同形成鍵編碼而識別按鍵,通過軟件查表,查出該鍵的功能。

        5、程序流程圖(如圖14.3所示)

      單片機矩陣鍵盤設計程序框圖 

      6、匯編源程序

        ;;;;;;;;;;定義單元;;;;;;;;;;

        COUNT EQU 30H

        ;;;;;;;;;;入口地址;;;;;;;;;;

        ORG 0000H

        LJMP START

        ORG 0003H

        RETI

        ORG 000BH

        RETI

        ORG 0013H

        RETI

        ORG 001BH

        RETI

        ORG 0023H

        RETI

        ORG 002BH

        RETI

        ;;;;;;;;;;主程序入口;;;;;;;;;;

        ORG 0100H

        START: LCALL CHUSHIHUA

        LCALL PANDUAN

        LCALL XIANSHI

        LJMP START

        ;;;;;;;;;;初始化程序;;;;;;;;;;

        CHUSHIHUA: MOV COUNT,#00H

        RET

        ;;;;;;;;;;判斷哪個按鍵按下程序;;;;;;;;;;

        PANDUAN: MOV P3,#0FFH

        CLR P3.4

        MOV A,P3

        ANL A,#0FH

        XRL A,#0FH

        JZ SW1

        LCALL DELAY10MS

        JZ SW1

        MOV A,P3

        ANL A,#0FH

        CJNE A,#0EH,K1

        MOV COUNT,#0

        LJMP DK

        K1: CJNE A,#0DH,K2

        MOV COUNT,#4

        LJMP DK

        K2: CJNE A,#0BH,K3

        MOV COUNT,#8

        LJMP DK

        K3: CJNE A,#07H,K4

        MOV COUNT,#12

        K4: NOP

        LJMP DK

        SW1: MOV P3,#0FFH

        CLR P3.5

        MOV A,P3

        ANL A,#0FH

        XRL A,#0FH

        JZ SW2

        LCALL DELAY10MS

        JZ SW2

        MOV A,P3

        ANL A,#0FH

        CJNE A,#0EH,K5

        MOV COUNT,#1

        LJMP DK

        K5: CJNE A,#0DH,K6

        MOV COUNT,#5

        LJMP DK

        K6: CJNE A,#0BH,K7

        MOV COUNT,#9

        LJMP DK

        K7: CJNE A,#07H,K8

        MOV COUNT,#13

        K8: NOP

        LJMP DK

        SW2: MOV P3,#0FFH

        CLR P3.6

        MOV A,P3

        ANL A,#0FH

        XRL A,#0FH

        JZ SW3

        LCALL DELAY10MS

        JZ SW3

        MOV A,P3

        ANL A,#0FH

        CJNE A,#0EH,K9

        MOV COUNT,#2

        LJMP DK

        K9: CJNE A,#0DH,KA

        MOV COUNT,#6

        LJMP DK

        KA: CJNE A,#0BH,KB

        MOV COUNT,#10

        LJMP DK

        KB: CJNE A,#07H,KC

        MOV COUNT,#14

        KC: NOP

        LJMP DK

        SW3: MOV P3,#0FFH

        CLR P3.7

        MOV A,P3

        ANL A,#0FH

        XRL A,#0FH

        JZ SW4

        LCALL DELAY10MS

        JZ SW4

        MOV A,P3

        ANL A,#0FH

        CJNE A,#0EH,KD

        MOV COUNT,#3

        LJMP DK

        KD: CJNE A,#0DH,KE

        MOV COUNT,#7

        LJMP DK

        KE: CJNE A,#0BH,KF

        MOV COUNT,#11

        LJMP DK

        KF: CJNE A,#07H,KG

        MOV COUNT,#15

        KG: NOP

        LJMP DK

        SW4: LJMP PANDUAN

        DK: RET

        ;;;;;;;;;;顯示程序;;;;;;;;;;

        XIANSHI: MOV A,COUNT

        MOV DPTR,#TABLE

        MOVC A,@A+DPTR

        MOV P0,A

        LCALL DELAY

        SK: MOV A,P3

        ANL A,#0FH

        XRL A,#0FH

        JNZ SK

        RET

        ;;;;;;;;;;10ms延時程序;;;;;;;;;;

        DELAY10MS: MOV R6,#20

        D1: MOV R7,#248

        DJNZ R7,$

        DJNZ R6,D1

        RET

        ;;;;;;;;;;200ms延時程序;;;;;;;;;;

        DELAY: MOV R5,#20

        LOOP: LCALL DELAY10MS

        DJNZ R5,LOOP

        RET

        ;;;;;;;;;;共陰碼表;;;;;;;;;;

        TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H

        DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H

        ;;;;;;;;;;結束標志;;;;;;;;;;

        END

      7、C語言源程序

        #include

        unsigned char code table[]={0x3f,0x66,0x7f,0x39,

        0x06,0x6d,0x6f,0x5e,

        0x5b,0x7d,0x77,0x79,

        0x4f,0x07,0x7c,0x71};

        void main(void)

        { unsigned char i,j,k,key;

        while(1)

        { P3=0xff; //給P3口置1//

        P3_4=0; //給P3.4這條線送入0//

        i=P3;

        i=i&0x0f; //屏蔽低四位//

        if(i!=0x0f) //看是否有按鍵按下//

        { for(j=50;j>0;j--) //延時//

        for(k=200;k>0;k--);

        if(i!=0x0f) //再次判斷按鍵是否按下//

        { switch(i) //看是和P3.4相連的四個按鍵中的哪個//

        { case 0x0e:

        key=0;

        break;

        case 0x0d:

        key=1;

        break;

        case 0x0b:

        key=2;

        break;

        case 0x07:

        key=3;

        break;

        }

        P0=table[key]; //送數到P0口顯示//

        }

        }

        P3=0xff;

        P3_5=0; //讀P3.5這條線//

        i=P3;

        i=i&0x0f; //屏蔽P3口的低四位//

        if(i!=0x0f) //讀P3.5這條線上看是否有按鍵按下//

        { for(j=50;j>0;j--) //延時//

        for(k=200;k>0;k--);

        i=P3; //再看是否有按鍵真的按下//

        i=i&0x0f;

        if(i!=0x0f)

        { switch(i) //如果有,顯示相應的按鍵//

        { case 0x0e:

        key=4;

        break;

        case 0x0d:

        key=5;

        break;

        case 0x0b:

        key=6;

        break;

        case 0x07:

        key=7;

        break;

        }

        P0=table[key]; //送入P0口顯示//

        }

        }

        P3=0xff;

        P3_6=0; //讀P3.6這條線上是否有按鍵按下//

        i=P3;

        i=i&0x0f;

        if(i!=0x0f)

        { for(j=50;j>0;j--)

        for(k=200;k>0;k--);

        i=P3;

        i=i&0x0f;

        if(i!=0x0f)

        { switch(i)

        { case 0x0e:

        key=8;

        break;

        case 0x0d:

        key=9;

        break;

        case 0x0b:

        key=10;

        break;

        case 0x07:

        key=11;

        break;

        }

        P0=table[key];

        }

        }

        P3=0xff;

        P3_7=0; //讀P3.7這條線上是否有按鍵按下//

        i=P3;

        i=i&0x0f;

        if(i!=0x0f)

        { for(j=50;j>0;j--)

        for(k=200;k>0;k--);

        i=P3;

        i=i&0x0f;

        if(i!=0x0f)

        { switch(i)

        { case 0x0e:

        key=12;

        break;

        case 0x0d:

        key=13;

        break;

        case 0x0b:

        key=14;

        break;

        case 0x07:

        key=15;

        break;

        }

        P0=table[key];

        }

        }

        }

        }

        8、注意事項

        在硬件電路中,要把8聯撥動撥碼開關JP2撥下,把8聯撥動撥碼開關JP3撥上去。

      Tags:單片機,矩陣鍵盤,設計  
      責任編輯:admin
    4. 上一篇文章:
    5. 下一篇文章:
    6. 請文明參與討論,禁止漫罵攻擊,不要惡意評論、違禁詞語。 昵稱:
      1分 2分 3分 4分 5分

      還可以輸入 200 個字
      [ 查看全部 ] 網友評論
      關于我們 - 聯系我們 - 廣告服務 - 友情鏈接 - 網站地圖 - 版權聲明 - 在線幫助 - 文章列表
      返回頂部
      刷新頁面
      下到頁底
      晶體管查詢
      主站蜘蛛池模板: 国产精品无码久久综合| 中文字幕亚洲综合久久男男| 亚洲偷自拍拍综合网| 精品综合久久久久久97| 亚洲高清中文字幕综合网| 久艾草国产成人综合在线视频| 天天综合色天天桴色| 狠狠综合久久久久综合小说网| 少妇人妻综合久久中文字幕| 色综合色天天久久婷婷基地 | 亚洲色偷偷偷鲁综合| 天天久久影视色香综合网| 亚洲伊人成无码综合网 | 日本久久综合久久综合| 香蕉久久综合精品首页| 人人狠狠综合久久88成人| HEYZO无码综合国产精品227| 久久久久高潮综合影院| 五月丁香六月综合缴清无码| 色综合67194| 无码专区久久综合久中文字幕| 国产成人久久综合热| 婷婷六月久久综合丁香可观看| 色狠狠成人综合色| 色欲久久久天天天综合网精品| 狠狠色狠狠色综合伊人| 久久综合综合久久97色| 中文字幕国产综合| 一本久久综合亚洲鲁鲁五月天| 亚洲伊人久久综合中文成人网| 狠狠色丁香婷婷综合潮喷| 色综久久天天综合绕视看| 天天综合天天做天天综合| 久久婷婷是五月综合色狠狠| 丁香婷婷亚洲六月综合色| 亚洲丁香色婷婷综合欲色啪| 婷婷五月综合缴情在线视频| 人人狠狠综合久久88成人| 色天天综合久久久久综合片| 国产精品综合在线| 天天综合网网欲色|