4x4矩阵键盘电路连接图和快速扫描完整程序
4*4矩阵键盘电路连接图和快速扫描完整程序
RP1RESPACK-8非编码键盘扫描12C134U1D0530pF1939D1XTAL1P0.0/AD0638D2X17P0.1/AD137D3CRYSTALP0.2/AD281836D49XTAL2P0.3/AD3C235D5P0.4/AD434D6P0.5/AD533D7P0.6/AD630pF932RSTP0.7/AD7LE121P2.0/A8LE222P2.1/A923P2.2/A102924PSENP2.3/A113025ALEP2.4/A123126EAP2.5/A1327P2.6/A1428P2.7/A15110P1.0P3.0/RXDP1.7P1.6P1.5P1.4211P1.1P3.1/TXD312P1.2P3.2/INT0413P1.3P3.3/INT1514P1.4P3.4/T0615P1.5P3.5/T1P1.0716P1.6P3.6/WR817P1.7P3.7/RDAT89C51P1.1U2219D0D0Q0318D1P1.2D1Q1417D2D2Q2516D3D3Q3615D4D4Q4714D5P1.3D5Q5813D6D6Q6912D7D7Q711LE1LE1OE74HC573U3D0219D0Q0D1318D1Q1D2417D2Q2D3516D3Q3D4615D4Q4D5714D5Q5D6813D6Q6D7Created By 晓竹912D7Q7LE211LE2013-07-191OE74HC573
#include
#include
#define uint unsigned int
#define uchar unsigned char uchar code
wei[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xb9,0xbf,0x89,0xad,0x7f,0xff};
uchar temp=0xfe; //键盘扫描前赋给P1口的试探值 uchar beis=0x00; //键盘扫描的识别倍率
sbit LE1=P2^0;
sbit LE2=P2^1;
uchar key,sm;//key是扫描得到的键值;
////////////////////////////////////////////////////////////////////
//显示函数,静态显示
void xianshi(uchar x)
{
uint b=200;
LE2=1;
P0=0X0F;
LE2=0;
LE1=1;
P0=wei[x];
while(b--);
LE1=0;
}
////////////////////////////////////////////////////////////////////
//4*4矩阵扫描,键值保存在key中
void key_4x4()
{
P1=temp; //初值uchar temp=0xfe;
sm=P1;
sm=sm&0xf0; //取P1口高四位的值,如果为0就表示无键按下
if(sm!=0xf0)
{
switch(sm)
{
case 0x70:{key=0+4*beis;break;}
case 0xb0:{key=1+4*beis;break;}
case 0xd0:{key=2+4*beis;break;}
case 0xe0:{key=3+4*beis;break;}
default :{key=10+4*beis;break;}
}
}
else
{
if(temp==0xf7)
{
temp=0xfe;
}
else
{
temp=_crol_(temp,1);
}
beis++;
if(beis==4)beis=0;
}
}
////////////////////////////////////////////////////////////////////
//主函数
void main() {
while(1)
{
key_4x4();
xianshi(key);
}
}