1、矩阵式键盘识别技术14 44矩阵式键盘识别技术 1 实验任务 如图4.14.2所示,用AT89S51的并行口P1接44矩阵键盘,以P1.0P1.3作输入线,以P1.4P1.7作输出线;在数码管上显示每个按键的“0F”序号。对应的按键的序号排列如图4.14.1所示 图4.14.1 2 硬件电路原理图 图4.14.2 3 系统板上硬件连线 1 把“单片机系统“区域中的P3.0P3.7端口用8芯排线连接到“4X4行列式键盘”区域中的C1C4R1R4端口上; 2 把“单片机系统”区域中的P0.0/AD0P0.7/AD7端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个ah端口上;要求:P0.0
2、/AD0对应着a,P0.1/AD1对应着b,P0.7/AD7对应着h。 4 程序设计内容 1 44矩阵键盘识别处理 2 每个按键有它的行值和列值,行值和列值的组合就是识别这个按键的编码。矩阵的行线和列线分别通过两并行接口和CPU通信。每个按键的状态同样需变成数字量“0”和“1”,开关的一端列线)通过电阻接VCC,而接地是通过程序输出数字“0”实现的。键盘处理程序的任务是:确定有无键按下,判断哪一个键按下,键的功能是什么;还要消除按键在闭合或断开时的抖动。两个并行口中,一个输出扫描码,使按键逐行动态接地,另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,通过软件查表,查出该
3、键的功能。 5 程序框图 图4.14.3 6 汇编源程序KEYBUF EQU 30HORG 00HSTART: MOV KEYBUF,#2WAIT:MOV P3,#0FFHCLR P3.4MOV A,P3ANL A,#0FHXRL A,#0FHJZ NOKEY1LCALL DELY10MSMOV A,P3ANL A,#0FHXRL A,#0FHJZ NOKEY1MOV A,P3ANL A,#0FHCJNE A,#0EH,NK1MOV KEYBUF,#0LJMP DK1NK1: CJNE A,#0DH,NK2MOV KEYBUF,#1LJMP DK1NK2: CJNE A,#0BH,NK3MOV
4、 KEYBUF,#2LJMP DK1NK3: CJNE A,#07H,NK4MOV KEYBUF,#3LJMP DK1NK4: NOPDK1:MOV A,KEYBUFMOV DPTR,#TABLEMOVC A,A+DPTRMOV P0,ADK1A: MOV A,P3ANL A,#0FHXRL A,#0FHJNZ DK1ANOKEY1:MOV P3,#0FFHCLR P3.5MOV A,P3ANL A,#0FHXRL A,#0FHJZ NOKEY2LCALL DELY10MSMOV A,P3ANL A,#0FHXRL A,#0FHJZ NOKEY2MOV A,P3ANL A,#0FHCJNE A
5、,#0EH,NK5MOV KEYBUF,#4LJMP DK2NK5: CJNE A,#0DH,NK6MOV KEYBUF,#5LJMP DK2NK6: CJNE A,#0BH,NK7MOV KEYBUF,#6LJMP DK2NK7: CJNE A,#07H,NK8MOV KEYBUF,#7LJMP DK2NK8: NOPDK2:MOV A,KEYBUFMOV DPTR,#TABLEMOVC A,A+DPTRMOV P0,ADK2A: MOV A,P3ANL A,#0FHXRL A,#0FHJNZ DK2ANOKEY2:MOV P3,#0FFHCLR P3.6MOV A,P3ANL A,#0FH
6、XRL A,#0FHJZ NOKEY3LCALL DELY10MSMOV A,P3ANL A,#0FHXRL A,#0FHJZ NOKEY3MOV A,P3ANL A,#0FHCJNE A,#0EH,NK9MOV KEYBUF,#8LJMP DK3NK9: CJNE A,#0DH,NK10MOV KEYBUF,#9LJMP DK3NK10: CJNE A,#0BH,NK11MOV KEYBUF,#10LJMP DK3NK11: CJNE A,#07H,NK12MOV KEYBUF,#11LJMP DK3NK12: NOPDK3:MOV A,KEYBUFMOV DPTR,#TABLEMOVC A
7、,A+DPTRMOV P0,ADK3A: MOV A,P3ANL A,#0FHXRL A,#0FHJNZ DK3ANOKEY3:MOV P3,#0FFHCLR P3.7MOV A,P3ANL A,#0FHXRL A,#0FHJZ NOKEY4LCALL DELY10MSMOV A,P3ANL A,#0FHXRL A,#0FHJZ NOKEY4MOV A,P3ANL A,#0FHCJNE A,#0EH,NK13MOV KEYBUF,#12LJMP DK4NK13: CJNE A,#0DH,NK14MOV KEYBUF,#13LJMP DK4NK14: CJNE A,#0BH,NK15MOV KE
8、YBUF,#14LJMP DK4NK15: CJNE A,#07H,NK16MOV KEYBUF,#15LJMP DK4NK16: NOPDK4:MOV A,KEYBUFMOV DPTR,#TABLEMOVC A,A+DPTRMOV P0,ADK4A: MOV A,P3ANL A,#0FHXRL A,#0FHJNZ DK4ANOKEY4:LJMP WAITDELY10MS:MOV R6,#10D1: MOV R7,#248DJNZ R7,$DJNZ R6,D1RETTABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07HDB 7FH,6FH,77H,7CH,39H,5
9、EH,79H,71HEND7 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(voidwhile(1P3=0xff。P3_4=0。temp=P3。temp=temp & 0x0f。if (temp!=0x0ffor(i=50。i0。i-for(j=200。j0。j-。temp=
10、P3。temp=temp & 0x0f。if (temp!=0x0ftemp=P3。temp=temp & 0x0f。switch(tempcase 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=tablekey。temp=temp & 0x0f。while(temp!=0x0ftemp=P3。temp=temp & 0x0f。P3=0xff。P3_5=0。temp=P3。temp=temp & 0x0f。if (temp!=0x0
11、ffor(i=50。i0。i-for(j=200。j0。j-。temp=P3。temp=temp & 0x0f。if (temp!=0x0ftemp=P3。temp=temp & 0x0f。switch(tempcase 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=tablekey。temp=temp & 0x0f。while(temp!=0x0ftemp=P3。temp=temp & 0x0f。P3=0xff。P3_6=0。te
12、mp=P3。temp=temp & 0x0f。if (temp!=0x0ffor(i=50。i0。i-for(j=200。j0。j-。temp=P3。temp=temp & 0x0f。if (temp!=0x0ftemp=P3。temp=temp & 0x0f。switch(tempcase 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=tablekey。temp=temp & 0x0f。while(temp!=0x0ftemp=P
13、3。temp=temp & 0x0f。P3=0xff。P3_7=0。temp=P3。temp=temp & 0x0f。if (temp!=0x0ffor(i=50。i0。i-for(j=200。j0。j-。temp=P3。temp=temp & 0x0f。if (temp!=0x0ftemp=P3。temp=temp & 0x0f。switch(tempcase 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=tablekey。temp=temp & 0x0f。while(temp!=0x0ftemp=P3。temp=temp & 0x0f。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1