树莓派的矩阵键盘扫描程序,python开发

来源:互联网 发布:服务器数据库版本 编辑:程序博客网 时间:2024/05/30 23:01

树莓派可以很方便的拓展矩阵键盘用做人机交互,今天教大家如何驱动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键按下,先扫描行(列),即行输入,列输出高。此时接第一行的引脚必然会被拉高。设置接第一行的引脚为输出高,列输入。此时接第一列的引脚必然会被拉高。这样我们就得到了第一行第一列的按键被按下。

1 0
原创粉丝点击