打印

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

[复制链接]
1386|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正确。我没注意到哦。

使用特权

评论回复
5
rcwust2009|  楼主 | 2010-1-19 21:44 | 只看该作者
回复四楼的:LS是什么意思???

使用特权

评论回复
6
gaohq| | 2010-1-19 21:48 | 只看该作者
楼上

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

107

帖子

1

粉丝