关于键盘扫描的一个问题

2010年05月18日 16:46    发布者:罗克韦尔
关于键盘扫描我看书上写的是一行一行扫描例如
P3 = 0xfe;
temp = P3;
temp = temp&0xf0;
if(temp!=0xf0)
{...}
现在问题是这样的,按这种方式理解的话就是说如果有键按下的话就会改变P3口高四位的数据,那既然有键按下时P3口的数据会改变,所以我就想是不是可以给P3口全送高电平0xff,这样再来判断是否有键按下,如果有键按下的话就肯定不是0xff了,列如下边这样
P3 = 0xff;
temp = P3;
if(temp != 0xff)
{
    switch(temp)
    {

         case 0xee:
               break;
         case 0xed;
               break;
         .....每一个键对应的P3值
    }
}
但是我这样弄了一晚上也没有搞出来,不知道是不是我理解有误,还请大家指正

网友评论

lhj200304 2010年05月18日
没有硬件图,说不清楚,最好画个硬件图出来了
lhj200304 2010年05月18日
有很多种方法,不一定要一行一行的扫啊
terrysun 2010年05月18日
如果输出高电平,被强制拉低,这样对硬件有损害。
alpha321 2010年05月19日
你看的书上的51例子应该是对的,其电路图可能如下:
file:///D:/Alpha321/My
其原理大致是P3用作4x4按键阵列的输入和行选通输出,
其中低4位用作行选通,高4为用作输入.
至于楼上说的强制拉低高电平的问题,在传统的51架构中应该没有问题.
可是你的程序就不是针对这个电路的,应该是在P3口上直接全部加上拉电阻,
然后逐位输入.不过这样做,按你的程序如果两个键同时按下,则无法检出.
如果你的电路如我的图中所示,程序中缺少了选通输出的步骤.
alpha321 2010年05月19日
alpha321 2010年05月19日
15685
alpha321 2010年05月19日
仅供参考,多交流.
罗克韦尔 2010年05月19日
回复7楼alpha321:

谢谢啦 当初自己焊的一个 还很好用
oksmn 2010年05月26日
回复4楼terrysun: 如果是标准51IO口的话是没问题的
oksmn 2010年05月26日
按楼主的P3赋值0xff是得不出键值的,0xee怎么得出,何来的低电平
bigxim 2010年05月26日
这样不安全