Sei sulla pagina 1di 12

1.

Hacer que el display realice una cuenta de 0 a 9 al presionar un pulsador;


al presionarlo otra vez, reiniciar la cuenta.
ANLISIS:
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, conectndolos al display.
Se escoge el puerto RA0 y se configura como salida, conectndolo con un
pulsador y una resistencia.
Se inicializan todos los puertos del PIC en 0.
Se empieza el cdigo con while(1) para crear un bucle infinito.
Se pone una condicin que permita iniciar la cuenta del display presionando
el pulsador. (RA0=1)
Al presionar el pulsador, se da inicio a la cuenta segn el siguiente cuadro:

RB1
RB2
RB3
RB4
RB5
RB6
RB7

Al terminar de mostrar cada nmero, el display tiene un retraso de 1


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

INICIO

TRISAbits.TRISA0=1;
TRISBbits.TRISB1=0;
TRISBbits.TRISB2=0;
TRISBbits.TRISB3=0;
TRISBbits.TRISB4=0;
TRISBbits.TRISB5=0;
TRISBbits.TRISB6=0;
TRISBbits.TRISB7=0;

NO

PORTAbits.RA0=0;
PORTBbits.RB1=0;
PORTBbits.RB2=0;
PORTBbits.RB3=0;
PORTBbits.RB4=0;
PORTBbits.RB5=0;
PORTBbits.RB6=0;
PORTBbits.RB7=0;

SI

NO

RA0=1

FIN

SI

RB1

RB2

RB3

RB4

RB5

RB6

RB7

CDIGO:
/*
* File:
Display_7.c
* Author: PERSONAL
*
* Created on 13 de julio de 2016, 08:39 AM
*/
// CONFIG
#pragma config FOSC = XT
oscillator)
#pragma config WDTE = OFF
#pragma config PWRTE = ON
Timer is enabled)
#pragma config CP = OFF
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)

// Oscillator Selection bits (XT


// Watchdog Timer (WDT disabled)
// Power-up Timer Enable bit (Power-up
// Code Protection bit (Code

{
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, conectndolos 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 harn
funcionar al display al presionarlos.
Se ponen condiciones diferentes para cada uno de los nmeros en el
Si:
display, estas condiciones deben indicar su un logic display est presionado
RA0 no est
o no.
Ejemplo: Nmero 1
if(RA0==0&&RA1==0&&RA2==0&&RA3==1)
{

presionado
RA1 no est
presionado
RA1 no est
presionado
RA3 est presionado

Entonces:
RB1, RB4, RB5, RB6,
RB7 estn apagados.

PORTBbits.RB1=0;
PORTBbits.RB2=1;
PORTBbits.RB3=1;
PORTBbits.RB4=0;
PORTBbits.RB5=0;
PORTBbits.RB6=0;
PORTBbits.RB7=0;
__delay_ms(1000);
}
La siguiente tabla muestra cmo deben estar presionados los logicstate para
mostrar los nmeros en el display.

0
1
2
3
4
5
6
7
8
9

RA0
8
0
0
0
0
0
0
0
0
1
1

RA1
4
0
0
0
0
1
1
1
1
0
0

RA2
2
0
0
1
1
0
0
1
1
0
0

RA3
1
0
1
0
1
0
1
0
1
0
1

Al terminar de mostrar cada nmero, 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)
#pragma config WDTE = OFF
#pragma config PWRTE = ON
Timer is enabled)
#pragma config CP = OFF
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;

// Oscillator Selection bits (XT


// Watchdog Timer (WDT disabled)
// Power-up Timer Enable bit (Power-up
// Code Protection bit (Code

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:

Potrebbero piacerti anche