第3个回答 2009-05-16
不明白你有什么问题...这里给个子函数,希望能帮你找出问题~!
注意:前面先定义全局变量
unsigned char code key_code[]={
0xe7,0xeb,0xdb,0xbb,0xed,0xdd,0xbd,0xee,
0xde,0xbe,0xd7,0xb7,0x77,0x7b,0x7d,0x7e };
/**********************************************************
键盘扫描子函数
**********************************************************/
uchar keyscan()
{
uchar scan1,scan2,keycode,j;
P4=0xf0;
scan1=P3;
if((scan1&0xf0)!=0xf0) //判键是否按下
{
delayms(10); //延时30ms
scan1=P3;
if((scan1&0xf0)!=0xf0) //二次判键是否按下
{
beep();
P3=0x0f;
scan2=P3;
keycode=scan1|scan2; //组合成键编码
for(j=0;j<=15;j++)
{
if(keycode== key_code[j]) //查表得键值
{
key=j;
return(key); //
}
}
}
}
else P3=0xff;
return (16);
}
/**********************************************************
判键是否按下子函数
**********************************************************/
void keydown()
{
P3=0xf0;
if((P1&0xf0)!=0xf0)
{
keyscan();
P0=disp_code[key];
}
}
这是查表法,比较容易弄懂!