不知你的要求如何,我设计了一个利用4X4键盘矩阵产生2位数的方案,不知对你有用吗,供参考。以下是原理图:
以下是配套程序:
#include<reg51.h>
sbit kx0=P2^0;
sbit kx1=P2^1;
sbit kx2=P2^2;
sbit kx3=P2^3;
sbit ky0=P2^4;
sbit ky1=P2^5;
sbit ky2=P2^6;
sbit ky3=P2^7;
//====================================================
int KeyDown()
{char v,x,y;
x=4;y=4;
P2=0x0f;v=P2;
if(v!=0x0f){if(kx0==0)x=0;if(kx1==0)x=1;if(kx2==0)x=2;if(kx3==0)x=3;
P2=0xf0;if(ky0==0)y=0;if(ky1==0)y=1;if(ky2==0)y=2;if(ky3==0)y=3;
}
return x*4+y;
}
//###################################################
void main()
{char w,num,key;
w=0;P0=0;
while(1)
{key=KeyDown();
if(key<10)
{key=KeyDown();while(key==KeyDown());
if(w==0){num=key;w=1;}
else {num=num*10+key;w=0;}
P0=(num/10)*16+num%10;
}
};
}
|