看过很多单片机的书,上面都是采用IF语句进行判断,那样的话,代码量太大了,不过比较好理解,以下是我写的一个键盘扫描的程序,写过好几个,最后还是觉得这个比较简化,写的不好还清大家指教:
#include <reg52.h>
unsigned char p1[4][4]={
0xee,0xde,0xbe,0x7e,
0xed,0xdd,0xbd,0x7d,
0xeb,0xdb,0xbb,0x7b,
0xe7,0xd7,0xb7,0x77
}; //判断按键的编码
/*LED点阵显示的相应编码*/
unsigned char p0[4]={0xfc,0xf3,0xcf,0x3f};
unsigned char p2[4]={0xfc,0xf3,0xcf,0x3f};
void delay(char x) //延时函数
{
while(x--);
}
void main(void)
{
unsigned char temp1,i,j,temp2=0xfe;
while(1)
{
P1=temp2;
delay(10);
temp1=P1;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
if(temp1==p1[i][j]) //判断是哪一个键被按下
{
P0=p0[i]; //点亮相应的LED点整,用来标记哪一个键被按下
P2=p2[j];
}
temp2=temp2<<1|0x01;
if(temp2==0xef)
temp2=0xfe;
}
}
我使用的板子上的键盘是接在P1口上,行对应P1^0~P1^3,列对应P1^4~P1^7,
使用行列扫描进行按键的判别,判断之后就点亮点阵上相应的LED,用来标识按下的是哪一个键,LED分别接在P0、P2口上的