找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 888|回复: 13
打印 上一主题 下一主题
收起左侧

51单片机keypad键盘数据采集这个百思不得其解的问题

[复制链接]
跳转到指定楼层
楼主
temp=KEY_ScanPort;                 //读P1口      
        temp=temp&0xF0;
        temp=~((temp>>4)|0xF0);
        if(temp==1)
                key=0;
        else if(temp==2)
                key=1;
        else if(temp==4)
                key=2;
        else if(temp==8)
                key=3;
        
        KEY_ScanPort=0xFF;//去掉这一句,下面temp就采集不到正确数据了,为什么?
        
        KEY_ScanPort=0x0F; //   高四位置0,低四位设置为数据采集状态            
         temp=KEY_ScanPort; //上面那句去掉,这里采集到的数据就是错的         
        temp=temp&0x0F;
        temp=~(temp|0xF0);        
        if(temp==1)
                key=key+0;
        else if(temp==2)
完整的代码及电路在附件里。仿真观察p2口数据显示情况。如果去掉上面那一句,再对比观察可知数据采集不正确。 keyboard.rar (72.86 KB, 下载次数: 6)

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:349276 发表于 2024-11-3 22:00 | 只看该作者
说明一下,不是延时等待电平稳定问题。测试过了。
回复

使用道具 举报

板凳
ID:1121801 发表于 2024-11-4 08:22 | 只看该作者
回去好好看一下51单片机各口的定义,51单片机的各输入输出口只是准双向口,不是真正的双向口,所以当要接收外部数据输入是,要先将输入输出口置1,然后读取的数据才会正确,不置1的话,读取到的数据就是内部缓冲器的数据,会不准确,因为内部缓冲器的数据不一定是输入的数据,还有可能是内部代码产生的数据。
回复

使用道具 举报

地板
ID:161164 发表于 2024-11-4 09:20 | 只看该作者
回复

使用道具 举报

5#
ID:1109793 发表于 2024-11-4 09:42 | 只看该作者
这个不是前几天刚问过?
回复

使用道具 举报

6#
ID:349276 发表于 2024-11-5 13:12 | 只看该作者
cyi8 发表于 2024-11-4 08:22
回去好好看一下51单片机各口的定义,51单片机的各输入输出口只是准双向口,不是真正的双向口,所以当要接收 ...

KEY_ScanPort=0x0F; //   高四位置0,低四位设置为数据采集状态
这一句,低4位就是置1,断cmos门地,准备好采集数据。   所以,不是你说的原因。
回复

使用道具 举报

7#
ID:349276 发表于 2024-11-5 13:13 | 只看该作者
xiaobendan001 发表于 2024-11-4 09:42
这个不是前几天刚问过?

谢谢还记得前面的问题。这个问题是新问题。跟前面那个不一样。这次这个代码是个很神奇的问题。
回复

使用道具 举报

8#
ID:349276 发表于 2024-11-5 13:21 | 只看该作者
lkc8210 发表于 2024-11-4 09:20
仿真不真,详情看此贴:
解决某些版本Proteus阵列键盘失效的奇葩方法

你这测试有意思。我还没有去这么仿真测过。不过这自画键盘,我画过,没有任何问题,所以没有去进一步研究。下次试试。这个帖子问的问题,只有才keypad这个键盘模板里才遇到。其它自画键盘或真实键盘中,不存在这个问题的。所以,不知道是proteus 的keypad这个模型本身有问题还是,自己哪点没有理解透。
回复

使用道具 举报

9#
ID:349276 发表于 2024-11-5 13:24 | 只看该作者
cyi8 发表于 2024-11-4 08:22
回去好好看一下51单片机各口的定义,51单片机的各输入输出口只是准双向口,不是真正的双向口,所以当要接收 ...

KEY_ScanPort=0xFF;//真实键盘和其它仿真模型键盘,可以去掉这一句的。但keypad模型,删除这一句,下面temp就采集不到正确数据了,为什么?
        
        KEY_ScanPort=0x0F; //   高四位置0,低四位设置为数据采集状态            
         temp=KEY_ScanPort; //上面那句去掉,这里采集到的数据就是错的
回复

使用道具 举报

10#
ID:349276 发表于 2024-11-5 13:24 | 只看该作者
这个还没有解决,顶一下。
回复

使用道具 举报

11#
ID:349276 发表于 2024-11-5 13:58 | 只看该作者
我把上面的问题,缩在这个图片里,方便大家讨论。如果删掉,P3的值是0xf0.也就是P1,第二次读不到按键数据。
回复

使用道具 举报

12#
ID:192020 发表于 2024-11-5 17:11 | 只看该作者
既然都说真实键盘正常了,何必还纠结这个仿真?毕竟还得以实物为主。
回复

使用道具 举报

13#
ID:1109793 发表于 2024-11-6 07:35 | 只看该作者
万家灯火51 发表于 2024-11-5 13:13
谢谢还记得前面的问题。这个问题是新问题。跟前面那个不一样。这次这个代码是个很神奇的问题。

前几天有人问过类似的问题,不是你问的,我是说那个,你搜索一下就看到了。
回复

使用道具 举报

14#
ID:161164 发表于 2024-11-6 11:01 | 只看该作者
万家灯火51 发表于 2024-11-5 13:21
你这测试有意思。我还没有去这么仿真测过。不过这自画键盘,我画过,没有任何问题,所以没有去进一步研究 ...

我仿真测试的就是自画键盘啊,当然keypad这个键盘模板也会出现同样问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表