OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2905|回复: 3

矩阵键盘--无冲键盘电路能否反向并联二极管共用引脚,从而进一步减少占用引脚?

[复制链接]

1

主题

3

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2019-9-5
在线时间
16 小时
发表于 2019-11-18 05:55:46 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 sanbikappa 于 2019-11-18 06:05 编辑

正在自学stm32,想基于stm32f103设计一款普通的87键无冲键盘。

无冲键盘的原理是:矩阵键盘+二极管整流+逐行(或逐列)扫描


最简化的电路如下图:

keyboard1

keyboard1


上图扫描按键的步骤为:
(1)初始化P1、P2为上拉输入,高电平;
(2)初始化P3、P4为推挽输出,高电平;
(3)P3-P4依次单独设置为低电平,观察P1-P2没有被拉低,有的话则对应的按键有被按下;

这样的原理下,要做一个87键的普通无冲键盘就要使用9×10的矩阵(可管理90个按键),需要占用9+10=19个引脚。占用的引脚太多了。

能不能进一步改进,按下图设计呢?

keyboard2

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个以内,就可以用同一组引脚做矩阵,扫描键盘时直接读取寄存器就可以一次性读取多个引脚的状态。


问题是可以这样反向并联二级管来设计吗?另外限流电阻设置多大比较合适?太小担心二极管被反向击穿,太大担心引脚识别不了低电平…



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2019-11-18 11:19:39 | 显示全部楼层
87键,是我 的话,直接用 8*11, 19 个IO
103 48 引脚封装 怕是够用了吧.
回复

使用道具 举报

1

主题

3

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2019-9-5
在线时间
16 小时
 楼主| 发表于 2019-11-19 02:54:45 | 显示全部楼层
操作系统 发表于 2019-11-18 11:19
87键,是我 的话,直接用 8*11, 19 个IO
103 48 引脚封装 怕是够用了吧.

如果分开两组io的话读写寄存器会有点麻烦,而且我还要留相同数量的io口做led矩阵呢。。。
回复

使用道具 举报

1

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2019-7-26
在线时间
10 小时
发表于 2020-4-15 16:35:33 | 显示全部楼层
我最近也在用103做键盘,78键的,我也再考虑IO资源紧张的问题。。。要加OLED,还想留蓝牙接口,不知道你这种接法验证过吗
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-27 03:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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