Professional Documents
Culture Documents
CURSO:
MECANICA COMPUTACIONAL I
ALUMNO:
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:
RB7: G
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
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);
}
}
}
ANALISIS:
Se usa el PIC16F84A.
Se escogen los puertos:
RB7: G
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
/*
* 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);
}
}