You are on page 1of 12

UNIVERSIDAD CATOLICA SANTA MARIA

FACULTAD DE CIENCIAS E INGENIERÍAS


FÍSICAS Y FORMALES
PROGRAMA PROFESIONAL DE INGENIERIA MECÁNICA, MECÁNICA –
ELECTRICA Y MECATRÓNICA

CURSO:

MECANICA COMPUTACIONAL I
ALUMNO:

LÓPEZ CUNO, WILBER IVÁN


DOCENTE:

CUADROS MACHUCA, JUAN CARLOS

SEMESTRE: III GRUPO: 03

AREQUIPA – PERÚ

2016
1. Hacer que el display realice una cuenta de 0 a 9 al presionar un pulsador;
al presionarlo otra vez, reiniciar la cuenta.

ANÁLISIS:

 Se usa el PIC16F84A.
 Se escogen los puertos:

RB1: A RB2: B RB3: C

RB4: D RB5: E RB6: F

RB7: G

Y se configuran como salida, conectándolos al display.

 Se escoge el puerto RA0 y se configura como salida, conectándolo con un


pulsador y una resistencia.
 Se inicializan todos los puertos del PIC en 0.
 Se empieza el código con while(1) para crear un bucle infinito.
 Se pone una condición que permita iniciar la cuenta del display presionando
el pulsador. (RA0=1)
 Al presionar el pulsador, se da inicio a la cuenta según el siguiente cuadro:

0 1 2 3 4 5 6 7 8 9

RB1 1 0 1 1 0 1 1 1 1 1

RB2 1 1 1 1 1 0 0 1 1 1

RB3 1 1 0 1 1 1 1 1 1 1

RB4 1 0 1 1 0 1 1 0 1 1

RB5 1 0 1 0 0 0 1 0 1 0

RB6 1 0 0 0 1 1 1 0 1 1

RB7 0 0 1 1 1 1 1 0 1 1

 Al terminar de mostrar cada número, el display tiene un retraso de 1


segundo. (__delay_ms(1000))
DIAGRAMA DE FLUJO:

INICIO

TRISAbits.TRISA0=1; PORTAbits.RA0=0;
TRISBbits.TRISB1=0; PORTBbits.RB1=0;
TRISBbits.TRISB2=0; PORTBbits.RB2=0;
TRISBbits.TRISB3=0; PORTBbits.RB3=0;
TRISBbits.TRISB4=0; PORTBbits.RB4=0;
TRISBbits.TRISB5=0; PORTBbits.RB5=0;
TRISBbits.TRISB6=0; PORTBbits.RB6=0;
TRISBbits.TRISB7=0; PORTBbits.RB7=0;

NO SI
1

NO SI
RA0=1

0 1 2 3 4 5 6 7 8 9

1 0 1 1 0 1 1 1 1 1
RB1
1 1 1 1 1 0 0 1 1 1
RB2
1 1 0 1 1 1 1 1 1 1
RB3
1 0 1 1 0 1 1 0 1 1
RB4
1 0 1 0 0 0 1 0 1 0
RB5
1 0 0 0 1 1 1 0 1 1
RB6
0 0 1 1 1 1 1 0 1 1
RB7

FIN
CÓDIGO:
/*
* File: Display_7.c
* Author: PERSONAL
*
* Created on 13 de julio de 2016, 08:39 AM
*/

// CONFIG
#pragma config FOSC = XT // Oscillator Selection bits (XT
oscillator)
#pragma config WDTE = OFF // Watchdog Timer (WDT disabled)
#pragma config PWRTE = ON // Power-up Timer Enable bit (Power-up
Timer is enabled)
#pragma config CP = OFF // Code Protection bit (Code
protection disabled)

#include <xc.h>
#define _XTAL_FREQ 4000000

