赞助论坛
  • 9618阅读
  • 0回复

学习单片机之---C51_3X3键盘扫描程序 [复制链接]

楼层直达
jswr  
发帖
339
精华
1
金币
264
威望
8
贡献
7
好评
15
注册
2008-06-30
楼主    jswr 发表于: 2008-08-05 14:46:54 
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
}