C51_3X3键盘扫描程序
Posted by 光明之子 2005-11-25 15:17:57
//键消抖延时函
void delays(void)
{
uchar i;
for(i=2000;i>0;i--);
}
//kbscan(void)键扫描函数
//P1.0-p1.2行线输出,p1.3-p1.5列线输入
uchar kbscan(void)
{
uchar sccode,recode;
P1=0xf8; //发全”0“行扫描码,列线输入
if((P1&0xf8)!=0xf8) //若有键按下
{
delays(); //延时去抖动
if((P1&0xf8)!=0xf8)
{
sccode=0xfe; //逐行扫描初值
while((sccode&0x08)!=0)
{
P1=sccode; //输出行扫描码
if((P1&0xf8)!=0xf8) //本行有键按下
{
recode=(P1&0xf8)|0x07; //取列码
return((~sccode)+(~recode));//返回特征键码
}
else sccode=(sccode<<1)|0x01; //行扫描码左移一位
}
}
}
return(0);//无键按下,返回值为0
}