《51系列单片机_矩阵按键检测》此程序使用 单片机89SC52// 1、 此程序实现矩阵按键的检测功能,按下按键时,数码管显示按键的相应键值
int MatrixKeyscan() //4*4矩阵键盘键值扫描函数,返回按下的第一个按键对应的键值
{
char key[16] = //行扫描对应的键值数组
{
0xee, 0xde, 0xbe, 0x7e,
0xed, 0xdd, 0xbd, 0x7d,
0xeb, 0xdb, 0xbb, 0x7b,
0xe7, 0xd7, 0xb7, 0x77
};
char line[4] = {0xfe, 0xfd, 0xfb, 0xf7}; //行扫描值,将各行信号分别置0,列值全1
char tmp;
int i, j, k=-1;
for(i=0; i<4; i++)
{
P1 = line[i]; //将行扫描值逐个送至P1端口 tmp = P1; //再读取P1口的值
if(tmp != line[i]) //若读取的数值不等于送入的行扫描值,表示有按键被按下
{
delay_ms(10); //延时,重新读取判断,确认有键按下 tmp = P1;
if(tmp != line[i])
{
for(j=0; j<4; j++) //当有键按下时,根据变化后的P1端口值确定对应的行列值 i和j,并给k赋予键值
{
if(tmp == key[4*i+j])
{
k = 4*i+j;
return k;
}
}
}
while(tmp != line[i]) tmp = P1; //(等待按键释放)循环直到读取的P1端口值与行扫描值相同,此时按键释放
}
}
return k; //返回扫描到的键值