MCS-51单片机与矩阵键盘接口设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
lval=val; } else if(lval)//两次键值相当且非零 {
LED=1;P0=val;LED=0; } }
break;
} delay();//延时10ms } }
for(i=0,k=0x10;i<4;i++)//行扫描 {
XBYTE[0x8800]=k; k<<=1; m=XBYTE[0x9000]; m&=0xf0; if(m)//读出列值非0 {
for(j=0,n=0x10;j<4;j++,n<<=1)//列扫描 {
temp=m; temp&=n; if(temp) break; } val=i*4+j+1; //键值计算 if(lval!=val) //消抖 {
MCS-51单片机与矩阵键盘接口设计
线性(独立)键盘:采用多个IO口,每个IO口接一个按 键。优点是编程简单、可靠,缺点是IO口占用过多。
D N G SW-PBSW-PBSW-PBSW-PB VCC VCCVCC 19876543212345678900 33333333322222222234 VCC PSEN P2.0/A8P2.1/A9 EA/VPP P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15 P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7 ALE/PROG D 12N P3.0/RXDXXRESETP3.7/RDP3.6/WRP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P1.0/T2P1.1/T2EXP1.2P1.3P1.4P1.5/MOSIP1.6/MISOP1.7/SCKP3.1/TXDG 2 U(AT/STC/SST)89(S/C)5X 09876234510 912345678 11111111112 K 21 0 p R1C0.1uFREST 9 2 C2 D N VCC G D 1 N X G 12-40M p 8 52 SC2 RESET
;无键按下
keydown:mov a,#00010000b;有键按下,进行列查找
next2:
mov 34h,31h
anl 34h,a
rl a
mov r3,34h
cjne r3,#0,find
djnz r1,next2
find:
mov a,#4
;找到后处理键值
subb a,r0
mov 32h,a
;暂存行号
loop1: mov dptr,#8800h ;行选线锁存器地址
mov a,30h
movx @dptr,a ;输出行选线数据
mov r1,#4
;四列
mov dptr,#9000h ;列选线锁存器地址
movx a,@dptr
mov 31h,a
;保存读入的数据
cjne a,#0,keydown
jmp next
例子:4×4矩阵键盘从右下角开始编码为1,从右至左、 从下到上的顺序递增,有按键按下后获得相应的键码。
org 0000h
ljmp start
org 0030h
start:mov sp,#6fh
loop2: mov r0,#4
;四行
mov 30h,#00010000b;行选线初始值,只选中一行
mov 31h,#00h ;保存读入的列选数据
mov a,#4
subb a,r1
mov 33h,a
;暂存列号
mov b,#4
mov a,32h
mul ab
add a,33h
inc a
;计算结果a(行号)*4+列号+1
setb p1.6 ;输出至发光二极管流水灯显示
mov p0,a
clr p1.6
jmp start
next: mov a,30h
;下一行
rl a
mov 30h,a
djnz r0,loop1
jmp loop2
end
#include <reg52.h> #inBaidu Nhomakorabealude <absacc.h> sbit LED=P1^6; void delay(void) //延时10ms { unsigned int i,j;
for(i=128;i>0;i--) for(j=10;j>0;j--); } void main(void) { unsigned char lval,val,temp,i,j,k,m,n; while(1) {
K 0 R501 4444 1234 SSW-14SSW-24SSW-34SSW-44 K 0 R491 D 3333 N 1234 G SSW-13SSW-23SSW-33SSW-43 K 0 R481 /ACS2 4 2222 1234 SSW-12SSW-22SSW-32SSW-42 K U39B74AHC02D 0 56 R471 ACS1ACS2 1111 1234 0 SSW-11SSW-21SSW-31SSW-41 41 盘 键 阵 U24B74AHC02DU24C74AHC02D 矩 5689 R D OUT4OUT5OUT6OUT7WCS1CS2R 4X4 IN4IN5IN6IN7 D N C G C V C IN4IN5IN6IN7/ACS2OUT4OUT5OUT6OUT7 C 12345678900 V 11234567891111111121 C C V EL0123456776543210 CD DDDDDDDDQQQQQQQQ CN CS1CS2 VG 0123456 791111111 CD 76543210CN01234567 76543210 C QQQQQQQQVGELDDDDDDDD YYYYYYYY C U2674HC573U2274HC573 V 123456789 23456789001 C 11111111211 D C N 0123456701234567 V ABCOE2AOE2BOE1G DDDDDDDDDDDDDDDD9 D AAAAAAAAAAAAAAAAU74HC138D N G 1234568 ACS1CR.OUT D N G A13A15A12A14A11 AD[0..7] 2 5 1 SOUTPUT 13 CC CC VV 01234567 DDDDDDDD C AAAAAAAAA11A12A13A14A15 C D V N 19876543212345678900 G 33333333322222222234 NC E C S V P EA/VPP P2.0/A8P2.1/A9 P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15 P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7 ALE/PROG D 12N P3.0/RXDXXRESETP3.7/RDP3.6/WRP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P1.0/T2P1.1/T2EXP1.2P1.3P1.4P1.5/MOSIP1.6/MISOP1.7/SCKP3.1/TXDG 2 D 图 U(AT/STC/SST)89(S/C)5X N G 路 09897623451234567810 11111111112 电 盘 R www.LT430.com D RESTW p 键 N 9 2 G C2 子 阵 K 2 0 矩 R1 电 12-40M 8 1 板 天 C p X 2 2 4 习 RESET 0 力 1 学 1 5 CS C C V LT-Super51 CpoyRight@
矩阵键盘:将多个键盘接成行列交叉的形式,采用两 组IO口分别控制行和列,通过循环扫描查询的方式判 断是否有按键按下。
本图列选线为下拉电阻,当无按键按下时,列选线为低电平; 同样,列选线也可以接上拉电阻,当无按键按下时,列选线为 高电平。
K 0 R501 4444 1234 SSW-14SSW-24SSW-34SSW-44 K 0 R491 D N 3333 1234 G SSW-13SSW-23SSW-33SSW-43 K 0 R481 2222 1234 SSW-12SSW-22SSW-32SSW-42 K 0 R471 1111 1234 SSW-11SSW-21SSW-31SSW-41 OUT4OUT5OUT6OUT7 IN4IN5IN6IN7
LED=1;P0=val;LED=0; } }
break;
} delay();//延时10ms } }
for(i=0,k=0x10;i<4;i++)//行扫描 {
XBYTE[0x8800]=k; k<<=1; m=XBYTE[0x9000]; m&=0xf0; if(m)//读出列值非0 {
for(j=0,n=0x10;j<4;j++,n<<=1)//列扫描 {
temp=m; temp&=n; if(temp) break; } val=i*4+j+1; //键值计算 if(lval!=val) //消抖 {
MCS-51单片机与矩阵键盘接口设计
线性(独立)键盘:采用多个IO口,每个IO口接一个按 键。优点是编程简单、可靠,缺点是IO口占用过多。
D N G SW-PBSW-PBSW-PBSW-PB VCC VCCVCC 19876543212345678900 33333333322222222234 VCC PSEN P2.0/A8P2.1/A9 EA/VPP P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15 P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7 ALE/PROG D 12N P3.0/RXDXXRESETP3.7/RDP3.6/WRP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P1.0/T2P1.1/T2EXP1.2P1.3P1.4P1.5/MOSIP1.6/MISOP1.7/SCKP3.1/TXDG 2 U(AT/STC/SST)89(S/C)5X 09876234510 912345678 11111111112 K 21 0 p R1C0.1uFREST 9 2 C2 D N VCC G D 1 N X G 12-40M p 8 52 SC2 RESET
;无键按下
keydown:mov a,#00010000b;有键按下,进行列查找
next2:
mov 34h,31h
anl 34h,a
rl a
mov r3,34h
cjne r3,#0,find
djnz r1,next2
find:
mov a,#4
;找到后处理键值
subb a,r0
mov 32h,a
;暂存行号
loop1: mov dptr,#8800h ;行选线锁存器地址
mov a,30h
movx @dptr,a ;输出行选线数据
mov r1,#4
;四列
mov dptr,#9000h ;列选线锁存器地址
movx a,@dptr
mov 31h,a
;保存读入的数据
cjne a,#0,keydown
jmp next
例子:4×4矩阵键盘从右下角开始编码为1,从右至左、 从下到上的顺序递增,有按键按下后获得相应的键码。
org 0000h
ljmp start
org 0030h
start:mov sp,#6fh
loop2: mov r0,#4
;四行
mov 30h,#00010000b;行选线初始值,只选中一行
mov 31h,#00h ;保存读入的列选数据
mov a,#4
subb a,r1
mov 33h,a
;暂存列号
mov b,#4
mov a,32h
mul ab
add a,33h
inc a
;计算结果a(行号)*4+列号+1
setb p1.6 ;输出至发光二极管流水灯显示
mov p0,a
clr p1.6
jmp start
next: mov a,30h
;下一行
rl a
mov 30h,a
djnz r0,loop1
jmp loop2
end
#include <reg52.h> #inBaidu Nhomakorabealude <absacc.h> sbit LED=P1^6; void delay(void) //延时10ms { unsigned int i,j;
for(i=128;i>0;i--) for(j=10;j>0;j--); } void main(void) { unsigned char lval,val,temp,i,j,k,m,n; while(1) {
K 0 R501 4444 1234 SSW-14SSW-24SSW-34SSW-44 K 0 R491 D 3333 N 1234 G SSW-13SSW-23SSW-33SSW-43 K 0 R481 /ACS2 4 2222 1234 SSW-12SSW-22SSW-32SSW-42 K U39B74AHC02D 0 56 R471 ACS1ACS2 1111 1234 0 SSW-11SSW-21SSW-31SSW-41 41 盘 键 阵 U24B74AHC02DU24C74AHC02D 矩 5689 R D OUT4OUT5OUT6OUT7WCS1CS2R 4X4 IN4IN5IN6IN7 D N C G C V C IN4IN5IN6IN7/ACS2OUT4OUT5OUT6OUT7 C 12345678900 V 11234567891111111121 C C V EL0123456776543210 CD DDDDDDDDQQQQQQQQ CN CS1CS2 VG 0123456 791111111 CD 76543210CN01234567 76543210 C QQQQQQQQVGELDDDDDDDD YYYYYYYY C U2674HC573U2274HC573 V 123456789 23456789001 C 11111111211 D C N 0123456701234567 V ABCOE2AOE2BOE1G DDDDDDDDDDDDDDDD9 D AAAAAAAAAAAAAAAAU74HC138D N G 1234568 ACS1CR.OUT D N G A13A15A12A14A11 AD[0..7] 2 5 1 SOUTPUT 13 CC CC VV 01234567 DDDDDDDD C AAAAAAAAA11A12A13A14A15 C D V N 19876543212345678900 G 33333333322222222234 NC E C S V P EA/VPP P2.0/A8P2.1/A9 P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15 P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7 ALE/PROG D 12N P3.0/RXDXXRESETP3.7/RDP3.6/WRP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P1.0/T2P1.1/T2EXP1.2P1.3P1.4P1.5/MOSIP1.6/MISOP1.7/SCKP3.1/TXDG 2 D 图 U(AT/STC/SST)89(S/C)5X N G 路 09897623451234567810 11111111112 电 盘 R www.LT430.com D RESTW p 键 N 9 2 G C2 子 阵 K 2 0 矩 R1 电 12-40M 8 1 板 天 C p X 2 2 4 习 RESET 0 力 1 学 1 5 CS C C V LT-Super51 CpoyRight@
矩阵键盘:将多个键盘接成行列交叉的形式,采用两 组IO口分别控制行和列,通过循环扫描查询的方式判 断是否有按键按下。
本图列选线为下拉电阻,当无按键按下时,列选线为低电平; 同样,列选线也可以接上拉电阻,当无按键按下时,列选线为 高电平。
K 0 R501 4444 1234 SSW-14SSW-24SSW-34SSW-44 K 0 R491 D N 3333 1234 G SSW-13SSW-23SSW-33SSW-43 K 0 R481 2222 1234 SSW-12SSW-22SSW-32SSW-42 K 0 R471 1111 1234 SSW-11SSW-21SSW-31SSW-41 OUT4OUT5OUT6OUT7 IN4IN5IN6IN7