刚刚开始玩树莓派,需要用到矩阵键盘,但是发现百度上这种资料少之又少..莫非太简单了??
难得找到一个,却发现代码没有缩进,巨难受。
原网址:https://blog.csdn.net/xfwxqx/article/details/45251359
我在此基础上修改了一下,就当帮和我一样的萌新们理一下思路吧,大佬勿喷...
import time import RPi.GPIO as GPIO class keypad(object): KEYPAD=[ ['1','2','3','A'], ['4','5','6','B'], ['7','8','9','C'], ['*','0','#','D']] ROW =[12,16,20,21]#行 COLUMN =[6,13,19,26]#列 #初始化函数 def __init__(): GPIO.cleanup() GPIO.setmode(GPIO.BCM) #取得键盘数函数 def getkey(): GPIO.setmode(GPIO.BCM) #设置列输出低 for i in range(len(keypad.COLUMN)): GPIO.setup(keypad.COLUMN[i],GPIO.OUT) GPIO.output(keypad.COLUMN[i],GPIO.LOW) #设置行为输入、上拉 for j in range(len(keypad.ROW)): GPIO.setup(keypad.ROW[j],GPIO.IN,pull_up_down=GPIO.PUD_UP) #检测行是否有键按下,有则读取行值 RowVal=-1 for i in range(len(keypad.ROW)): RowStatus=GPIO.input(keypad.ROW[i]) if RowStatus==GPIO.LOW: RowVal=i #print('RowVal=%s' % RowVal) #若无键按下,则退出,准备下一次扫描 if RowVal<0 or RowVal>3: exit() return #若第RowVal行有键按下,跳过退出函数,对掉输入输出模式 #第RowVal行输出高电平, GPIO.setup(keypad.ROW[RowVal],GPIO.OUT) GPIO.output(keypad.ROW[RowVal],GPIO.HIGH) #列为下拉输入 for j in range(len(keypad.COLUMN)): GPIO.setup(keypad.COLUMN[j],GPIO.IN,pull_up_down=GPIO.PUD_DOWN) #读取按键所在列值 ColumnVal=-1 for i in range(len(keypad.COLUMN)): ColumnStatus=GPIO.input(keypad.COLUMN[i]) if ColumnStatus==GPIO.HIGH: ColumnVal=i #等待按键松开 while GPIO.input(keypad.COLUMN[i])==GPIO.HIGH: time.sleep(0.05) #print ('ColumnVal=%s' % ColumnVal) #若无键按下,返回 if ColumnVal<0 or ColumnVal>3: exit() return exit() return keypad.KEYPAD[RowVal][ColumnVal] def exit(): import RPi.GPIO as GPIO for i in range(len(keypad.ROW)): GPIO.setup( keypad.ROW[i],GPIO.IN,pull_up_down=GPIO.PUD_UP) for j in range(len( keypad.COLUMN)): GPIO.setup( keypad.COLUMN[j],GPIO.IN,pull_up_down=GPIO.PUD_UP) #key=None #while True: # key=getkey() # if not key==None: # print ('You enter the key:',key)