INSTITUTO POLITÉCNICO NACIONAL

ESCUELA SUPERIOR DE INGENIERÍA MECÁNICA Y ELÉCTRICA

Ingeniería en Comunicaciones y Electrónica
LABORATORIO DE MICROPROCESADORES PRÁCTICA 8: “TECLADO MATRICIAL”

GRUPO 6CM1

ALUMNO Hernández López Audomaro
Profesor: M. en C. Armando Martínez Ríos

Fecha de realización de la práctica:

lunes 23 de mayo de MMXII

ciclos. Para lo anterior. que vino a ilustrar la manera en que se debía codificar y depurar el código mismo. El número de notas a programas (establecer en el teclado) era de mínimo siete.OBJETIVO Desarrollar un programa para leer un teclado matricial MATERIAL Y DISPOSITIVOS USADOS         Protoboard PIC 18F4550 Tablilla de desarrollo LED’s y resistores Dip-switch Teclado matricial 4x4 Cable USB y conector tipo “B” Software MPLab y HID Bootloader DESARROLLO DE LA PRÁCTICA La práctica requirió la implementación de notas musicales (escogidas libremente por el estudiante) que involucraran la utilización de retardos. que a pesar de no especificarse en el PDF de la práctica enviado por el docente. este último comentó lo del mínimo durante las sesiones de clase. y más dentro del contexto del microprocesador. el proceso de establecimiento del algoritmo. Se puede observar el diagrama de flujo en la página siguiente. fue fundamental y definitorio para el código a construir. .

ALGORITMO / DIAGRAMA DE FLUJO Inicio PuertoD-->Entrada/Salida Puerto B-->Salida Análisis 1era columna PortD-->0110 Tecla oprimida en columna SI Retardo de nota correspondiente NO Análisis 2a col PortD-->0101 Tecla oprimida en columna SI Retardo de nota correspondiente NO Análisis 3ra col PortD-->0011 NO Tecla oprimida en columna SI Retardo de nota correspondiente NO .

RD2=1. TRISD=0xF0. // Default all pins to digital while (1) { // ***************************************Columna 1 PORTDbits. if (PORTD==0xE6) { PORTBbits.A continuación. reta(2000). funciones. PORTBbits. el código en C correspondiente a la práctica.RB7=0. } else if (PORTD==0xB6) { PORTBbits.RB7=1.RB7=1.RB7=0. void EEPROM_Write(unsigned char address. PORTBbits. void reta(int).unsigned char databyte). reta(3620).RD3=0. PORTBbits. reta(1105). etc) /************* DECLARACION DE LOS PROTOTIPOS *******************************/ void YourHighPriorityISRCode(void). } .RB7=1.RB7=1. } else if (PORTD==0xD6) { PORTBbits. mInitAllSwitches(). reta(110). void YourLowPriorityISRCode(void). PORTBbits. } else if (PORTD==0x76) { PORTBbits. Solo se incluyen fragmentos representativos del programa (prototipos. PORTDbits.RD1=1. reta(2560).RB7=0. PORTDbits. TRISB=0x00.RB7=0. PORTDbits.RD0=0. reta(2000). //******************************************************************************** ******** void main (void) { ADCON1 |= 0x0F. reta(2560). reta(3620).

PORTDbits. PORTBbits. reta(1815).RB7=1. reta(2500).RB7=0.RB7=1. reta(2150).RD2=0. reta(3200).RB7=0. reta(1810).RD3=1. PORTBbits. reta(1270). PORTDbits. } else if (PORTD==0xDA) { PORTBbits. } else if (PORTD==0xBA) { PORTBbits. reta(2940). } // ************************************************Columna 3 PORTDbits.RB7=1. PORTBbits. } else if (PORTD==0xDC) { PORTBbits.RD0=0.RB7=0. reta(1430).RD1=0. PORTDbits. } else if (PORTD==0xBC) { PORTBbits. reta(2940).RD2=1.RD1=1. reta(3200). reta(1430).RB7=1. reta(1270). PORTBbits. PORTDbits. reta(2150). if (PORTD==0xEC) { PORTBbits. PORTBbits.RB7=1.RB7=1.RD0=0.RB7=0. PORTBbits. } else if (PORTD==0x7A) { PORTBbits.RB7=0. PORTDbits.RB7=0. reta(2500). PORTDbits.// ********************************************Columna 2 PORTDbits. if (PORTD==0xEA) { PORTBbits. PORTBbits.RB7=0.RD3=1.RB7=1. } else if (PORTD==0x7C) { .

TMR0IF=0. PORTBbits. for(y=0.TMR0IF==0) {} } } /********************************************************************************* / DIAGRAMA ELÉCTRICO .y<=x.PORTBbits.TMR0ON=1.RB7=1. while (INTCONbits.y++) { TMR0H=0xFF.RB7=0. lo que facilita su implementación INTCONbits. } } } void reta (int x)*****************************************Retardo de 1 microsegundo { int y. reta(1220). // Esta configuración permite establecer la función "reta" en 1 microseg. T0CONbits. reta(1220). TMR0L=0xF4. T0CON=0x00.

Dispositivos. por mencionar algunas). Señales. Para finalizar. sacrificando cierta eficiencia del código que afortunadamente no es notoria para esta demostración. permite un desarrollo más fluido del proyecto. no son congruentes con alguna nota musical en particular. Por otro lado. por lo que todo deriva en un código más ameno y entendible. es preciso mencionar que los retardos implementados para la “nota” de salida correspondiente a cada tecla. que siendo de alto nivel. . el trabajar con elementos de diferentes asignaturas en un solo trabajo (Microprocesadores. la programación en C nos permitió una notoria reducción líneas y una depuración más sencilla al momento del análisis de cada función y condición. así como los cuidados y el análisis necesarios llevados a cabo para cumplir eficientemente con lo requerido por la práctica.DIAGRAMA A BLOQUES Teclado Matricial Bocina 0.25 W 18F4550 PORTD 18F4550 PORTB Amplificador 2N222 CONCLUSIONES Y OBSERVACIONES Esta práctica nos da la bienvenida a la programación de microprocesadores (en este caso de la familia 18FXXXX) mediante lenguaje C. sino sirven como demostración para ejecutar diferentes tonos para cada tecla. fue interesante todo lo elaborado para la adecuada realización de la práctica. Además.

Sign up to vote on this title
UsefulNot useful