初级会员

- 积分
- 50
- 金钱
- 50
- 注册时间
- 2019-9-5
- 在线时间
- 16 小时
|
1金钱
本帖最后由 sanbikappa 于 2019-11-18 06:05 编辑
正在自学stm32,想基于stm32f103设计一款普通的87键无冲键盘。
无冲键盘的原理是:矩阵键盘+二极管整流+逐行(或逐列)扫描
最简化的电路如下图:
keyboard1
上图扫描按键的步骤为:
(1)初始化P1、P2为上拉输入,高电平;
(2)初始化P3、P4为推挽输出,高电平;
(3)P3-P4依次单独设置为低电平,观察P1-P2没有被拉低,有的话则对应的按键有被按下;
这样的原理下,要做一个87键的普通无冲键盘就要使用9×10的矩阵(可管理90个按键),需要占用9+10=19个引脚。占用的引脚太多了。
能不能进一步改进,按下图设计呢?
keyboard2
上图每个按键模块都再并联了另一个按键模块,但是两个并联的按键里的二极管的方向是相反的。
扫描按键的步骤为:
(1)初始化P1、P2为上拉输入,高电平;
(2)初始化P3、P4为推挽输出,高电平;
(3)P3-P4依次单独设置为低电平,观察P1-P2没有被拉低,有的话则对应的按键有被按下;
------------
(4)初始化P3、P4为上拉输入,高电平;
(5)初始化P1、P2为推挽输出,高电平;
(6)P1-P2依次单独设置为低电平,观察P3-P4没有被拉低,有的话则对应的按键有被按下;
上述步骤的第(1)-(3)步可确认key1-4有没有被按下,而第(4)-(6)步可确认key5-8有没有被按下。
这样用4个引脚可以管理8个按键,那么用14个引脚可以管理7×7×2=98个按键,足够做一个87键的键盘。
把引脚缩减到16个以内,就可以用同一组引脚做矩阵,扫描键盘时直接读取寄存器就可以一次性读取多个引脚的状态。
问题是可以这样反向并联二级管来设计吗?另外限流电阻设置多大比较合适?太小担心二极管被反向击穿,太大担心引脚识别不了低电平…
|
|