键盘扫描,有点疑惑

sky0505   2009-5-22 23:40 楼主
4×4阵列键盘扫描


判断是否有键按下,先对键盘所在端口写0x0f,再回读,不为0x0f,表示有键按下

在程序里我是这样处理的

先配制成开漏输出,写0x0f,再配制成浮空输入,读端口,发现每次读到的都是0xff.

是不是在第二次配制成输入的时候,IO寄存器的值就改变了

大家做阵列键盘扫描是怎么配制IO的啊。。。

回复评论 (11)

为什么要先写0f呢? 没搞懂

                                 为什么要先写0f呢? 没搞懂
点赞  2009-5-23 19:07

写不写0f不是问题 的关键

写什么都行

问题是当键盘没有键按下时,写出去的和读回来的值不一样
点赞  2009-5-24 18:50

没人关注,是太简单了吗。。。。

                                  
点赞  2009-5-25 13:03

请画出电路图再讨论

                                 除非你的键盘上有锁存器,否则不可能写出去什么数值又读回来什么数值。
点赞  2009-5-25 13:28

列和行输出相反电平后,

                                 只能设高四位或低四位为输入,不能都设为输入,否则输出的电平自然没有了
点赞  2009-5-25 14:06

电路就是16个键盘按4×4接成阵列直接接到IO口(共8根IO线)

在没有按键按下的情况下,写出去的值和读回来的值应该是一样的



STM32的IO没有缓存吗?
点赞  2009-5-25 14:09

回6楼

问题是我要把行和列的状态读回来啊

不然怎么判断阵列中有哪个点按下。。。
点赞  2009-5-25 14:11

STM32的输出端有缓存,但在端口为输入时信号线不受STM32控制

                                 你的阵列键盘扫描算法好像有问题,通常都是从行输出再从列输入,或从列输出再从行输入,没见过你这样从同样的线上输出再从同样的线上输入的。
点赞  2009-5-25 15:04

输出上拉也可,输入读 PIN

                                  
点赞  2009-5-25 23:13

看来楼主还没搞明白行列扫描

                                 1翻转法,2逐行扫描法.
点赞  2009-5-26 10:36
我觉得9楼说的对,一般都是行线和列线一个为输出一个为输入。
点赞  2011-8-6 22:15
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复