from machine import Pin
import utime
# Khai báo các nút trên bàn phím trong mảng 2 chiều
key_pad = [['1','2','3','A'],['4','5','6','B'],['7','8','9','C'],['*','0','#','D']]
# Thời gian chống nhiễu
time_noise = 20
# Khai báo cột
C1 = Pin(13, Pin.OUT)
C2 = Pin(12, Pin.OUT)
C3 = Pin(14, Pin.OUT)
C4 = Pin(27, Pin.OUT)
col = [C1, C2, C3, C4]
# Khai báo hàng
R1 = Pin(26, Pin.IN, Pin.PULL_DOWN)
R2 = Pin(25, Pin.IN, Pin.PULL_DOWN)
R3 = Pin(33, Pin.IN, Pin.PULL_DOWN)
R4 = Pin(32, Pin.IN, Pin.PULL_DOWN)
row = [R1, R2, R3, R4]
# Hàm quét phím
def scan_key():
while True:
# Quét cột
for c in range(len(col)):
col[c].value(1) # Bật cột
# Quét hàng
for r in range(len(row)):
if row[r].value() == 1: # Kiểm tra phím nhấn
utime.sleep_ms(time_noise) # Chống nhiễu
if row[r].value() == 1: # Kiểm tra lại sau khi chống nhiễu
print(f"col={c}, row={r} => Key={key_pad[r][c]}")
# Chờ nhả phím trước khi tiếp tục
while row[r].value() == 1:
utime.sleep_ms(10)
col[c].value(0) # Tắt cột
utime.sleep_ms(10) # Thêm chút thời gian giữa các lần quét
# Gọi hàm quét phím
scan_key()