《2022年单片机×矩阵式键盘识别技术实验.docx》由会员分享,可在线阅读,更多相关《2022年单片机×矩阵式键盘识别技术实验.docx(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精品学习资源1444矩阵式键盘识别技术1 试验任务 如图 4.14.2所示,用 AT89S51的并行口 P1 接 44矩阵键盘,以P1.0 P1.3 作输入线,以 P1.4 P1.7 作输出线;在数码管上显示每个按键的“0F”序号;对 应的按键的序号排列如图4.14.1所示 3 系统板上硬件连线1把“单片机系统 “区域中的 P3.0 P3.7 端口用 8芯排线连接到“4X4行列式键盘 ”区域中的 C1 C4R1 R4端口上;2把“单片机系统 ”区域中的 P0.0/AD0 P0.7/AD7端口用 8芯排线连接到 “四路静态数码显示模块 ”区域中的任一个 a h端口上; 要求: P0.0/AD0对
2、应着a,P0.1/AD1对应着b, P0.7/AD7对应着h;4. 程序设计内容144矩阵键盘识别处理2每个按键有它的行值和列值,行值和列值的组合就是识别这个按键的编码;矩阵的行线和列线分别通过两并行接 口和 CPU通信;每个按键的状态同样需变成数字量“0”和“1”,开关的一端 列线)通过电阻接 VCC,而接地是通过程序输出数字“ 0”实现的;键盘处理程序的任务是:确定有无键按下,判定哪一个键按下,键的功能是什么;仍要排除按欢迎下载精品学习资源键在闭合或断开时的抖动;两个并行口中,一个输出扫描 码,使按键逐行动态接地,另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,通过
3、软件查表,查出该键的功能;5. 程序框图图 4.14.36. 汇编源程序KEYBUFEQU 30HORG 00HSTART:MOV KEYBUF,#2欢迎下载精品学习资源WAIT:MOV P3,#0FFH CLR P3.4MOV A,P3 ANL A,#0FH XRL A,#0FH JZ NOKEY1LCALL DELY10MSMOV A,P3 ANL A,#0FH XRL A,#0FH JZ NOKEY1 MOV A,P3 ANL A,#0FHCJNE A,#0EH,NK1 MOV KEYBUF,#0 LJMP DK1欢迎下载精品学习资源NK1:CJNE A,#0DH,NK2 MOV KEY
4、BUF,#1 LJMP DK1NK2:CJNE A,#0BH,NK3 MOV KEYBUF,#2 LJMP DK1NK3:CJNE A,#07H,NK4MOV KEYBUF,#3 LJMP DK1NK4:NOPDK1:MOV A,KEYBUF欢迎下载精品学习资源MOV DPTR,#TABLE MOVC A,A+DPTR MOV P0,ADK1A:MOV A,P3 ANL A,#0FH XRL A,#0FH JNZ DK1ANOKEY1:MOV P3,#0FFH CLR P3.5MOV A,P3 ANL A,#0FH XRL A,#0FH JZ NOKEY2LCALL DELY10MSMOV A
5、,P3 ANL A,#0FH XRL A,#0FH JZ NOKEY2 MOV A,P3 ANL A,#0FHCJNE A,#0EH,NK5 MOV KEYBUF,#4 LJMP DK2NK5:CJNE A,#0DH,NK6 MOV KEYBUF,#5 LJMP DK2NK6:CJNE A,#0BH,NK7欢迎下载精品学习资源MOV KEYBUF,#6 LJMP DK2NK7:CJNE A,#07H,NK8MOV KEYBUF,#7 LJMP DK2NK8:NOPDK2:MOV A,KEYBUF MOV DPTR,#TABLE MOVC A,A+DPTR MOV P0,ADK2A:MOV A,
6、P3 ANL A,#0FH XRL A,#0FH JNZ DK2ANOKEY2:MOV P3,#0FFH CLR P3.6MOV A,P3 ANL A,#0FH XRL A,#0FH JZ NOKEY3LCALL DELY10MSMOV A,P3 ANL A,#0FH XRL A,#0FH JZ NOKEY3 MOV A,P3欢迎下载精品学习资源ANL A,#0FHCJNE A,#0EH,NK9 MOV KEYBUF,#8 LJMP DK3NK9:CJNE A,#0DH,NK10 MOV KEYBUF,#9 LJMP DK3NK10:CJNE A,#0BH,NK11 MOV KEYBUF,#1
7、0 LJMP DK3NK11:CJNE A,#07H,NK12MOV KEYBUF,#11 LJMP DK3NK12:NOPDK3:MOV A,KEYBUF MOV DPTR,#TABLE MOVC A,A+DPTR MOV P0,ADK3A:MOV A,P3 ANL A,#0FH XRL A,#0FH JNZ DK3ANOKEY3:MOV P3,#0FFH CLR P3.7MOV A,P3 ANL A,#0FH欢迎下载精品学习资源XRL A,#0FH JZ NOKEY4LCALL DELY10MSMOV A,P3 ANL A,#0FH XRL A,#0FH JZ NOKEY4 MOV A,P
8、3 ANL A,#0FHCJNE A,#0EH,NK13 MOV KEYBUF,#12 LJMP DK4NK13:CJNE A,#0DH,NK14 MOV KEYBUF,#13 LJMP DK4NK14:CJNE A,#0BH,NK15 MOV KEYBUF,#14 LJMP DK4NK15:CJNE A,#07H,NK16MOV KEYBUF,#15 LJMP DK4NK16:NOP DK4:MOV A,KEYBUFMOV DPTR,#TABLE MOVC A,A+DPTR MOV P0,ADK4A:MOV A,P3欢迎下载精品学习资源ANL A,#0FH XRL A,#0FH JNZ DK
9、4ANOKEY4:LJMP WAIT DELY10MS:MOV R6,#10D1:MOV R7,#248 DJNZ R7,$ DJNZ R6,D1 RETTABLE:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H END7. 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;
10、unsigned char key;unsigned char i,j;void mainvoidwhile1欢迎下载精品学习资源P3=0xff;P3_4=0;temp=P3;temp=temp & 0x0f;if temp.=0x0ffori=50;i0 ;i-forj=200;j0 ;j-;temp=P3;temp=temp & 0x0f;if temp.=0x0ftemp=P3;temp=temp & 0x0f;switchtempcase 0x0e:key=7;break;case 0x0d:key=8;break;case 0x0b:key=9;break;case 0x07:key
11、=10;欢迎下载精品学习资源break;temp=P3;P1_0=P1_0;P0=tablekey;temp=temp & 0x0f;whiletemp.=0x0ftemp=P3;temp=temp & 0x0f;P3=0xff;P3_5=0;temp=P3;temp=temp & 0x0f;if temp.=0x0ffori=50;i0 ;i-forj=200;j0 ;j-;temp=P3;temp=temp & 0x0f;if temp.=0x0ftemp=P3;temp=temp & 0x0f;欢迎下载精品学习资源switchtempcase 0x0e:key=4;break;case
12、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;whiletemp.=0x0ftemp=P3;temp=temp & 0x0f;P3=0xff;欢迎下载精品学习资源P3_6=0;temp=P3;temp=temp & 0x0f;if temp.=0x0ffori=50;i0 ;i-forj=200;j0 ;j-;temp=P3;temp=temp & 0x0f;if temp.=0x0ftemp=P3;temp=temp &
13、0x0f;switchtempcase 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;whiletemp.=0x0ftemp=P3;temp=temp & 0x0f;P3=0xff;P3_7=0;temp=P3;temp=temp & 0x0f;if temp.=0x0ffori=50;i0 ;i-forj=200;j0 ;j-;temp=P3;temp=temp & 0x0f;if temp.=0x0ftemp=P3;temp=temp & 0x0f;switchtemp欢迎下载精品学习资源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=tablekey;temp=temp & 0x0f;whiletemp.=0x0ftemp=P3;temp=temp & 0x0f;欢迎下载