You are on page 1of 8

Sistemas Digitales – IEE256

Laboratorio Nº (2)
Tarea para la casa

Nombre: Bercy Rimachi Vila

Código: 20121952

Horario: 0527
Nota de Laboratorio
(Para ser llenado por el JP)

Tarea para la casa (4)
Prueba escrita (4)
Programa de laboratorio
(12)
Nota

Firma JP

Simulación correcta:

No

Implementación en módulos:

No

Observación: _________________________________________________
_________________________________________________

26 de Septiembre del 2015

ENUNCIADO .

DIAGRAMA ESQUEMATICO: .

.

50. // espera unos 3 ciclos de reloj GPIO_PORTF_DIR_R &= ~0x02. // configura el pin como GPIO GPIO_PORTF_PUR_R |=0x02. // activa el pin para acceso digital } // fin Config_select // Programa principal void main (void){ . // configurar pines como GPIO GPIO_PORTE_PUR_R |=0x0B. // espera unos 3 ciclos de reloj GPIO_PORTF_DIR_R |= 0x01. // activar resistencias pull up GPIO_PORTF_DEN_R |=0x02.h> #include "lm3s6965. //fin de la cadena RIT128x96x4StringDraw(arr_lcd. // activar 3 pines para acceso digital } // fin Config_portE //se configura el pin0 del puerto F como salida LED donde se visualizara la //cuenta del programa void config_led(void) { unsigned long temp.DIAGRAMA DE FLUJO: CODIGO EN C: /***************************************************************************** * Nombre: Tarea 2 * Módulo: Stellaris LM3S6965 * Fecha: 25/09/2015 * Autor: Bercy Rimachi Vila * Codigo: 20121952 * Horario:0527 ******************************************************************************/ #include <stdint. // activar reloj en el puerto F temp = SYSCTL_RCGC2_R.h" //Funcion para mostrar los numero obtenidos en la cuenta en OLED void mostrarcuenta_OLED (int numero){ char arr_lcd[2].h" #include "rit128x96x4. 40. SYSCTL_RCGC2_R |= SYSCTL_RCGC2_GPIOE. // activar reloj para el puerto E temp= SYSCTL_RCGC2_R. // esperar algunos ciclos de reloj GPIO_PORTE_DIR_R &= ~0x0B. // activa el driver a 8mA GPIO_PORTF_DEN_R |=0x01. } //se configura 4 pines del puerte E que seran los pulsadores: UP. // configura el pin PF0 como salida GPIO_PORTF_AFSEL_R &= ~0x02. SYSCTL_RCGC2_R |= SYSCTL_RCGC2_GPIOF. SYSCTL_RCGC2_R |= SYSCTL_RCGC2_GPIOF. // activa el pin para acceso digital } // fin Config_led //se configura el pin1 del puerto F para que haga funcion de SELECT en //nuestro //programa void config_select(void) { unsigned long temp. // Configura 3 pines de entrada GPIO_PORTE_AFSEL_R &= ~0x0B. //se sumara el valor "numero" con 0 cuyo //valor en decimal es 48 y con tal suma mostraremos el valor que //queremos arr_lcd[1]='\0'. // configura el pin PF0 como salida GPIO_PORTF_AFSEL_R &= ~0x01. DOWN y //RIGHT void config_portE(void) { unsigned long temp . // activar resistencias pull up GPIO_PORTE_DEN_R |=0x0B. arr_lcd[0] = (numero)+'0'. 15). // activar reloj en el puerto F temp = SYSCTL_RCGC2_R. // configura el pin como GPIO GPIO_PORTF_DR8R_R |=0x01.

