一、电路连接
4*4薄膜键盘模块分别有8个传输口,不需要供电,如图2-5的右侧所示。八个接口利用公对母杜邦线接入树莓派任意八个没有占用的GPIO口即可,连接效果如图2-5。
图2-5 4*4薄膜键盘电路连接图
二、工作原理
利用逐行(或列)扫描查询法识别按键。
1.判断键盘中是否有键,按下键,将所有y0-y0行设置为低电平,然后检测列行的状态。只要一列的级别较低,就意味着按下了键盘上的一个键,闭合键位于由低级别线和四行线交叉的四个键中。如果所有列都是高电平,则不按键盘上的任何键。
2.判断键盘中关闭键的所在位置。当已知按下某个键后,就可以进入关闭特定键的流程。方法如下:依次将一行设置为低电平,即当一行设置为低电平时,其他行设置为高电平。确定行的位置为低电平后,逐行检测每个列的电平状态。如果列为low,则列线与设置为low level的行线相交处的键为closed键。
三、驱动代码
导入GPIO库,设定好编码格式和DHT温湿度模块所连接的管脚并开启。将每列与每行上的高低电平相连接,行列皆为高电平则表示按下的是行列相交交点值。
import RPi.GPIO as GPIO#导入GPIO库
import time#导入time库
L1 = 5 #GPIO5控制第一行
L2 = 6 #GPIO6控制第二行
L3 = 13 #GPIO13控制第三行
L4 = 19 #GPIO19控制第四行
C1 = 1 #GPIO1控制第一列
C2 = 12 #GPIO12控制第二列
C3 = 20 #GPIO20控制第三列
C4 = 21 #GPIO21 控制第四列
GPIO.setwarnings(False)#代码禁用警告
GPIO.setmode(GPIO.BCM)#设置模式
GPIO.setup(L1,GPIO.OUT)#L1设为输出口
GPIO.setup(L2,GPIO.OUT)#L2设为输出口
GPIO.setup(L3,GPIO.OUT)#L3设为输出口
GPIO.setup(L4,GPIO.OUT)#L4设为输出口
GPIO.setup(C1,GPIO.IN,pull_up_down = GPIO.PUD_DOWN)#设置某一瞬间的C1信号
GPIO.setup(C2,GPIO.IN,pull_up_down = GPIO.PUD_DOWN)#设置某一瞬间的C2信号
GPIO.setup(C3,GPIO.IN,pull_up_down = GPIO.PUD_DOWN)#设置某一瞬间的C3信号
GPIO.setup(C4,GPIO.IN,pull_up_down = GPIO.PUD_DOWN)#设置某一瞬间的C4信号
def readLine(line,characters):
GPIO.output(line,GPIO.HIGH)
if(GPIO.input(C1) == 1):
print(characters[0])
if(GPIO.input(C2) == 1):
print(characters[1])
if(GPIO.input(C3) == 1):
print(characters[2])
if(GPIO.input(C4) == 1):
print(characters[3])
GPIO.output(line,GPIO.LOW)
try:
while true:
#读数
readLine(L2,[“1”,”2”,”3”,”A”])
readLine(L1,[“4”,”5”,”6”,”B”])
readLine(L3,[“7”,”8”,”9”,”C”])
readLine(L4,[“*”,”0”,”#”,”D”])
time.sleep(0.1)
except KeyboardInterrupt:
print(“\nAPP stopped!”)
四、驱动结果描述
测试程序包含一个名为readLine的方法。readLine方法将脉冲发送到单行,然后检查在将该行拉高时按下了哪个按钮。