from machine import Pin
import time
tecla = None
ultima_tecla = None
linhas = [19, 21, 22, 23]
for i, p in enumerate(linhas):
linhas[i] = Pin(p, Pin.OUT)
colunas = [18, 5, 17, 16]
for i, p in enumerate(colunas):
colunas[i] = Pin(p, Pin.IN, Pin.PULL_DOWN)
segmentos = [25, 26, 27, 14, 12, 33, 32]
for i, p in enumerate(segmentos):
segmentos[i] = Pin(p, Pin.OUT)
teclas = [
['E', '0', 'F', 'D'],
['7', '8', '9', 'C'],
['4', '5', '6', 'B'],
['1', '2', '3', 'A']
]
# Mapeamento dos números para os segmentos (comum cátodo)
caracteres = {
'0': [1, 1, 1, 1, 1, 1, 0],
'1': [0, 1, 1, 0, 0, 0, 0],
'2': [1, 1, 0, 1, 1, 0, 1],
'3': [1, 1, 1, 1, 0, 0, 1],
'4': [0, 1, 1, 0, 0, 1, 1],
'5': [1, 0, 1, 1, 0, 1, 1],
'6': [1, 0, 1, 1, 1, 1, 1],
'7': [1, 1, 1, 0, 0, 0, 0],
'8': [1, 1, 1, 1, 1, 1, 1],
'9': [1, 1, 1, 1, 0, 1, 1],
'A': [1, 1, 1, 0, 1, 1, 1],
'B': [0, 0, 1, 1, 1, 1, 1],
'C': [1, 0, 0, 1, 1, 1, 0],
'D': [0, 1, 1, 1, 1, 0, 1],
'E': [1, 0, 0, 1, 1, 1, 1],
'F': [1, 0, 0, 0, 1, 1, 1]
}
def preparar_interrupcao():
for linha in linhas:
linha.on()
# Apagar o display
def apagar_display():
for seg in segmentos:
seg.value(0)
# Função de interrupção para ler o teclado
def ler_teclado():
for linha in linhas:
linha.off()
for i, linha in enumerate(linhas):
linha.on()
for j, coluna in enumerate(colunas):
if coluna.value() == 1:
time.sleep_ms(20)
if coluna.value() == 1:
linha.off()
return teclas[i][j]
linha.off()
return None
# Função de exibição de caractere no display
def mostrar_caractere(caractere):
apagar_display()
time.sleep_ms(100)
if caractere in caracteres:
for seg, val in zip(segmentos, caracteres[caractere]):
seg.value(val)
else:
apagar_display()
time.sleep_ms(10)
def principal(pin):
global tecla, ultima_tecla
tecla = ler_teclado()
if tecla and tecla != ultima_tecla:
print("Tecla pressionada:", tecla)
if tecla in caracteres:
mostrar_caractere(tecla)
ultima_tecla = tecla
time.sleep_ms(20)
preparar_interrupcao()
for coluna in colunas:
coluna.irq(trigger=Pin.IRQ_RISING, handler=principal)
apagar_display()
preparar_interrupcao()
while True:
time.sleep(1)