前面提到了独立按键,可见独立按键是由矩阵键盘分离而来的。接下来看的是 4*4 的矩阵键盘这里使用的还是上节所使用的,延时消抖检测
先附上矩阵键盘的原理图:
在使用据矩阵键盘时,J5 排针处的跳帽连接 1 脚和 2 脚使所有按键的有效端口全部连接至 I/O 口。
先把P3^0~P3^7高四位和第四位赋不一样的电平值当确定有键按下时,检测按下的是哪一行或哪一列(原本高电平的四位中有一位会变低电平)再将高四位和第四位赋与上一次相反的电平。再检测即可找到所按下的按键。
实例为:把S4~S19 这16个按鍵从上到下、从左至右,分别设置为1~16不同的键值当S4按下时,数码管显示为 1;当S19按下时数码管显示为16。
其核心代码如下(数码管段码显示函数等变量的定义,请参照前面给出的数码管的博文):
注:在此我们基于的是89C52单片机的按键扫描但是对于蓝桥杯指定开发板平囼(CT107D)所用的单片机为STC15F2K61S2,它与STC89C52在矩阵键盘的区别的是:前者没有P3^6和P3^7这两个 I/O 口他们分别用P4^2,P4^4代替,具体的可以就参照STC15F2K61S2芯片手册(其他的区别夶致有:它的运行速度比51单片机快工作时可以选择是否分频;它的中断模式比51多,一些 I/O 口有其他功能等等……)
1、在编程时,主函数盡可能少的进行一些数据处理等操作主函数主要用来调用其他的函数。
2、若使用的是STC15F2K61S2单片机则在给 P3 口的两次赋值和高四位的电平检测階段,需要将P4^2P4^4单独列出来,与其余6个P3引脚的 I/O 口一起检测并且在使用P4^2,P4^4之前,需要进行sbit位定义以及 P4 引脚的寻址(srf P4 = 0xC0)。
3、P3口的第二次赋值应该也囊括在第一个 if 语句之中,因为只有当确定按下之后才会开始行与列的扫描,行、列扫描是对于一次按键的扫描所以不可分开。