# Programa para Ler um Teclado 4X4 e mostrar no display de 7 segmentos
# LTP-2 20-03-2023
# Importando as bibliotecas necessárias
from machine import Pin
from utime import sleep_ms
# Definindo os pinos do teclado matricial
# Aqui usamos uma lista para linhas e outra para colunas
linhaPinos = [Pin(0, Pin.OUT), Pin(1, Pin.OUT), Pin(2, Pin.OUT), Pin(3, Pin.OUT)]
colunaPinos = [Pin(4, Pin.IN, Pin.PULL_DOWN), Pin(5, Pin.IN, Pin.PULL_DOWN),
Pin(6, Pin.IN, Pin.PULL_DOWN), Pin(7, Pin.IN, Pin.PULL_DOWN)]
# Definindo os pinos do display de 7 segmentos
# Aqui também usamos uma lista para definir os segmentos
segmentoPinos = [Pin(8, Pin.OUT), Pin(9, Pin.OUT), Pin(10, Pin.OUT), Pin(11, Pin.OUT),
Pin(12, Pin.OUT), Pin(13, Pin.OUT), Pin(14, Pin.OUT)]
display1 = Pin(15, Pin.OUT)
# Definindo os valores correspondentes para cada dígito no display de 7 segmentos
# Os dígitos estão organizados conforme o Layout do Teclado.
# Aqui estamos usando um Dicionário para referencia cada tecla
digitos = {'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': [1, 1, 1, 0, 1, 1, 1],
'5': [0, 1, 1, 0, 0, 1, 1], '6': [1, 0, 1, 1, 0, 1, 1], '7': [1, 0, 1, 1, 1, 1, 1], '8': [0, 0, 1, 1, 1, 1, 1],
'9': [1, 1, 1, 0, 0, 0, 0], '10': [1, 1, 1, 1, 1, 1, 1], '11': [1, 1, 1, 1, 0, 1, 1], '12': [1, 0, 0, 1, 1, 1, 0],
'13': [0, 0, 1, 1, 1, 0, 1], '14': [1, 1, 1, 1, 1, 1, 0], '15': [0, 0, 1, 0, 0, 1, 1], '16': [0, 1, 1, 1, 1, 0, 1]}
# Loop principal
while True:
# Loop através das linhas do teclado matricial
display1.value(0)
for i in range(4):
# Configurando a linha atual para alto
linhaPinos[i].value(1)
# Loop através das colunas do teclado matricial
for j in range(4):
# Verificando se a tecla atual foi pressionada
if colunaPinos[j].value() == 1:
# Exibindo o valor da tecla no display de 7 segmentos
for k in range(7):
#A função str() converte um numérico em string
#Note que a equação fornece a posição linear da tecla
segmentoPinos[k].value(digitos[str(i*4 + j+1)][k])
# Esperando um curto período de tempo antes de continuar
sleep_ms(50)
# Configurando a linha atual para baixo
linhaPinos[i].value(0)