void main(void)
{
TRISAbits.TRISA0=1;
TRISBbits.TRISB1=0;
TRISBbits.TRISB2=0;
TRISBbits.TRISB3=0;
TRISBbits.TRISB4=0;
TRISBbits.TRISB5=0;
TRISBbits.TRISB6=0;
TRISBbits.TRISB7=0;
PORTAbits.RA0=0;
PORTBbits.RB1=0;
PORTBbits.RB2=0;
PORTBbits.RB3=0;
PORTBbits.RB4=0;
PORTBbits.RB5=0;
PORTBbits.RB6=0;
PORTBbits.RB7=0;
while(1)
{
if (RA0==1)
{
PORTBbits.RB1=1;
PORTBbits.RB2=1;
PORTBbits.RB3=1;
PORTBbits.RB4=1;
PORTBbits.RB5=1;
PORTBbits.RB6=1;
PORTBbits.RB7=0;
__delay_ms(1000);
PORTBbits.RB1=0;
PORTBbits.RB2=1;
PORTBbits.RB3=1;
PORTBbits.RB4=0;
PORTBbits.RB5=0;
PORTBbits.RB6=0;
PORTBbits.RB7=0;
__delay_ms(1000);

PORTBbits.RB1=1;
PORTBbits.RB2=1;
PORTBbits.RB3=0;
PORTBbits.RB4=1;
PORTBbits.RB5=1;
PORTBbits.RB6=0;
PORTBbits.RB7=1;
__delay_ms(1000);

PORTBbits.RB1=1;
PORTBbits.RB2=1;
PORTBbits.RB3=1;
PORTBbits.RB4=1;
PORTBbits.RB5=0;
PORTBbits.RB6=0;
PORTBbits.RB7=1;
__delay_ms(1000);

PORTBbits.RB1=0;
PORTBbits.RB2=1;
PORTBbits.RB3=1;
PORTBbits.RB4=0;
PORTBbits.RB5=0;
PORTBbits.RB6=1;
PORTBbits.RB7=1;
__delay_ms(1000);

PORTBbits.RB1=1;
PORTBbits.RB2=0;
PORTBbits.RB3=1;
PORTBbits.RB4=1;
PORTBbits.RB5=0;
PORTBbits.RB6=1;
PORTBbits.RB7=1;
__delay_ms(1000);

PORTBbits.RB1=1;
PORTBbits.RB2=0;
PORTBbits.RB3=1;
PORTBbits.RB4=1;
PORTBbits.RB5=1;
PORTBbits.RB6=1;
PORTBbits.RB7=1;
__delay_ms(1000);
PORTBbits.RB1=1;
PORTBbits.RB2=1;
PORTBbits.RB3=1;
PORTBbits.RB4=0;
PORTBbits.RB5=0;
PORTBbits.RB6=0;
PORTBbits.RB7=0;
__delay_ms(1000);

PORTBbits.RB1=1;
PORTBbits.RB2=1;
PORTBbits.RB3=1;
PORTBbits.RB4=1;
PORTBbits.RB5=1;
PORTBbits.RB6=1;
PORTBbits.RB7=1;
__delay_ms(1000);

PORTBbits.RB1=1;
PORTBbits.RB2=1;
PORTBbits.RB3=1;
PORTBbits.RB4=1;
PORTBbits.RB5=0;
PORTBbits.RB6=1;
PORTBbits.RB7=1;
__delay_ms(1000);

}
}
}

ESQUEMA DEL CIRCUITO:


2. Hacer que el display realice una cuenta de 0 a 9 usando 4 logic state.

ANALISIS:

 Se usa el PIC16F84A.
 Se escogen los puertos:

RB1: A RB2: B RB3: C

RB4: D RB5: E RB6: F

RB7: G

Y se configuran como salida, conectándolos al display.

 Se escogen los puertos:

RA0 RA1 RA2 RA3

 Y se configuran como entrada, conectando cada uno con un logic state.


 Se inicializan todos los puertos del PIC en 0.
 Cada logic state tiene un valor predeterminado de 1, 2, 4, y 8; que harán
funcionar al display al presionarlos.
 Se ponen condiciones diferentes para cada uno de los números en el
display, estas condiciones deben indicar su un logic display está presionado
o no.

Ejemplo: Número 1
Si:
if(RA0==0&&RA1==0&&RA2==0&&RA3==1) RA0 no está presionado
{ RA1 no está presionado
PORTBbits.RB1=0; RA1 no está presionado
PORTBbits.RB2=1; RA3 está presionado
PORTBbits.RB3=1;
PORTBbits.RB4=0; Entonces:
PORTBbits.RB5=0; RB1, RB4, RB5, RB6, RB7
PORTBbits.RB6=0; están apagados.
PORTBbits.RB7=0; RB2, RB3 están encendidos.
__delay_ms(1000);
}

 La siguiente tabla muestra cómo deben estar presionados los logicstate para
mostrar los números en el display.
RA0 RA1 RA2 RA3
8 4 2 1
0 0 0 0 0
1 0 0 0 1
2 0 0 1 0
3 0 0 1 1
4 0 1 0 0
5 0 1 0 1
6 0 1 1 0
7 0 1 1 1
8 1 0 0 0
9 1 0 0 1

 Al terminar de mostrar cada número, el display tiene un retraso de 1


segundo. (__delay_ms(1000))
CODIGO:

/*
* File: DISPLAY_logic.c
* Author: PERSONAL
*
* Created on 13 de julio de 2016, 11:43 AM
*/

// CONFIG
#pragma config FOSC = XT // Oscillator Selection bits (XT
oscillator)
#pragma config WDTE = OFF // Watchdog Timer (WDT disabled)
#pragma config PWRTE = ON // Power-up Timer Enable bit (Power-up
Timer is enabled)
#pragma config CP = OFF // Code Protection bit (Code
protection disabled)

