色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

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

          4×4矩陣式鍵盤識別技術(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ū)域中的任一個ah端口上;要求:P0.0/AD0對應(yīng)著a,P0.1/AD1對應(yīng)著b……,P0.7/AD7對應(yīng)著h。

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

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

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

          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;

          }

          }

          }

          }

          }



          評論


          相關(guān)推薦

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

          關(guān)閉