矩阵按键可以说是51单片机一个比较典型的输入型的外设。它可以让人与单片机更好的进行交互。
这一小节打算写一个4X4的矩阵按键。至于2X8 , 3X4 ,3X3 这些类型的其实他们的原理都是一样的。可以仿4X4的来写。
矩阵按键扫描原理
这里使用的是8个IO口控制16个按键。
其实原理也很简单,就是对每一行一次进行扫描。比如在图中标号0处(第一行)给一个低电平,如果第一行有按键被按下,那么通过读取标号4、5、6、7处的电平就可以知道是第一行的哪一个按键被按下。其他行也是一样。
先对第一行进行扫描。
KEY_SCAN:
START:
MOV P1,#0FFH
//1、先扫描第一行
MOV R2,#0 ;用来记录行号(第0行)
MOV P1, #0FEH ;1111 1110 P1.0为低电平。
MOV A,P1 ;读取P1口的电平状态
ANL A,#0F0H ;通过逻辑与读取P1口的高四位的电平状态
CJNE A,#0F0H,ON /*判断读取的电平状态经过逻辑与后是否等于1111 0000,
如果等于1111 0000说明没有按键按下,反之有按键按下。
如果没有按键按下就继续扫描第二行。*/
对第二行的扫描
//2、扫描第二行
MOV R2,#1 ;记录行号
MOV P1, #0FDH ;1111