树莓派矩阵键盘(python)

刚刚开始玩树莓派,需要用到矩阵键盘,但是发现百度上这种资料少之又少..莫非太简单了??

难得找到一个,却发现代码没有缩进,巨难受。

原网址: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)

猜你喜欢

转载自blog.csdn.net/q943413302/article/details/80487821