查看: 5106|回复: 9

[提问] 关于键盘扫描的一个问题

[复制链接]
发表于 2010-5-18 16:46:37 | 显示全部楼层 |阅读模式
关键词: 键盘 , 扫描
关于键盘扫描我看书上写的是一行一行扫描例如
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值
    }
}
但是我这样弄了一晚上也没有搞出来,不知道是不是我理解有误,还请大家指正
发表于 2010-5-18 19:32:33 | 显示全部楼层
没有硬件图,说不清楚,最好画个硬件图出来了
发表于 2010-5-18 19:36:56 | 显示全部楼层
有很多种方法,不一定要一行一行的扫啊
发表于 2010-5-18 22:38:46 | 显示全部楼层
如果输出高电平,被强制拉低,这样对硬件有损害。
发表于 2010-5-19 00:12:57 | 显示全部楼层
你看的书上的51例子应该是对的,其电路图可能如下:
file:///D:/Alpha321/My
其原理大致是P3用作4x4按键阵列的输入和行选通输出,
其中低4位用作行选通,高4为用作输入.
至于楼上说的强制拉低高电平的问题,在传统的51架构中应该没有问题.
可是你的程序就不是针对这个电路的,应该是在P3口上直接全部加上拉电阻,
然后逐位输入.不过这样做,按你的程序如果两个键同时按下,则无法检出.
如果你的电路如我的图中所示,程序中缺少了选通输出的步骤.
发表于 2010-5-19 00:13:47 | 显示全部楼层
[img][/img]
发表于 2010-5-19 00:14:58 | 显示全部楼层
keypad.bmp
发表于 2010-5-19 00:16:31 | 显示全部楼层
仅供参考,多交流.
 楼主| 发表于 2010-5-19 09:48:51 | 显示全部楼层
回复7楼alpha321

谢谢啦 当初自己焊的一个 还很好用
发表于 2010-5-26 09:01:07 | 显示全部楼层
回复4楼terrysun如果是标准51IO口的话是没问题的
发表于 2010-5-26 09:08:49 | 显示全部楼层
按楼主的P3赋值0xff是得不出键值的,0xee怎么得出,何来的低电平
发表于 2010-5-26 19:04:33 | 显示全部楼层
这样不安全
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表