Vous êtes sur la page 1sur 5

/*

* File: CONTADOR.c

* Author: Esteban

* Created on October 3, 2018, 3:26 PM

*/

// CONFIG

#pragma config FOSC = XT // Oscillator Selection bits (XT oscillator)

#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)

#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)

#pragma config BOREN = OFF // Brown-out Reset Enable bit (BOR disabled)

#pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming


Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)

#pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM
code protection off)

#pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off;
all program memory may be written to by EECON control)

#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection
off)

#define _XTAL_FREQ 4000000

#include <xc.h>

#include <stdio.h>

#include <math.h>
int imprimir(int Display[], int UDC[], int contTiempo)

for (int i=0 ; i < 3; i++)

TMR0=0;

while (TMR0 < 200)

PORTD = Display[UDC[i]];

PORTA = pow(2,i);

TMR0 = 0; //SETEO EL TMR0 PARA EL TIEMPO DE ESPERA EN EL BARRIDO DE


DISPLAY

while (TMR0 < 200)

PORTA = 0;

contTiempo++;

return contTiempo;

}
void main(void) {

int contTiempo = 0, unidades = 0, decenas = 0, centenas = 0;

int UDC[3]={{0},{0},{0}};

int Display[16]={{0b01000000},

{0b01111001},

{0b00100100},

{0b00110000},

{0b00011001},

{0b00010010},

{0b00000010},

{0b01111000},

{0b00000000},

{0b00010000},

{0b01111111},

{0b01111111},

{0b01111111},

{0b01111111},

{0b01111111},

{0b01111111}};

TRISD = 0; //AQUI SALDRÁ EL NUMERO QUE SE VA AMOSTRAR EN LOS DISPLAY

TRISA = 0; //EN EL PUERTO A SE VA A SELECCIONAR UE DISPLAY SE DEBE ENCENDER PARA


EL BARRIDO

ADCON1 = 6;
OPTION_REG=0b11010111; //cambio el preescalador y seteo el TMR0 para el barrido de
display

TMR0=0; //El timer0 PIC se inicia a 0 para comenzar a contar

while(1)

contTiempo = imprimir(Display, UDC, contTiempo);

if (contTiempo = 10000000)

contTiempo = 0; //Cuando el TMR0 ha llegado 10 veces a 255 entonces ya han


pasado 500ms y sumo el valor del display

unidades++;

if (unidades == 10)

decenas++;

unidades = 0;

if(decenas == 10)

centenas++;

decenas = 0;

if (unidades == 4 && decenas == 5 && centenas == 2)

{
unidades=0;

decenas=0;

centenas=0;

UDC[0]=unidades;

UDC[1]=decenas;

UDC[2]=centenas;

return;

Vous aimerez peut-être aussi