• <rp id="wfxtb"><acronym id="wfxtb"></acronym></rp><em id="wfxtb"></em><dd id="wfxtb"><big id="wfxtb"><video id="wfxtb"></video></big></dd>
  • <rp id="wfxtb"></rp>

    <mark id="wfxtb"><center id="wfxtb"></center></mark>

      <rp id="wfxtb"><span id="wfxtb"><u id="wfxtb"></u></span></rp>

      <rp id="wfxtb"><object id="wfxtb"></object></rp>

      注意:訪問本站需要Cookie和JavaScript支持!請設置您的瀏覽器! 打開購物車 查看留言付款方式聯系我們
      初中電子 單片機教材一 單片機教材二
      搜索上次看見的商品或文章:
      商品名、介紹 文章名、內容
      首頁 電子入門 學單片機 免費資源 下載中心 商品列表 象棋在線 在線繪圖 加盟五一 加入收藏 設為首頁
      本站推薦:
      14. 4×4矩陣式鍵盤識別技術
      文章長度[] 加入時間[2008/5/30] 更新時間[2025/3/19 16:23:59] 級別[0] [評論] [收藏]
       
      1. 實驗任務

      如圖4.14.2所示,用AT89S51的并行口P1接4×4矩陣鍵盤,以P1.0-P1.3作輸入線,以P1.4-P1.7作輸出線;在數碼管上顯示每個按鍵的“0-F”序號。對應的按鍵的序號排列如圖4.14.1所示
      0
      4       
      8
      C
      1
      5
      9
      D
      2
      6
      A
      E
      3
      7
      B
      F
       

       
      圖4.14.1
      2. 硬件電路原理圖
       
       
      圖4.14.2
      3. 系統板上硬件連線
      (1.       把“單片機系統“區域中的P3.0-P3.7端口用8芯排線連接到“4X4行列式鍵盤”區域中的C1-C4 R1-R4端口上;
      (2.       把“單片機系統”區域中的P0.0/AD0-P0.7/AD7端口用8芯排線連接到“四路靜態數碼顯示模塊”區域中的任一個a-h端口上;要求:P0.0/AD0對應著a,P0.1/AD1對應著b,……,P0.7/AD7對應著h。
      4.  程序設計內容
      (1.       4×4矩陣鍵盤識別處理
      (2.       每個按鍵有它的行值和列值 ,行值和列值的組合就是識別這個按鍵的編碼。矩陣的行線和列線分別通過兩并行接口和CPU通信。每個按鍵的狀態同樣需變成數字量“0”和“1”,開關的一端(列線)通過電阻接VCC,而接地是通過程序輸出數字“0”實現的。鍵盤處理程序的任務是:確定有無鍵按下,判斷哪一個鍵按下,鍵的功能是什么;還要消除按鍵在閉合或斷開時的抖動。兩個并行口中,一個輸出掃描碼,使按鍵逐行動態接地,另一個并行口輸入按鍵狀態,由行掃描值和回饋信號共同形成鍵編碼而識別按鍵,通過軟件查表,查出該鍵的功能。
      5. 程序框圖

       
      P3=FFH,P3.0=0
      有鍵按下嗎?
       
      延時10ms
      真得有鍵按下嗎?
       
      根據當前狀態識別按鍵
       
      P3=FFH,P3.1=0
      有鍵按下嗎?
       
      延時10ms
      真得有鍵按下嗎?
       
      根據當前狀態識別按鍵
       
      P3=FFH,P3.2=0
      有鍵按下嗎?
       
      延時10ms
      真得有鍵按下嗎?
       
      根據當前狀態識別按鍵
       
      P3=FFH,P3.3=0
      有鍵按下嗎?
       
      延時10ms
      真得有鍵按下嗎?
       
      根據當前狀態識別按鍵

      圖4.14.3
      6. 匯編源程序
      KEYBUF    EQU 30H
                  ORG 00H
      START:      MOV KEYBUF,#2
      WAIT:  
                  MOV P3,#0FFH
                  CLR P3.4
                  MOV A,P3
                  ANL A,#0FH 
                  XRL A,#0FH
                  JZ NOKEY1
                  LCALL DELY10MS
                  MOV A,P3
                  ANL A,#0FH
                  XRL A,#0FH
                  JZ NOKEY1
                  MOV A,P3
                  ANL A,#0FH
                  CJNE A,#0EH,NK1
                  MOV KEYBUF,#0
                  LJMP DK1
      NK1:        CJNE A,#0DH,NK2
                  MOV KEYBUF,#1
                  LJMP DK1
      NK2:        CJNE A,#0BH,NK3
                  MOV KEYBUF,#2
                  LJMP DK1
      NK3:        CJNE A,#07H,NK4
                  MOV KEYBUF,#3
                  LJMP DK1
      NK4:        NOP
      DK1:   
                  MOV A,KEYBUF
                  MOV DPTR,#TABLE
                  MOVC A,@A+DPTR
                  MOV P0,A
      DK1A:       MOV A,P3
                  ANL A,#0FH
                  XRL A,#0FH
                  JNZ DK1A
      NOKEY1:
                  MOV P3,#0FFH
                  CLR P3.5
                  MOV A,P3
                  ANL A,#0FH
                  XRL A,#0FH
                  JZ NOKEY2
                  LCALL DELY10MS
                  MOV A,P3
                  ANL A,#0FH
                  XRL A,#0FH
                  JZ NOKEY2
                  MOV A,P3
                  ANL A,#0FH
                  CJNE A,#0EH,NK5
                  MOV KEYBUF,#4
                  LJMP DK2
      NK5:        CJNE A,#0DH,NK6
                  MOV KEYBUF,#5
                  LJMP DK2
      NK6:        CJNE A,#0BH,NK7
                  MOV KEYBUF,#6
                  LJMP DK2
      NK7:        CJNE A,#07H,NK8
                  MOV KEYBUF,#7
                  LJMP DK2
      NK8:        NOP
      DK2:   
                  MOV A,KEYBUF
                  MOV DPTR,#TABLE
                  MOVC A,@A+DPTR
                  MOV P0,A
      DK2A:       MOV A,P3
                  ANL A,#0FH
                  XRL A,#0FH
                  JNZ DK2A
      NOKEY2:
                  MOV P3,#0FFH
                  CLR P3.6
                  MOV A,P3
                  ANL A,#0FH
                  XRL A,#0FH
                  JZ NOKEY3
                  LCALL DELY10MS
                  MOV A,P3
                  ANL A,#0FH
                  XRL A,#0FH
                  JZ NOKEY3
                  MOV A,P3
                  ANL A,#0FH
                  CJNE A,#0EH,NK9
                  MOV KEYBUF,#8
                  LJMP DK3
      NK9:        CJNE A,#0DH,NK10
                  MOV KEYBUF,#9
                  LJMP DK3
      NK10:       CJNE A,#0BH,NK11
                  MOV KEYBUF,#10
                  LJMP DK3
      NK11:       CJNE A,#07H,NK12
                  MOV KEYBUF,#11
                  LJMP DK3
      NK12:       NOP
      DK3:
                  MOV A,KEYBUF
                  MOV DPTR,#TABLE
                  MOVC A,@A+DPTR
                  MOV P0,A
      DK3A:       MOV A,P3
                  ANL A,#0FH
                  XRL A,#0FH
                  JNZ DK3A
      NOKEY3:
                  MOV P3,#0FFH
                  CLR P3.7
                  MOV A,P3
                  ANL A,#0FH
                  XRL A,#0FH
                  JZ NOKEY4
                  LCALL DELY10MS
                  MOV A,P3
                  ANL A,#0FH
                  XRL A,#0FH
                  JZ NOKEY4
                  MOV A,P3
                  ANL A,#0FH
                  CJNE A,#0EH,NK13
                  MOV KEYBUF,#12
                  LJMP DK4
      NK13:       CJNE A,#0DH,NK14
                  MOV KEYBUF,#13
                  LJMP DK4
      NK14:       CJNE A,#0BH,NK15
                  MOV KEYBUF,#14
                  LJMP DK4
      NK15:       CJNE A,#07H,NK16
                  MOV KEYBUF,#15
                  LJMP DK4
      NK16:       NOP
      DK4:   
                  MOV A,KEYBUF
                  MOV DPTR,#TABLE
                  MOVC A,@A+DPTR
                  MOV P0,A
      DK4A:       MOV A,P3
                  ANL A,#0FH
                  XRL A,#0FH
                  JNZ DK4A
      NOKEY4:
                  LJMP WAIT
      DELY10MS:
                  MOV R6,#10
      D1:         MOV R7,#248
                  DJNZ R7,$
                  DJNZ R6,D1
                  RET
      TABLE:      DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H
                  DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H
                  END
      7. C語言源程序
      #include <AT89X51.H>
      unsigned char code table[]={0x3f,0x06,0x5b,0x4f,
                                  0x66,0x6d,0x7d,0x07,
                                  0x7f,0x6f,0x77,0x7c,
                                  0x39,0x5e,0x79,0x71};
      unsigned char temp;
      unsigned char key;
      unsigned char i,j;
      void main(void)
      {
        while(1)
          {
            P3=0xff;
            P3_4=0;
            temp=P3;
            temp=temp & 0x0f;
            if (temp!=0x0f)
              {
                for(i=50;i>0;i--)
                for(j=200;j>0;j--);
                temp=P3;
                temp=temp & 0x0f;
                if (temp!=0x0f)
                  {
                    temp=P3;
                    temp=temp & 0x0f;             
                    switch(temp)
                      {
                        case 0x0e:
                          key=7;
                          break;
                        case 0x0d:
                          key=8;
                          break;
                        case 0x0b:
                          key=9;
                          break;
                        case 0x07:
                          key=10;
                          break;
                      }
                    temp=P3;
                    P1_0=~P1_0;
                    P0=table[key];
                    temp=temp & 0x0f;             
                    while(temp!=0x0f)
                      {
                        temp=P3;
                        temp=temp & 0x0f;             
                      }
                  }
              }
            P3=0xff;
            P3_5=0;
            temp=P3;
            temp=temp & 0x0f;
            if (temp!=0x0f)
              {
                for(i=50;i>0;i--)
                for(j=200;j>0;j--);
                temp=P3;
                temp=temp & 0x0f;
                if (temp!=0x0f)
                  {
                    temp=P3;
                    temp=temp & 0x0f;             
                    switch(temp)
                      {
                        case 0x0e:
                          key=4;
                          break;
                        case 0x0d:
                          key=5;
                          break;
                        case 0x0b:
                          key=6;
                          break;
                        case 0x07:
                          key=11;
                          break;
                      }
                    temp=P3;
                    P1_0=~P1_0;
                    P0=table[key];
                    temp=temp & 0x0f;             
                    while(temp!=0x0f)
                      {
                        temp=P3;
                        temp=temp & 0x0f;             
                      }
                  }
              }
            P3=0xff;
            P3_6=0;
            temp=P3;
            temp=temp & 0x0f;
            if (temp!=0x0f)
              {
                for(i=50;i>0;i--)
                for(j=200;j>0;j--);
                temp=P3;
                temp=temp & 0x0f;
                if (temp!=0x0f)
                  {
                    temp=P3;
                    temp=temp & 0x0f;             
                    switch(temp)
                      {
                        case 0x0e:
                          key=1;
                          break;
                        case 0x0d:
                          key=2;
                          break;
                        case 0x0b:
                          key=3;
                          break;
                        case 0x07:
                          key=12;
                          break;
                      }
                    temp=P3;
                    P1_0=~P1_0;
                    P0=table[key];
                    temp=temp & 0x0f;             
                    while(temp!=0x0f)
                      {
                        temp=P3;
                        temp=temp & 0x0f;             
                      }
                  }
              }
            P3=0xff;
            P3_7=0;
            temp=P3;
            temp=temp & 0x0f;
            if (temp!=0x0f)
              {
                for(i=50;i>0;i--)
                for(j=200;j>0;j--);
                temp=P3;
                temp=temp & 0x0f;
                if (temp!=0x0f)
                  {
                    temp=P3;
                    temp=temp & 0x0f;             
                    switch(temp)
                      {
                        case 0x0e:
                          key=0;
                          break;
                        case 0x0d:
                          key=13;
                          break;
                        case 0x0b:
                          key=14;
                          break;
                        case 0x07:
                          key=15;
                          break;
                      }
                    temp=P3;
                    P1_0=~P1_0;
                    P0=table[key];
                    temp=temp & 0x0f;             
                    while(temp!=0x0f)
                      {
                        temp=P3;
                        temp=temp & 0x0f;             
                      }
                  }
              }
          }
      }
      1、 本站不保證以上觀點正確,就算是本站原創作品,本站也不保證內容正確。
      2、如果您擁有本文版權,并且不想在本站轉載,請書面通知本站立即刪除并且向您公開道歉! 以上可能是本站收集或者轉載的文章,本站可能沒有文章中的元件或產品,如果您需要類似的商品請 點這里查看商品列表!
      本站協議。 版權信息。 關于我們。 本站地圖。 營業執照。 發票說明。 付款方式。 聯系方式
      深圳市寶安區西鄉五壹電子商行——粵ICP備16073394號-1;地址:深圳西鄉河西四坊183號;郵編:518102
      E-mail:51dz$163.com($改為@);Tel:(0755)27947428
      工作時間:9:30-12:00和13:30-17:30和18:30-20:30,無人接聽時可以再打手機13537585389
      91嫩草黄片动漫版