1. 程式人生 > >樹莓派的矩陣鍵盤掃描程式,python開發

樹莓派的矩陣鍵盤掃描程式,python開發

樹莓派可以很方便的拓展矩陣鍵盤用做人機互動,今天教大家如何驅動4*4矩陣鍵盤。


先貼上程式碼:

import time

class keypad(object):
KEYPAD=[
['1','2','3','*'],
['4','5','6','#'],
['7','8','9','$'],
['CLR','0','Set','OK']]

ROW    =[12,16,20,21]
COLUMN =[6,13,19,26]


def __init__(self):
GPIO.cleanup()
GPIO.setmode(GPIO.BCM)

def getkey(self):
import RPi.GPIO as GPIO
#設定列輸出低
for i in range(len(self.COLUMN)):
GPIO.setup(self.COLUMN[i],GPIO.OUT)
GPIO.output(self.COLUMN[i],GPIO.LOW)

#設定行上拉輸入
for j in range(len(self.ROW)):
GPIO.setup(self.ROW[j],GPIO.IN,pull_up_down=GPIO.PUD_UP)

#檢測行是否有鍵按下,有則讀取行值(0~3)
RowVal=-1
for i in range(len(self.ROW)):
RowStatus=GPIO.input(self.ROW[i])
if RowStatus==GPIO.LOW:
RowVal=i
# print 'RowVal=%s' % RowVal 

#若無鍵按下,返回
if RowVal<0 or RowVal>3:
self.exit()
return 

#若第RowVal行有鍵按下,翻轉輸入輸出模式
#第RowVal行輸出高電平,
GPIO.setup(self.ROW[RowVal],GPIO.OUT)
GPIO.output(self.ROW[RowVal],GPIO.HIGH)
#列為下拉輸入
for j in range(len(self.COLUMN)):
GPIO.setup(self.COLUMN[j],GPIO.IN,pull_up_down=GPIO.PUD_DOWN)

#讀取按鍵所在列值
ColumnVal=-1
for i in range(len(self.COLUMN)):
ColumnStatus=GPIO.input(self.COLUMN[i])
if ColumnStatus==GPIO.HIGH:
ColumnVal=i
#等待按鍵鬆開
while GPIO.input(self.COLUMN[i])==GPIO.HIGH:
time.sleep(0.5)
# print 'ColumnVal=%s' % ColumnVal
#若無鍵按下,返回
if ColumnVal<0 or ColumnVal>3:
self.exit()
return

self.exit()
return self.KEYPAD[RowVal][ColumnVal]


def exit(self):
import RPi.GPIO as GPIO
for i in range(len(self.ROW)):
GPIO.setup(self.ROW[i],GPIO.IN,pull_up_down=GPIO.PUD_UP)
for j in range(len(self.COLUMN)):
GPIO.setup(self.COLUMN[j],GPIO.IN,pull_up_down=GPIO.PUD_UP)

if __name__='__main__':

kp=keypad()

key=None

while True:

key=kp.getkey()

if not key==None:

print 'You enter the  key:',key

程式設計思路:假如S1鍵按下,先掃描行(列),即行輸入,列輸出高。此時接第一行的引腳必然會被拉高。設定接第一行的引腳為輸出高,列輸入。此時接第一列的引腳必然會被拉高。這樣我們就得到了第一行第一列的按鍵被按下。