Escolar Documentos
Profissional Documentos
Cultura Documentos
#use delay(clock=4000000)
#include <lcd.C>
//
.
//
//
//
//
//
//
D0 enable
D1
D2
D4
D5
D6
D7
rs
rw
D4
D5
D6
D7
/*=====================
Meu Botes:
=======================*/
#define BOTAO1 PIN_B0
#define BOTAO_INCREMENTO PIN_B1
#define BOTAO_DECREMENTO PIN_B2
/*=====================
Minhas variveis:
=======================*/
int16 q=0;
timer1.
int s=0;
int m=0;
int h=0;
int contador=0;
int ndia_semana=1;
int dia=1;
int mes=1;
int16 ano=2010;
int16 q1,q2;
float p;
/*=====================
Minha Interrupo:
=======================*/
#int_TIMER1
void temp1s(void)
{
q++;
set_timer1 (3036);
}
//Interrupo do Timer1
//Funco. O que dever ser feiro a cada interrupo.
//Varivel q incrementada a cada estouro do Timer1
//Preload do Timer1
/*=====================
O programa Principal:
=======================*/
void main()
{
lcd_init();
/*lcd_gotoxy (2,1);
lcd_putc("Projeto Tempo:");
delay_ms(2000);
lcd_gotoxy (2,2);
lcd_putc("Com PIC16F877A");
delay_ms(2000);
lcd_putc ("\f");
lcd_gotoxy (2,1);
lcd_putc("Promo Version");
delay_ms(2000);
lcd_gotoxy (6,2);
lcd_putc ("1.10");
delay_ms(2000);
lcd_putc ("\f");
lcd_gotoxy (7,1);
lcd_putc("by");
lcd_gotoxy (2,2);
lcd_putc ("Matheus Koala");
delay_ms(3000);
lcd_putc ("\f");
delay_ms(1000);
lcd_gotoxy (1,1);
lcd_putc ("Iniciando");
lcd_gotoxy (10,1);
lcd_putc (".");
delay_ms(500);
lcd_gotoxy (11,1);
lcd_putc (".");
delay_ms(500);
lcd_gotoxy (12,1);
lcd_putc (".");
delay_ms(500);
lcd_gotoxy (13,1);
lcd_putc (".");
delay_ms(500);
lcd_gotoxy (14,1);
lcd_putc (".");
delay_ms(500);
lcd_gotoxy (15,1);
lcd_putc (".");
delay_ms(500);
lcd_gotoxy (16,1);
lcd_putc (".");
delay_ms(500);
lcd_putc ("\f");
delay_ms(1000);*/
setup_adc_ports(AN0);
setup_adc(ADC_CLOCK_DIV_8);
set_adc_channel(0);
delay_us(20);
//Canal 0 analgico
//Fuente de reloj RC
//Habilitacin canal0
while(TRUE)
//Loop Principal
{
/*=====================================================================
Teste do boto de ajuste. A medida que precionado, a varivel contador
incrementa e as diversas funes de ajustes podem ser efetuadas. So 6
funes de ajuste, HORA, MINUTO, DIA DA SEMANA,DIA DO MES, MS e ANO. A
cada ajuste de uma funo, o menu principal com todas as informaes
mostrado.
=====================================================================*/
if (input(BOTAO1))
{
delay_ms (100);
if (contador>11)
{
contador=0;
}
contador++;
//Teste do boto.
//Para evitar retorno.
//Se maior q 11, zera o contador.
}
switch (contador)
//Depois de incrementada, a varivel CONTADOR
{
//assume um dos casos a seguir:
case 1:
//Menu de ajuste da HORA.
{
if (input (BOTAO_INCREMENTO)) //Incrementa a varivel H(hora).
{
delay_ms (75);
h++;
if (h>23)
{
h=0;
}
}
if (input (BOTAO_DECREMENTO)) //Decrementa a varivel H(hora).
{
delay_ms (75);
h--;
if (h==255)
{
h=23;
a,
}
}
q=0;
//Quando se est em algum menu, Q resetada.
lcd_gotoxy (1,1);
//V para a coluna 1 e linha 1 do LCD.
printf (lcd_putc, "\fAjuste Hora:%02u", h); //Escreva com 2 digitos
a varivel H.
delay_ms (100);
//Mantenha na tela.
break;
}
case 3:
//Menu de ajuste do MINUTO. Idem ao anterior.
{
if (input (BOTAO_INCREMENTO))
{
delay_ms (75);
m++;
if (m>59)
{
m=0;
}
//Diferente aqui.
}
if (input (BOTAO_DECREMENTO))
{
delay_ms (75);
m--;
if (m==255)
{
m=59;
}
//Igual aqui.
}
q=0;
lcd_gotoxy (1,1);
printf (lcd_putc, "\fAjuste Minuto:%02u", m);
delay_ms (100);
break;
}
case 5:
//Menu de ajuste do DIA DA SEMANA.
{
/*=====================================================================
Ajuste do DIA DA SEMANA. A funo ficou meio bagunada. Pesquisarei
um pouco sobre como trasformar uma string numa varivel. S
consegui fazer isso com 1 (um) caracter, mas no o ideal. Depois disso,
provavelmente essa parte ficar mais enxuta.
A funo ficou assim: Uma varivel chamada ndia_semana(nmero dia da
semana) incrementada de 1 a 7. Cada nmero associado a um dia da
semana. 1 Domingo, 2 Segunda e assim por diante. Se ndia_semana for
maior que 7, ela resetada em 1 de novo. Utilizei a funo SWITCH para
associar cada nmero de 1 a 7 a cada dia da semana.
=====================================================================*/
if (input (BOTAO_INCREMENTO))
{
delay_ms (100);
ndia_semana++;
if (ndia_semana>7)
{
ndia_semana=1;
}
}
if (input (BOTAO_DECREMENTO))
{
delay_ms (75);
ndia_semana--;
if (ndia_semana==255)
{
ndia_semana=7;
}
}
switch (ndia_semana)
{
case 1:
{
lcd_gotoxy (1,1);
printf (lcd_putc, "\fDia da Semana:\nDomingo ");
delay_ms (100);
break;
}
case 2:
{
lcd_gotoxy (1,1);
printf (lcd_putc, "\fDia da Semana:\nSegunda ");
delay_ms (100);
break;
}
case 3:
{
lcd_gotoxy (1,1);
printf (lcd_putc, "\fDia da Semana:\nTerca ");
delay_ms (100);
break;
}
case 4:
{
lcd_gotoxy (1,1);
printf (lcd_putc, "\fDia da Semana:\nQuarta ");
delay_ms (100);
break;
}
case 5:
{
lcd_gotoxy (1,1);
printf (lcd_putc, "\fDia da Semana:\nQuinta ");
delay_ms (100);
break;
}
case 6:
{
lcd_gotoxy (1,1);
printf (lcd_putc, "\fDia da Semana:\nSexta ");
delay_ms (100);
break;
}
case 7:
{
lcd_gotoxy (1,1);
printf (lcd_putc, "\fDia da Semana:\nSabado ");
delay_ms (100);
break;
}
}
q=0;
break;
}
case 7:
//Menu de ajuste do DIA DO MES. Idem ao caso 3.
{
if (input (BOTAO_INCREMENTO))
{
delay_ms (100);
dia++;
if (dia>31)
{
dia=1;
}
}
if (input (BOTAO_DECREMENTO))
{
delay_ms (75);
dia--;
if (dia==0)
{
dia=31;
}
}
q=0;
lcd_gotoxy (1,1);
printf (lcd_putc, "\fAjuste dia Mes: \n%02u", dia);
delay_ms (100);
break;
}
case 9:
//Menu de ajuste do MES. Idem ao caso 3.
{
if (input (BOTAO_INCREMENTO))
{
delay_ms (100);
mes++;
if (mes>12)
{
mes=1;
}
}
if (input (BOTAO_DECREMENTO))
{
delay_ms (75);
mes--;
if (mes==0)
{
mes=12;
}
}
q=0;
lcd_gotoxy (1,1);
printf (lcd_putc, "\fAjuste Mes:
delay_ms (100);
break;
\n%02u", mes);
}
case 11:
//Menu de ajuste do ANO. Idem ao caso 3.
{
if (input (BOTAO_INCREMENTO))
{
delay_ms (100);
ano++;
if (ano>2099)
{
ano=2000;
}
}
if (input (BOTAO_DECREMENTO))
{
delay_ms (75);
ano--;
if (ano==1999)
{
ano=2099;
}
}
q=0;
lcd_gotoxy (1,1);
printf (lcd_putc, "\fAjuste Ano:
delay_ms (100);
break;
\n%Lu", ano);
}
default:
{
s=q/2;
if (s==60)
{
q=0;
s=0;
m++;
}
if (m>59)
{
m=0;
h++;
}
if (h>23)
//Se H(horas) for maior q 23, reset. DIA DA SEMANA
{
//e DIA DO MS incrementam.
dia++;
ndia_semana++;
h=0;
}
if (ndia_semana>7)
{
ndia_semana=1;
}
switch (ndia_semana) //Os DIAS DA SEMANA s alteram sozinhos no menu
{
//principal. Idem ao caso 5.
case 1:
{
lcd_gotoxy (1,1);
printf (lcd_putc, "DOMINGO ");
delay_ms (100);
break;
}
case 2:
{
lcd_gotoxy (1,1);
printf (lcd_putc, "SEGUNDA ");
delay_ms (100);
break;
}
case 3:
{
lcd_gotoxy (1,1);
printf (lcd_putc, "TERCA
delay_ms (100);
break;
}
");
case 4:
{
lcd_gotoxy (1,1);
printf (lcd_putc, "QUARTA ");
delay_ms (100);
break;
}
case 5:
{
lcd_gotoxy (1,1);
printf (lcd_putc, "QUINTA ");
delay_ms (100);
break;
}
case 6:
{
lcd_gotoxy (1,1);
printf (lcd_putc, "SEXTA
delay_ms (100);
break;
}
");
case 7:
{
lcd_gotoxy (1,1);
printf (lcd_putc, "SABADO ");
delay_ms (100);
break;
}
}
switch (mes)
dias.
mais enxuta.
case (1):
{
if (dia>31)
{
dia=1;
mes++;
}
break;
}
case 2:
{
if (dia>28)
{
dia=1;
mes++;
}
break;
}
case (3):
{
if (dia>31)
{
dia=1;
mes++;
}
break;
}
case (4):
{
if (dia>30)
{
dia=1;
mes++;
}
break;
}
case (5):
{
if (dia>31)
{
dia=1;
mes++;
}
break;
}
case (6):
{
if (dia>30)
{
dia=1;
mes++;
}
break;
}
case (7):
{
if (dia>31)
{
dia=1;
mes++;
}
break;
}
case (8):
{
if (dia>31)
{
dia=1;
mes++;
}
break;
}
case (9):
{
if (dia>30)
{
dia=1;
mes++;
}
break;
}
case (10):
{
if (dia>31)
{
dia=1;
mes++;
}
break;
}
case (11):
{
if (dia>30)
{
dia=1;
mes++;
}
break;
}
case (12):
{
if (dia>31)
{
dia=1;
mes=1;
ano++;
}
break;
}
}
q1 = read_adc();
p = (q1*5.0*100)/1024;
//Lectura canal0
lcd_gotoxy (9,1);
printf (lcd_putc, "%02u:%02u:%02u\n%02u/%02u/%Lu %2.1f%C", h, m, s,
dia, mes, ano,p,0xdf);
delay_ms (100);
break;
}
}
}
}