<strong id="vcd2t"></strong>

  1. <tt id="vcd2t"><noscript id="vcd2t"></noscript></tt>
      <rt id="vcd2t"></rt>
        <rt id="vcd2t"></rt>
          <ruby id="vcd2t"><table id="vcd2t"></table></ruby>
        1. <cite id="vcd2t"><tbody id="vcd2t"><samp id="vcd2t"></samp></tbody></cite>
          <strong id="vcd2t"></strong>

          您的位置:設計參考

          設計參考

          設計參考/Design Reference

          AT89S51單片機對4×4矩陣鍵盤的控制設計

          -----2019-05-06

           1.實驗任務

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

          4.14.1

          2.硬件電路原理圖

          AT89S51單片機對4×4矩陣鍵盤的控制設計

          圖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.程序框圖

          AT89S51單片機對4×4矩陣鍵盤的控制設計

          圖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

          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];

          [返回]

          亚洲 欧洲 日产国码一本大道,日本道二区高清视频,国产男人的天堂在线视频,青青在线精品2019国产,日本高清成本人视频一区|狠狠狠的在啪线香蕉好男人|韩国欧美日本亚洲一区二区