Académique Documents
Professionnel Documents
Culture Documents
h>
#include <p18f4550.h>
#include <timers.h>
#include <delays.h>
#include <adc.h>
#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;
}
{
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 ();
}
{
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();
}