蓝桥杯—矩阵按键

1、原理图

        矩阵按键位置需要死记,首先这是4x4的矩阵按键,共16个按键,对于跳线帽J5要连接1和2。第一行为P30、第二行尾P31、第三行为P32、第四行为P33,第一列为P44(P37)、第二列为P42(P36)、第三列为P35、第四列为P34;

2、矩阵按键部分代码说明

//定义r为行,c为列,如果r1=0,c1=0,按键则为第一行第一列,其余同理;
sbit r1=P3^0;
sbit r2=P3^1;
sbit r3=P3^2;
sbit r4=P3^3;
sbit c1=P4^4;
sbit c2=P4^2;
sbit c3=P3^5;
sbit c4=P3^4;
//矩阵按键返回函数
unsigned char key_scan(){
unsigned char key_value;

r1=0;r2=r3=r4=1;
c1=c2=c3=c4=1;
if(!c1) key_value=0;
else if(!c2) key_value=1;
else if(!c3) key_value=2;
else if(!c4) key_value=3;

r2=0;r1=r3=r4=1;
c1=c2=c3=c4=1;
if(!c1) key_value=4;
else if(!c2) key_value=5;
else if(!c3) key_value=6;
else if(!c4) key_value=7;

r3=0;r1=r2=r4=1;
c1=c2=c3=c4=1;
if(!c1) key_value=8;
else if(!c2) key_value=9;
else if(!c3) key_value=10;
else if(!c4) key_value=11;

r4=0;r2=r3=r1=1;
c1=c2=c3=c4=1;
if(!c1) key_value=12;
else if(!c2) key_value=13;
else if(!c3) key_value=14;
else if(!c4) key_value=15;

return key_value;
}

3、相关例子

例1:

#include<stc15f2k60s2.h>
sbit r1=P3^0;
sbit r2=P3^1;
sbit r3=P3^2;
sbit r4=P3^3;
sbit c1=P4^4;
sbit c2=P4^2;
sbit c3=P3^5;
sbit c4=P3^4;
unsigned char key_value,value;
unsigned char key_scan();

void main(){
P2=0XC0;P0=0X01;P2=0XFF;P0=0XFF;
value=key_scan();
//控制数码管显示数字
if(value==13){
P0=0X80;//8
}
else if(value==12){
P0=0X90;//9
}
}

unsigned char key_scan(){
r1=0;r2=r3=r4=1;
c1=c2=c3=c4=1;
if(!c1) key_value=0;
else if(!c2) key_value=1;
else if(!c3) key_value=2;
else if(!c4) key_value=3;

r2=0;r1=r3=r4=1;
c1=c2=c3=c4=1;
if(!c1) key_value=4;
else if(!c2) key_value=5;
else if(!c3) key_value=6;
else if(!c4) key_value=7;

r3=0;r1=r2=r4=1;
c1=c2=c3=c4=1;
if(!c1) key_value=8;
else if(!c2) key_value=9;
else if(!c3) key_value=10;
else if(!c4) key_value=11;

r4=0;r2=r3=r1=1;
c1=c2=c3=c4=1;
if(!c1) key_value=12;
else if(!c2) key_value=13;
else if(!c3) key_value=14;
else if(!c4) key_value=15;

return key_value;
}

例2:

#include<stc15f2k60s2.h>
sbit r1=P3^0;
sbit r2=P3^1;
sbit r3=P3^2;
sbit r4=P3^3;
sbit c1=P4^4;
sbit c2=P4^2;
sbit c3=P3^5;
sbit c4=P3^4;

void main(){
P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;
r1=0;
if(c1==0){
P00=0;
}
else if(c2==0){
P01=0;
}
}
发布了23 篇原创文章 · 获赞 14 · 访问量 4203

猜你喜欢

转载自blog.csdn.net/fanjufei123456/article/details/104263738