<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 4×4矩陣式鍵盤識(shí)別技術(shù)

          4×4矩陣式鍵盤識(shí)別技術(shù)

          作者: 時(shí)間:2011-02-27 來源:網(wǎng)絡(luò) 收藏

          (1. 把“系統(tǒng)“區(qū)域中的P3.0P3.7端口用8芯排線連接到“4X4行列式鍵盤”區(qū)域中的C1C4 R1R4端口上;

          (2. 把“系統(tǒng)”區(qū)域中的P0.0/AD0P0.7/AD7端口用8芯排線連接到“四路靜態(tài)數(shù)碼顯示模塊”區(qū)域中的任一個(gè)ah端口上;要求:P0.0/AD0對(duì)應(yīng)著aP0.1/AD1對(duì)應(yīng)著b,……,P0.7/AD7對(duì)應(yīng)著h。

          4. 程序設(shè)計(jì)內(nèi)容

          (1. 4×4矩陣鍵盤識(shí)別處理

          (2. 每個(gè)按鍵有它的行值和列值 ,行值和列值的組合就是識(shí)別這個(gè)按鍵的編碼。矩陣的行線和列線分別通過兩并行接口和CPU通信。每個(gè)按鍵的狀態(tài)同樣需變成數(shù)字量“0”和“1”,開關(guān)的一端(列線)通過電阻接VCC,而接地是通過程序輸出數(shù)字“0”實(shí)現(xiàn)的。鍵盤處理程序的任務(wù)是:確定有無鍵按下,判斷哪一個(gè)鍵按下,鍵的功能是什么;還要消除按鍵在閉合或斷開時(shí)的抖動(dòng)。兩個(gè)并行口中,一個(gè)輸出掃描碼,使按鍵逐行動(dòng)態(tài)接地,另一個(gè)并行口輸入按鍵狀態(tài),由行掃描值和回饋信號(hào)共同形成鍵編碼而識(shí)別按鍵,通過軟件查表,查出該鍵的功能。

          5.程序框圖

          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;

          }

          }

          }

          }

          }



          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();