4×4阵列键盘扫描
判断是否有键按下,先对键盘所在端口写0x0f,再回读,不为0x0f,表示有键按下
在程序里我是这样处理的
先配制成开漏输出,写0x0f,再配制成浮空输入,读端口,发现每次读到的都是0xff.
是不是在第二次配制成输入的时候,IO寄存器的值就改变了
大家做阵列键盘扫描是怎么配制IO的啊。。。
为什么要先写0f呢? 没搞懂
为什么要先写0f呢? 没搞懂
写不写0f不是问题 的关键
写什么都行
问题是当键盘没有键按下时,写出去的和读回来的值不一样
请画出电路图再讨论
除非你的键盘上有锁存器,否则不可能写出去什么数值又读回来什么数值。
列和行输出相反电平后,
只能设高四位或低四位为输入,不能都设为输入,否则输出的电平自然没有了
电路就是16个键盘按4×4接成阵列直接接到IO口(共8根IO线)
在没有按键按下的情况下,写出去的值和读回来的值应该是一样的
STM32的IO没有缓存吗?
回6楼
问题是我要把行和列的状态读回来啊
不然怎么判断阵列中有哪个点按下。。。
STM32的输出端有缓存,但在端口为输入时信号线不受STM32控制
你的阵列键盘扫描算法好像有问题,通常都是从行输出再从列输入,或从列输出再从行输入,没见过你这样从同样的线上输出再从同样的线上输入的。
看来楼主还没搞明白行列扫描
1翻转法,2逐行扫描法.
我觉得9楼说的对,一般都是行线和列线一个为输出一个为输入。