找回密码
 注册
关于网站域名变更的通知
查看: 197|回复: 3
打印 上一主题 下一主题

学51单片机-搞定矩阵键盘

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-9-30 10:25 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
矩阵按键貌似是学51单片机里面必备的一课,现在基本所有的51开发板都带这部分电路。因为它用8个IO口实现了16个按键的扫描检测,实现了IO口更充分的利用。
      扫描矩阵按键的程序说简单也简单,说复杂也复杂。说它简单,是因为现在网络太发达了,随便搜索一下,都能找到可以直接用的源码。说它复杂,是因为如果不借助网络,全凭自己去摸索,确实要花一部分时间。
      我当时是性子比较倔,只在网上看了矩阵按键的原理,没有看参考代码,完全凭借自己的理解,写了一段矩阵按键的扫描程序,花了三天时间才调试通。那三天,真的是折腾的死去活来,但是当程序调好的时候,真的感觉自己还是很拉风的。
      这里,不是让大家学我那样去闭门造车,因为太费时间了。看过一个高手说的一段话:寄存器不用死记硬背,我做了那么久单片机项目的开发,连一个寄存器都记不住。需要配置寄存器的时候,直接在网上或者书本上参考别人现成的配置程序是上策,查找芯片数据手册是中策,死记硬背寄存器是最最下策。
      直接参考别人现成的配置程序是上策,但是一定要理解,否则会出现根基不稳、知其然不知其所以然的情况!
      继续说矩阵键盘,上电路:
      注意,前面废话了很多,现在开始说原理:
程序扫描时,给P3口赋值就0Xfe。然后读取高四位的电平,因为此时无按键触发,所以高四位状态是1111 (二进制数)。
      假设此时S1被按下,高四位会变成什么?1110(二进制数),S1对应的编码就是:0B11101110.
      假设是S3被按下,高四位会变成什么?1011(二进制数),S3对应的编码就是:0B10111110
因为S1被按下,所以低四位的状态会变成1110(二进制数)。
将两次得到的P3口状态进行逻辑或运算,就能得到按键S1对应的编码:0B1110 1110.每个按键都会有一个编码,我们只需要对他们的编码进行比对,就知道按下了哪个按键。
注意:编码的确认是在矩阵电路确定后,就已经随着电路固定了。

( L3 t& ]( z& X% G+ Y1 i
因为程序比较多,我就不在这里贴了,这次是矩阵按键控制数码管显示,从0~F。

& \$ X; s' v- A8 B1 @5 q+ x& j; H

该用户从未签到

2#
发表于 2022-9-30 11:15 | 只看该作者
逐行,逐列扫描的本质是给某一行/某一列,低电平,其余七个全部为高电平,这时候读取电平变换,有电平变低表示按键按下,即可读取按键数据。和屏幕的刷新很相似!

该用户从未签到

3#
发表于 2022-9-30 15:17 | 只看该作者
在键盘的按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。节约资源的方法。

该用户从未签到

4#
发表于 2022-9-30 16:07 | 只看该作者
读取第1行(列)→读取第2行(列) →读取第3行(列) → ……,然后快速循环这个过程,最终实现所有按键同时检测的效果。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-16 15:40 , Processed in 0.078125 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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