请教一个关于键盘扫描的程序

[复制链接]
2381|5
 楼主| rcwust2009 发表于 2010-1-18 20:59 | 显示全部楼层 |阅读模式
unsigned char keyscan()
  {
   unsigned char sccode,recode;
   P0=0XF0;        //发全0行扫描,列线输入
   if((P0&0XF0)!=0)     //若有键按下
   {
     delay(10);       //延时去抖动
    if((P0&0XF0)!=0)        
     {         
   sccode=0xfe;
   while((sccode&0x10)!=0)    //逐行扫描初值
    {
    P0=sccode;      //输出行扫描码
   if((P0&0xf0)!=0xf0)     //本行有键按下
     {
   recode=(P0&0XF0)|0X0F;
   return((~sccode)+(~recode) );  //返回特征字节码
    }
   else
   sccode=(sccode<<1)|0x01;    //行扫描码左移一位
    }
   }
  }          //无键按下,返回值为0
return(0);
}

这是在根据北航的教材上的一个改编的程序,但是感觉问题. 程序我烧到自己的单片机实验板上也没结果!就前两句而言就感觉不对:
   P0=0XF0;        //发全0行扫描,列线输入
   if((P0&0XF0)!=0)     //若有键按下
既然P0=0xF0;那么
第二句在执行的时if的判断条件总是不成立的。
请高手们指点一下哈
~~~~~~~~
gaohq 发表于 2010-1-18 21:32 | 显示全部楼层
P0=0XF0;
P0口的7,6,5,4置高电平,作输入用,然后再检测这四位,如有键按下,这四位中有一位会被拉成低电平的,再用if((P0&0XF0)!=0) 这句来判断究竟有没有哪位被拉低。
David_ming 发表于 2010-1-19 13:29 | 显示全部楼层
我觉得应该是    if((P0&0XF0)!=0xf0)
gaohq 发表于 2010-1-19 15:55 | 显示全部楼层
LS正确。我没注意到哦。
 楼主| rcwust2009 发表于 2010-1-19 21:44 | 显示全部楼层
回复四楼的:LS是什么意思???
gaohq 发表于 2010-1-19 21:48 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

107

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部