//se disminuye en 5 } else if ((temp&0x01)==0){ // analiza si se presionó UP do{ temp=GPIO_PORTE_DATA_R. // se inicializa la cuenta en 0 while (1){ temp2=GPIO_PORTF_DATA_R. }while (((temp2&0x02)==0)&&((temp&0x01)==0)). //se almacena en la variable temp el data del //puerto E. // espera a que se //suelten cuenta= cuenta . } while ((temp&0x08)==0).1.unsigned long temp. //se llama a la configuracion del pulsador SELECT GPIO_PORTF_DATA_R &= ~(0X01). temp2=GPIO_PORTF_DATA_R. GPIO_PORTF_DATA_R=~0x01. config_portE(). n < 800000. //se disminuye la cuenta en 1 } else if (cuenta>15){ // analiza si se desborda de 15 //se parpadea 2 veces GPIO_PORTF_DATA_R|=0x01. int numeroHex. //se aumenta en 1 la cuenta } else if ((temp&0x02)==0){ //analiza si se presiono DOWN do{ temp=GPIO_PORTE_DATA_R. //se espera que se suelte el pulsador //DOWN cuenta = cuenta . lo usaremos para saber el estado del pulsador SELECT temp=GPIO_PORTE_DATA_R. // se apaga el led cuenta=0. //se disminuye la cuenta en 1 } else if ((temp&0x08)==0){ //analiza si se presiono DOWN do{ temp=GPIO_PORTE_DATA_R. . //se almacena en la variable temp2 el data //del puerto F.n. } while ((temp&0x02)==0). //se llama a la configuracion del led config_select(). } while ((temp&0x01)==0).5. //numeroHex es la cuenta en Hex para mostrarlo en el led int cuenta. //se espera que se suelte el pulsador //UP cuenta= cuenta + 1. // espera a que se //suelten cuenta= cuenta + 5. for(n = 0.temp2. //se llama a la configuracion de los pulsadores config_led(). //se aumenta la cuenta 5 } else if (((temp2&0x02)==0)&&((temp&0x02)==0)){ //analiza si SELECT y //DOWN estan presionados do{ temp=GPIO_PORTE_DATA_R. lo usaremos para saber el estado de los pulsadores if (((temp2&0x02)==0)&&((temp&0x01)==0)){//analiza si SELECT y UP //estan presionados do{ temp=GPIO_PORTE_DATA_R. //se espera que se suelte el pulsador //DOWN cuenta = 0. n++). }while (((temp2&0x02)==0)&&((temp&0x02)==0)). //cuenta es el valor que modificaremos con los pulsadores RIT128x96x4Init(1000000). temp2=GPIO_PORTF_DATA_R.

//se asigna 5 break. GPIO_PORTF_DATA_R|=0x01. case 8: numeroHex=0x08. n++). //se asigna 15 a la cuenta } else if (cuenta<0){ // analiza si es negativo //se parpadea 1 vez GPIO_PORTF_DATA_R|=0x01.//se asigna 9 break. case 13: . case 11: numeroHex=0x12.//se asigna 6 break.//se asigna B break. n++). case 4: numeroHex=0x04. siendo este el valor que se sumara a 0 (0x30) para obtener los //valores de ASCII case 0: numeroHex=0x00. case 6: numeroHex=0x06. cuenta=0. n++). // se asigna 0 a la cuenta } switch (cuenta){ //evalua el estado de cuenta para asignar a //numeroHex.//se asigna A break.//se asigna 4 break. for(n = 0. n < 800000. n < 800000. case 7: numeroHex=0x07. case 1: numeroHex=0x01. //se asigna 2 break. case 3: numeroHex=0x03. //se asigna 1 break. n < 800000. case 10: numeroHex=0x11. GPIO_PORTF_DATA_R=~0x01. case 9: numeroHex=0x09. for(n = 0. n++). n < 800000. case 5: numeroHex=0x05. for(n = 0. case 2: numeroHex=0x02. cuenta=15.//se asigna C break.//se asigna 7 break. GPIO_PORTF_DATA_R=~0x01. //se asigna 0 break. n < 800000.//se asigna 8 break.for(n = 0. n++). case 12: numeroHex=0x13. for(n = 0.//se asigna 3 break.

//se llama a la funcion para que //muestre en OLED lo asignado en numeroHex }//fin de while } //fin de main (programa principal) .numeroHex=0x14. case 14: numeroHex=0x15.//se asigna E break.//se asigna D break. case 15: numeroHex=0x16. }//fin de switch mostrarcuenta_OLED(numeroHex).//se asigna F break.