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 (debounce)
time_noise = 20
# Khai báo cột là đầu ra
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 là đầu vào có điện trở kéo xuống (pull-down)
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]
def scan_key():
while True:
# Quét từng cột
for c in range(len(col)):
col[c].value(1) # Đặt cột hiện tại lên mức cao
# Quét từng hàng
for r in range(len(row)):
if row[r].value() == 1: # Kiểm tra xem nút có được nhấn không
# Chống nhiễu (debounce)
utime.sleep_ms(time_noise)
if row[r].value() == 1: # Kiểm tra lại sau thời gian chống nhiễu
print('Cột=' + str(c) + ', Hàng=' + str(r) + ' => Nút=' + key_pad[r][c])
# Chờ đến khi nút được thả ra
while row[r].value() == 1:
pass
utime.sleep_ms(1) # Trễ nhỏ để ổn định
col[c].value(0) # Đặt cột hiện tại về mức thấp
scan_key()