标题: 51单片机keypad键盘数据采集这个百思不得其解的问题 [打印本页]

作者: 万家灯火51    时间: 2024-11-3 21:58
标题: 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)


作者: 万家灯火51    时间: 2024-11-3 22:00
说明一下,不是延时等待电平稳定问题。测试过了。
作者: cyi8    时间: 2024-11-4 08:22
回去好好看一下51单片机各口的定义,51单片机的各输入输出口只是准双向口,不是真正的双向口,所以当要接收外部数据输入是,要先将输入输出口置1,然后读取的数据才会正确,不置1的话,读取到的数据就是内部缓冲器的数据,会不准确,因为内部缓冲器的数据不一定是输入的数据,还有可能是内部代码产生的数据。
作者: lkc8210    时间: 2024-11-4 09:20
仿真不真,详情看此贴:
解决某些版本Proteus阵列键盘失效的奇葩方法
作者: xiaobendan001    时间: 2024-11-4 09:42
这个不是前几天刚问过?
作者: 万家灯火51    时间: 2024-11-5 13:12
cyi8 发表于 2024-11-4 08:22
回去好好看一下51单片机各口的定义,51单片机的各输入输出口只是准双向口,不是真正的双向口,所以当要接收 ...

KEY_ScanPort=0x0F; //   高四位置0,低四位设置为数据采集状态
这一句,低4位就是置1,断cmos门地,准备好采集数据。   所以,不是你说的原因。
作者: 万家灯火51    时间: 2024-11-5 13:13
xiaobendan001 发表于 2024-11-4 09:42
这个不是前几天刚问过?

谢谢还记得前面的问题。这个问题是新问题。跟前面那个不一样。这次这个代码是个很神奇的问题。
作者: 万家灯火51    时间: 2024-11-5 13:21
lkc8210 发表于 2024-11-4 09:20
仿真不真,详情看此贴:
解决某些版本Proteus阵列键盘失效的奇葩方法

你这测试有意思。我还没有去这么仿真测过。不过这自画键盘,我画过,没有任何问题,所以没有去进一步研究。下次试试。这个帖子问的问题,只有才keypad这个键盘模板里才遇到。其它自画键盘或真实键盘中,不存在这个问题的。所以,不知道是proteus 的keypad这个模型本身有问题还是,自己哪点没有理解透。
作者: 万家灯火51    时间: 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; //上面那句去掉,这里采集到的数据就是错的
作者: 万家灯火51    时间: 2024-11-5 13:24
这个还没有解决,顶一下。
作者: 万家灯火51    时间: 2024-11-5 13:58
我把上面的问题,缩在这个图片里,方便大家讨论。如果删掉,P3的值是0xf0.也就是P1,第二次读不到按键数据。
作者: Graves    时间: 2024-11-5 17:11
既然都说真实键盘正常了,何必还纠结这个仿真?毕竟还得以实物为主。
作者: xiaobendan001    时间: 2024-11-6 07:35
万家灯火51 发表于 2024-11-5 13:13
谢谢还记得前面的问题。这个问题是新问题。跟前面那个不一样。这次这个代码是个很神奇的问题。

前几天有人问过类似的问题,不是你问的,我是说那个,你搜索一下就看到了。
作者: lkc8210    时间: 2024-11-6 11:01
万家灯火51 发表于 2024-11-5 13:21
你这测试有意思。我还没有去这么仿真测过。不过这自画键盘,我画过,没有任何问题,所以没有去进一步研究 ...

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




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1