标题: 学51单片机-搞定矩阵键盘 [打印本页]

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





作者: 小油菜    时间: 2017-2-11 15:21
嗯,讲的不错
作者: 小油菜    时间: 2017-2-11 15:22
讲的真的挺好
作者: 51嘿嘿嘿51    时间: 2017-3-15 23:29
不错不错
作者: 51嘿嘿嘿51    时间: 2017-3-15 23:30
嘿嘿嘿
作者: frf51study    时间: 2017-4-25 15:11
讲得很好,清楚明白易懂
作者: 初学者呆呆    时间: 2017-5-11 09:32
新手来学习啦
作者: 不吃草的牛    时间: 2017-9-13 11:22
看了楼主的贴子总算搞清是什么原理了
作者: 1780656612    时间: 2017-10-27 20:51
谢谢分享了
作者: qiuqiu1122    时间: 2017-12-22 11:18
学习了
作者: 9043    时间: 2018-1-16 11:59
说的很在理啊
作者: nuidx    时间: 2018-5-8 00:04
谢谢分享,太感谢了
作者: 池羡    时间: 2018-11-5 08:32
讲得很好
作者: monthyasha    时间: 2018-12-2 21:18
非常感谢
作者: monthyasha    时间: 2018-12-3 15:30
不知道能不能将独立键盘与矩阵键盘联合在一起?其实分开就好了吧……
作者: monthyasha    时间: 2018-12-7 07:46
这的非常感谢您的解答!
作者: liu631208    时间: 2019-1-19 19:02
讲的真的挺好
作者: L1BB    时间: 2019-7-27 14:48
谢谢分享

作者: 1580864544    时间: 2020-5-13 14:49
还是厉害
作者: 王天库    时间: 2021-12-30 21:53

讲的真的挺好




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1