Documentos de Académico
Documentos de Profesional
Documentos de Cultura
I10
I10
Diseñar un circuito, y el software asociado para manejar un teclado matricial de 16 teclas en conjunto
con 4 display de 7 segmentos.
3. INFORME
3.1.1 Desarrollar una subrutina que permita identificar o decodificar las teclas que se presionan
en un teclado de 16 teclas. Las teclas a identificar deben ser: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, =,
enter, BORRAR
ldi r16,0b11111110
out portb,r16
sbis pinb,7
rcall rutinaA
sbis pinb,6
rcall rutina9
sbis pinb,5
rcall rutina8
sbis pinb,4
rcall rutina7
ldi r16,0b11111101
out portb,r16
sbis pinb,7
rcall rutinaB
sbis pinb,6
rcall rutina6
sbis pinb,5
rcall rutina5
sbis pinb,4
rcall rutina4
ldi r16,0b11111011
out portb,r16
sbis pinb,7
rcall rutinaC
sbis pinb,6
rcall rutina3
sbis pinb,5
rcall rutina2
sbis pinb,4
rcall rutina1
ldi r16,0b11110111
out portb,r16
sbis pinb,7
rcall GNumro
sbis pinb,6
rcall igual
sbis pinb,5
rcall rutina0
sbis pinb,4
ldi tecla,0xEE
Esta subrutina se basa en la siguiente conexión del teclado:
; Informe10.asm
;
; Created: 10/08/2022 3:05:48
; Author : Hansel Lara
;
.def llevar=r19
.def aux1=r21
.def aux2=r22
.def tecla=r23
.def presionar=r20
.def cont=r24
.def NUM=r5
.def a=r6
.def b=r7
.def c=r8
.def d=r2
.def e=r15
.def f=r3
.def Unidad=r9
.def Decena=r10
.def Digito1=r11
.def Digito2=r12
.def contador=r18
.def aux=r13
.def decena_mil=r1
.dseg
.cseg
.org 0x00
ldi r16,0xFF
out ddra,r16
out ddrc,r16
in r16,mcucr
andi r16,0b11101111
out mcucr,r16
nop
clr Digito1
clr Digito2
reset:
;inicializacion de las variables
clr r16
clr Unidad ; Valor donde se almacena la unidad
clr Decena ; Valor donde se almacena la unidad
clr cont
ldi presionar,0xFF
rcall Visaluizar
Programa:
rjmp BARRIDOteclado
Code:
cpi cont,2
breq presionado
cpi cont,4
breq presionado
inc cont
rcall gtecla
rcall Visaluizar
rjmp Programa
igual:
rcall D_operacion
rcall Visaluizar
ldi cont,4
rjmp Programa
GNumro:
mov r16,num
cpi r16,1
breq guardarA
cpi r16,2
breq guardarB
cpi r16,3
breq guardarC
GuardarA:
mov a,Unidad
mov b,Decena
rjmp finalizarGN
GuardarB:
mov E,Unidad
mov F,Decena
rjmp finalizarGN
GuardarC:
mov C,Unidad
mov D,Decena
rjmp finalizarGN
finalizarGN:
ret
GTecla:
cpi cont,1
breq guardarUnidad
cpi cont,2
breq guardarDecena
guardarUnidad:
mov Unidad,tecla
rjmp finalizarG
guardarDecena:
mov Decena,Unidad
mov Unidad,tecla
rjmp finalizarG
finalizarG:
ret
presionado:
mov presionar,tecla
rcall Visaluizar
rjmp Programa
BARRIDOTeclado:
ldi tecla,0xFF
ldi r16,0b11111110
out portb,r16
sbis pinb,7
rcall rutinaA
sbis pinb,6
rcall rutina9
sbis pinb,5
rcall rutina8
sbis pinb,4
rcall rutina7
ldi r16,0b11111101
out portb,r16
sbis pinb,7
rcall rutinaB
sbis pinb,6
rcall rutina6
sbis pinb,5
rcall rutina5
sbis pinb,4
rcall rutina4
ldi r16,0b11111011
out portb,r16
sbis pinb,7
rcall rutinaC
sbis pinb,6
rcall rutina3
sbis pinb,5
rcall rutina2
sbis pinb,4
rcall rutina1
ldi r16,0b11110111
out portb,r16
sbis pinb,7
rcall GNumro
sbis pinb,6
rcall igual
sbis pinb,5
rcall rutina0
sbis pinb,4
ldi tecla,0xEE
cp presionar,tecla
breq presionado
mov presionar,tecla
cpi tecla,0xEE
breq superreseteo
cpi tecla,0xFF
breq presionado
RJMP CODE
superreseteo:
cpi cont,4
brne finalizars
clr r16
mov Digito2,r16
mov Digito1,r16
clr num
finalizars:
rjmp reset
rutinaA:
mov presionar,tecla
clr Unidad
clr Decena
clr cont
ldi r16,1
mov num,r16
ldi r16,10
mov Digito2,r16
ldi r16,13
mov Digito1,r16
rcall Visaluizar
rjmp Programa
rutinaB:
mov presionar,tecla
clr Unidad
clr Decena
clr cont
ldi r16,2
mov num,r16
ldi r16,11
mov Digito2,r16
ldi r16,13
mov Digito1,r16
rcall Visaluizar
rjmp Programa
rutinaC:
mov presionar,tecla
clr Unidad
clr Decena
clr cont
ldi r16,3
mov num,r16
ldi r16,12
mov Digito2,r16
ldi r16,13
mov Digito1,r16
rcall Visaluizar
rjmp Programa
Visaluizar:
;mostrar en el primer display
mov llevar,Unidad
ldi r17,0b01110011
out porta,r17
rcall buscar
out portc,r17
rcall Retardo
ret
Buscar:
ldi zh,high(tabla<<1)
ldi zl,low(tabla<<1)
add r30,llevar
clr llevar
adc r31,llevar
lpm r17,z
ret
rutina0:
mov r16,num
cpi r16,0
breq finalizar0
cpi r16,4
breq finalizar0
ldi tecla,0
finalizar0:
ret
rutina1:
mov r16,num
cpi r16,0
breq finalizar1
cpi r16,4
breq finalizar1
ldi tecla,1
finalizar1:
ret
rutina2:
mov r16,num
cpi r16,0
breq finalizar2
cpi r16,4
breq finalizar2
ldi tecla,2
finalizar2:
ret
rutina3:
mov r16,num
cpi r16,0
breq finalizar3
cpi r16,4
breq finalizar3
ldi tecla,3
finalizar3:
ret
rutina4:
mov r16,num
cpi r16,0
breq finalizar4
cpi r16,4
breq finalizar4
ldi tecla,4
finalizar4:
ret
rutina5:
mov r16,num
cpi r16,0
breq finalizar5
cpi r16,4
breq finalizar5
ldi tecla,5
finalizar5:
ret
rutina6:
mov r16,num
cpi r16,0
breq finalizar6
cpi r16,4
breq finalizar6
ldi tecla,6
finalizar6:
ret
rutina7:
mov r16,num
cpi r16,0
breq finalizar7
cpi r16,4
breq finalizar7
ldi tecla,7
finalizar7:
ret
rutina8:
mov r16,num
cpi r16,0
breq finalizar8
cpi r16,4
breq finalizar8
ldi tecla,8
finalizar8:
ret
rutina9:
mov r16,num
cpi r16,0
breq finalizar9
cpi r16,4
breq finalizar9
ldi tecla,9
finalizar9:
ret
Solucion_Del_Producto:
//unidad del segundo por unidad del primero
clr contador
clr llevar
mul c, a
rcall descomponer
mov llevar, contador //carry
mov xl, aux //primer valor
//unidad del segundo por decena del primero
clr contador
mul c, b
rcall descomponer
mov xh, aux
mov yl, contador
Suma_Productos:
clr llevar
clr contador
mov aux, xl
mov Unidad, aux //Tengo el valor de unidad del producto
clr contador
mov aux, xh //tengo el valor de decena del producto 81 => 8 y 1
mov aux1, yh
add aux, aux1
mov r0, aux
rcall descomponer
mov Decena, aux
mov llevar, contador
clr contador
mov aux, yl
mov aux1, zl
add aux, aux1
mov r0, aux
rcall descomponer
mov Digito1, aux
mov llevar, contador
clr contador
mov aux, zh
mov r0, aux
rcall descomponer
mov Digito2, aux
mov decena_mil, contador
Solucion_Ecuacion:
clr contador
clr llevar
mov aux, Unidad
add aux, e
add aux, c
mov r0, aux
rcall descomponer
mov Unidad, aux
Mov llevar, contador
clr contador
mov aux, Decena
add aux, f
add aux, d
mov r0, aux
rcall descomponer
mov Decena, aux
Mov llevar, contador
clr contador
mov aux, Digito1
mov r0, aux
rcall descomponer
mov Digito1, aux
Mov llevar, contador
clr contador
mov aux, Digito2
mov r0, aux
rcall Descomponer
mov Digito2, aux
mov decena_mil, Contador
ret
Luego se aplasta la tecla % (A) y se ingresa el número para poder guardar dicho número se ingresa
Enter que está representada por la tecla suma para la letra B es la tecla de multiplicación y para la
letra C es la tecla de menos, esto se muestra en las siguientes imágenes:
Cuando el pin7 del puerto B está en bajo y el pin7 del puerto D está en bajo se presenta el segundo
número como se muestra en la siguiente imagen
Para obtener el resultado se presiona la tecla igual (=) y se mostrará el resultado de la función:
𝑓(𝑥) = 𝐴 × 𝐶 + (𝐵 + 𝐶 ) = 93 × 54 + (32 + 54) = 5108
Y esto se muestra en la siguiente imagen:
Solo se podrá ingresar hasta el número 99 por cada letra en este caso si se ingresa 99 a cada letra el
resultado será
𝑓(𝑥) = 𝐴 × 𝐶 + (𝐵 + 𝐶 ) = 99 × 99 + (99 + 99) = 9999
• El barrido de teclado es de mucha utilidad dado que nos permite ingresar un número
especifico sin tener que ingresarlo de manera binaria, además con el teclado se puede crear
varios programas como una calculadora entre muchos más.
• Se noto que para realizar el barrido de teclado es necesario identificar que parámetros serán
entrada o salida dependiendo de eso se puede realizar varios metodos de barrido de teclado,
además cada vez que se complica la implementación de un programa como en este caso el
barrido es necesario dividirlo en subrutinas.
• Se evidencio que a través del teclado se facilita la transferencia de información de manera
visual entre el usuario y el hardware dado que las personas se encuentran mas familiarizadas
con el sistema decimal en base a esto se puede crear o implementar programas que sean
mucho mas amigables para muchas personas.
Recomendaciones: