Vous êtes sur la page 1sur 5

#include <stdio.

h>
#include <p18f4550.h>
#include <timers.h>
#include <delays.h>
#include <adc.h>

#pragma config FOSC = HS


#pragma config WDT=OFF // Desabilita o Watchdog Timer (WDT)
#pragma config PWRT = ON // Habilita o Power-up timer (PWRT)
#pragma config BORV = 1 // Voltagem do BOR � 4,33
#pragma config PBADEN = OFF // RBO 1,2,3 e 4 configurado como I/O digital
#pragma config LVP = OFF // Desabilita o Low Voltage Program
#pragma config LPT1OSC = ON // Timer 1 programado para operar no modo low power

typedef char int8; // garante que as vari�veis s�o de 8 bits (bytes)

//declara��o de vari�veis externas (IO)


#define Teclado PORTCB
#define Barramento_Lcd PORTD
#define RS PORTEbits.RE0
#define WR PORTEbits.RE2
#define E PORTEbits.RE1

// declara��o de vari�veis internas (mem�ria)

unsigned char Contador;


unsigned char Contador_Unidade0;
unsigned char Contador_Unidade1;
unsigned char Contador_Unidade2;
unsigned char Contador_Unidade3;
unsigned char Contador2;
unsigned char LeTec;
unsigned char Valor;

void ISR_alta_prioridade(void); // Prot�tipo da fun��o de interrup��o


void Configura_Sistema ();
void Inicia_Contagem ();
void Le_Teclado();

#pragma code int_alta=0x08 // vetor de interrup��o de alta prioridade


void int_alta (void)
{
_asm GOTO ISR_alta_prioridade
_endasm // Desvia o programa para a fun��o ISR_alta_prioridade
}

#pragma code
#pragma interrupt ISR_alta_prioridade
void ISR_alta_prioridade (void)
{
// Carrega o TMR1 com 32768
// Note que o TMR1L n�o � alterado, o que permite que ele continue incrementando
TMR1H = 0xD9;
TMR1L = 0x08; // Carrega o valor 0x80 para dentro do registro TMR1H
PIR1bits.TMR1IF = 0; // Limpa o flag bit
Contador ++;
if (Contador==200){
Contador = 0;
Contador_Unidade0++;
if (Contador_Unidade0>9){
Contador_Unidade0 = 0;
Contador_Unidade1++;
}
if (Contador_Unidade1>5){
Contador_Unidade0 = 0;
Contador_Unidade1 = 0;
Contador_Unidade2++;
}
if (Contador_Unidade2>9){
Contador_Unidade2 = 0;
Contador_Unidade3++;
}
if (Contador_Unidade3>5){
Contador_Unidade0 = 0;
Contador_Unidade1 = 0;
Contador_Unidade2 = 0;
Contador_Unidade3 = 0;
}
}

void Configura_Sistema ()

{
OpenADC(0x00,0x00,ADC_0ANA);
CloseADC();
TRISE=0b00000000;
TRISD=0b00000000;
TRISB=0b00001111;

OpenTimer1(TIMER_INT_OFF
&T1_8BIT_RW
&T1_SOURCE_INT
&T1_OSC1EN_ON
&T1_SYNC_EXT_OFF
&T1_PS_1_1);

PIR1bits.TMR1IF = 0;
IPR1bits.TMR1IP = 1;
PIE1bits.TMR1IE = 1;

RCONbits.IPEN=1;

INTCONbits.GIEH = 1;
INTCONbits.GIEL = 1;

TMR1H = 0xD9;
TMR1L = 0x08;

void Inicia_Contagem ()

{
Contador = 0;
Contador_Unidade0 = 0;
Contador_Unidade1 = 0;
Contador_Unidade2 = 0;
Contador_Unidade3 = 0;
Valor = PORTB;
}

void Delay_1200bps () // tempo = 833us -> 1200bps


{
int i;
for (i=0;i<400;i++) {}
}
void Envia_Comando_Lcd (unsigned char dado)

{
E=0; // LCD desabilitado
RS=0; //seleciona envio de instru��o
WR=0; //seleciona modo de escrita no lcd
Barramento_Lcd=dado;
E=1;
E=0; // habilita o LCD a receber a informa��o
Delay_1200bps ();
}

void Envia_Dado_Lcd (unsigned char dado)

{
E=0;
RS=1;
WR=0;
Barramento_Lcd=dado;
E=1;
E=0;
Delay_1200bps ();
}
void Inicializa_Lcd ()

{
Envia_Comando_Lcd (0x38);
Envia_Comando_Lcd (0x38);
Envia_Comando_Lcd (0x06);
Envia_Comando_Lcd (0x0E);
Envia_Comando_Lcd (0x01);
Envia_Comando_Lcd (0x0C);
}
void Le_Teclado()
{
Envia_Comando_Lcd (0xC0);
PORTB=0b10000000;
if (PORTBbits.RB0 == 1)
Envia_Dado_Lcd ('A');
Delay1KTCYx(20);
if (PORTBbits.RB1 == 1)
Envia_Dado_Lcd ('3');
Delay1KTCYx(20);
if (PORTBbits.RB2 == 1)
Envia_Dado_Lcd ('2');
Delay1KTCYx(20);
if (PORTBbits.RB3 == 1)
Envia_Dado_Lcd ('1');
Delay1KTCYx(20);
PORTB=0b01000000;
if (PORTBbits.RB0 == 1)
Envia_Dado_Lcd ('B');
Delay1KTCYx(20);
if (PORTBbits.RB1 == 1)
Envia_Dado_Lcd ('6');
Delay1KTCYx(20);
if (PORTBbits.RB2 == 1)
Envia_Dado_Lcd ('5');
Delay1KTCYx(20);
if (PORTBbits.RB3 == 1)
Envia_Dado_Lcd ('4');
Delay1KTCYx(20);
PORTB=0b00100000;
if (PORTBbits.RB0 == 1)
Envia_Dado_Lcd ('C');
Delay1KTCYx(20);
if (PORTBbits.RB1 == 1)
Envia_Dado_Lcd ('9');
Delay1KTCYx(20);
if (PORTBbits.RB2 == 1)
Envia_Dado_Lcd ('8');
Delay1KTCYx(20);
if (PORTBbits.RB3 == 1)
Envia_Dado_Lcd ('7');
Delay1KTCYx(20);
PORTB=0b00010000;
if (PORTBbits.RB0 == 1)
Envia_Dado_Lcd ('D');
Delay1KTCYx(20);
if (PORTBbits.RB1 == 1)
Envia_Dado_Lcd ('#');
Delay1KTCYx(20);
if (PORTBbits.RB2 == 1)
Envia_Dado_Lcd ('0');
Delay1KTCYx(20);
if (PORTBbits.RB3 == 1)
Envia_Dado_Lcd ('*');
Delay1KTCYx(20);
}
void main ()

Configura_Sistema ();
Inicia_Contagem ();
Inicializa_Lcd ();

while (1)
{

Envia_Comando_Lcd (0x85);
Envia_Dado_Lcd (Contador_Unidade3+0x30);
Envia_Dado_Lcd (Contador_Unidade2+0x30);
Envia_Dado_Lcd (':');
Envia_Dado_Lcd (Contador_Unidade1+0x30);
Envia_Dado_Lcd (Contador_Unidade0+0x30);
Delay1KTCYx(40);
Le_Teclado();
}

Vous aimerez peut-être aussi