#include <xc.h>
#define _XTAL_FREQ 4000000

void main(void)
{
TRISAbits.TRISA0=1;
TRISAbits.TRISA1=1;
TRISAbits.TRISA2=1;
TRISAbits.TRISA3=1;
TRISBbits.TRISB1=0;
TRISBbits.TRISB2=0;
TRISBbits.TRISB3=0;
TRISBbits.TRISB4=0;
TRISBbits.TRISB5=0;
TRISBbits.TRISB6=0;
TRISBbits.TRISB7=0;
PORTAbits.RA0=0;
PORTAbits.RA1=0;
PORTAbits.RA2=0;
PORTAbits.RA3=0;
PORTBbits.RB1=0;
PORTBbits.RB2=0;
PORTBbits.RB3=0;
PORTBbits.RB4=0;
PORTBbits.RB5=0;
PORTBbits.RB6=0;
PORTBbits.RB7=0;

if(RA0==0&&RA1==0&&RA2==0&&RA3==0)//0
{
PORTBbits.RB1=1;
PORTBbits.RB2=1;
PORTBbits.RB3=1;
PORTBbits.RB4=1;
PORTBbits.RB5=1;
PORTBbits.RB6=1;
PORTBbits.RB7=0;
__delay_ms(1000);
}

if(RA0==0&&RA1==0&&RA2==0&&RA3==1)//1
{
PORTBbits.RB1=0;
PORTBbits.RB2=1;
PORTBbits.RB3=1;
PORTBbits.RB4=0;
PORTBbits.RB5=0;
PORTBbits.RB6=0;
PORTBbits.RB7=0;
__delay_ms(1000);
}

if(RA0==0&&RA1==0&&RA2==1&&RA3==0)//2
{
PORTBbits.RB1=1;
PORTBbits.RB2=1;
PORTBbits.RB3=0;
PORTBbits.RB4=1;
PORTBbits.RB5=1;
PORTBbits.RB6=0;
PORTBbits.RB7=1;
__delay_ms(1000);
}

if(RA0==0&&RA1==0&&RA2==1&&RA3==1)//3
{
PORTBbits.RB1=1;
PORTBbits.RB2=1;
PORTBbits.RB3=1;
PORTBbits.RB4=1;
PORTBbits.RB5=0;
PORTBbits.RB6=0;
PORTBbits.RB7=1;
__delay_ms(1000);
}

if(RA0==0&&RA1==1&&RA2==0&&RA3==0)//4
{
PORTBbits.RB1=0;
PORTBbits.RB2=1;
PORTBbits.RB3=1;
PORTBbits.RB4=0;
PORTBbits.RB5=0;
PORTBbits.RB6=1;
PORTBbits.RB7=1;
__delay_ms(1000);
}
if(RA0==0&&RA1==1&&RA2==0&&RA3==1)//5
{
PORTBbits.RB1=1;
PORTBbits.RB2=0;
PORTBbits.RB3=1;
PORTBbits.RB4=1;
PORTBbits.RB5=0;
PORTBbits.RB6=1;
PORTBbits.RB7=1;
__delay_ms(1000);
}

if(RA0==0&&RA1==1&&RA2==1&&RA3==0)//6
{
PORTBbits.RB1=1;
PORTBbits.RB2=0;
PORTBbits.RB3=1;
PORTBbits.RB4=1;
PORTBbits.RB5=1;
PORTBbits.RB6=1;
PORTBbits.RB7=1;
__delay_ms(1000);
}

if(RA0==0&&RA1==1&&RA2==1&&RA3==1)//7
{
PORTBbits.RB1=1;
PORTBbits.RB2=1;
PORTBbits.RB3=1;
PORTBbits.RB4=0;
PORTBbits.RB5=0;
PORTBbits.RB6=0;
PORTBbits.RB7=0;
__delay_ms(1000);
}

if(RA0==1&&RA1==0&&RA2==0&&RA3==0)//8
{
PORTBbits.RB1=1;
PORTBbits.RB2=1;
PORTBbits.RB3=1;
PORTBbits.RB4=1;
PORTBbits.RB5=1;
PORTBbits.RB6=1;
PORTBbits.RB7=1;
__delay_ms(1000);
}

if(RA0==1&&RA1==0&&RA2==0&&RA3==1)//9
{
PORTBbits.RB1=1;
PORTBbits.RB2=1;
PORTBbits.RB3=1;
PORTBbits.RB4=1;
PORTBbits.RB5=0;
PORTBbits.RB6=1;
PORTBbits.RB7=1;
__delay_ms(1000);
}
}

ESQUEMA DEL CIRCUITO:

You might also like