Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Hora: V1-V3
Contenido
1.- Marco Teórico ................................................................................................................................ 3
2.- Algoritmo ....................................................................................................................................... 4
3.- Diagrama Eléctrico ......................................................................................................................... 7
4.- Evidencia Grafica ............................................................................................................................ 8
5.- Escriba y/o explique el código utilizado para los siguientes apartados ......................................... 9
CALCULADORA
A Tecla de suma
B Tecla de resta
C Tecla de multiplicación
D Tecla de división
* Establecer calculadora a 0
# Resultado
2.- Algoritmo
Subrutina de interrupción
Llamada de la interrupción (PA0 y PA1)
3.- Diagrama Eléctrico
Elabore un diagrama eléctrico que muestre todas las conexiones de los componentes
utilizados.
Nota: Una vez activadas las interrupciones (PA0, PA1, PB2 y PB3) en el apartado NVIC,
es necesario activar el modo y las resistencias de Pull-Up como se muestra en la imagen.
4.- Evidencia Grafica
Resta 6 – 4 = 2
Multiplicación 5 * 3 = 15
División 25 / 5 = 5
5.- Escriba y/o explique el código utilizado para los siguientes apartados
Escriba todos los prototipos de funciones utilizados en el código y describa en una línea
para que es cada prototipo.
1. void SystemClock_Config(void);
2. static void MX_GPIO_Init(void);
3. void displayNumber(int numero);
4. void setDisplay(int dig1, int dig2, int dig3, int dig4, int dig5, int
5. dig6, int dig7, int dig8);
6. void EXTI0_IRQHandler(void)
7. void EXTI1_IRQHandler(void)
8. void EXTI2_IRQHandler(void)
9. void EXTI3_IRQHandler(void)
10. void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
En la línea 3 se utiliza la función HAL_GetTick(); la cual lee el tiempo actual del sistema y lo
almacena en la variable acM.
En la línea 4 por medio de la sentencia if se verifica si han pasado más de 500 milisegundos desde
la última interrupción, lo que evita la detección de señales falsas debido al rebote del botón.
1. void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
2. {
3. acM = HAL_GetTick();
4. if (acM - anM > 500)
5. {
En la línea 14 se manda a llamar la función setDisplay con las con los parámetros definidos
de los dígitos correspondientes.
En la línea 17 se concatena el valor del digito 8, con el ánodo correspondiente al digito 8,
transfiriendo el valor correspondiente al ODR del puerto C.
En la línea 18 se mantiene este número por 1 milisegundo.
En la línea 19 se concatena el valor del digito 7, con el ánodo correspondiente al digito 8,
transfiriendo el valor correspondiente al ODR del puerto C.
En la línea 20 se mantiene este número por 1 milisegundo.
En la línea 21 se concatena el valor del digito 6, con el ánodo correspondiente al digito 8,
transfiriendo el valor correspondiente al ODR del puerto C.
En la línea 22 se mantiene este número por 1 milisegundo.
En la línea 23 se concatena el valor del digito 5, con el ánodo correspondiente al digito 8,
transfiriendo el valor correspondiente al ODR del puerto C.
En la línea 24 se mantiene este número por 1 milisegundo.
En la línea 25 se concatena el valor del digito 4, con el ánodo correspondiente al digito 8,
transfiriendo el valor correspondiente al ODR del puerto C.
En la línea 26 se mantiene este número por 1 milisegundo.
En la línea 27 se concatena el valor del digito 3, con el ánodo correspondiente al digito 8,
transfiriendo el valor correspondiente al ODR del puerto C.
En la línea 28 se mantiene este número por 1 milisegundo.
En la línea 29 se concatena el valor del digito 2, con el ánodo correspondiente al digito 8,
transfiriendo el valor correspondiente al ODR del puerto C.
En la línea 30 se mantiene este número por 1 milisegundo.
En la línea 31 se concatena el valor del digito 1, con el ánodo correspondiente al digito 8,
transfiriendo el valor correspondiente al ODR del puerto C.
En la línea 32 se mantiene este número por 1 milisegundo.
14. void setDisplay(int dig1, int dig2, int dig3, int dig4, int dig5, int
dig6, int dig7, int
15. dig8)
16. {
17. GPIOC->ODR=D8+numeros[dig8];
18. HAL_Delay(1);
19. GPIOC->ODR=D7+numeros[dig7];
20. HAL_Delay(1);
21. GPIOC->ODR=D6+numeros[dig6];
22. HAL_Delay(1);
23. GPIOC->ODR=D5+numeros[dig5];
24. HAL_Delay(1);
25. GPIOC->ODR=D4+numeros[dig4];
26. HAL_Delay(1);
27. GPIOC->ODR=D3+numeros[dig3];
28. HAL_Delay(1);
29. GPIOC->ODR=D2+numeros[dig2];
30. HAL_Delay(1);
31. GPIOC->ODR=D1+numeros[dig1];
32. HAL_Delay(1);
33. }
De la línea 11 a la 15, se localiza la decodificación de a letra D, la cual será utilizada para efectuar
una división. La variable operación, es la utilizada en la decodificación de # para imprimir los
resultados. En la variable num1 se almacena el valor que se le introduzca al teclado,
posteriormente el teclado es igualado a 0 mostrando ocho 0 en los displays.
De la línea 19 a la 23 se decodifica para la letra C de manera similar que para la letra D. La letra C
se utiliza para la multiplicación.
En la línea 47 se iguala la variable num2 al valor que tenga la variable teclado en el momento de la
interrupción, esta variable se utiliza para efectuar las operaciones.
En la línea 121 empieza el cuarto caso, es decir, la decodificación de la columna 1, empezando por
el renglón 4 hacia arriba.