Ir ao conteúdo

Relógio e calendário com pic 16f628 super simples


cls23

Posts recomendados

Postado

q bom q gostou quando eu mandar eu posto ai no site beleza !!

tenho um outro aqui só q ta com problemas na data e na hora (codigo fonte) preciso de ajuda com esse aqui ta me dando dor de cabeça pois peguei na net o codigo em HEX só q eu queria alterar modificar algumas funçoes só q eu nem sei como começar !!!! se alguem me ajudar a dar umas dicas fiko grato

!!

Falou

Postado

Então, fiz um relogio aqui esses dias. O meu ta funcionando perfeitamente. è tão simples quanto esse ai. No meu posso te ajudar se você ficar com duvida porque fui eu quem programou.

Screenshot:

semttulonw.jpg

Código v1.1 (usem a vontade se quiserem)


Programa teste para fazer um relógio com o 16F877A
Implementada funções que mostram data e dia da semana
Teste promo_version v1.1
by MatheusLPS (Koala)
=============================================================================*/

#include <16F877A.h> //O PIC utilizado, obrigatório!
#FUSES NOWDT //Sem Watch dog, evitando reset
#FUSES XT //Crystal de oscilação igual a 4mhz
#FUSES PUT //Tempo de início do PIC
#FUSES NOPROTECT //Codigo sem proteção de leitura, software livre!
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection


#use delay(clock=4000000) // Definição do clock utilizado. Obrigatório!

#include <lcd.C> //Inclusão da biblioteca de LCD. Obrigatório!

// D0 enable //Pinos utilizados pelo LCD. Podem ser alterados.
// D1 rs
// D2 rw
// D4 D4
// D5 D5
// D6 D6
// D7 D7

/*=====================
Meu Botões:
=======================*/

#define BOTAO1 PIN_B0 //Botão de escolha de ajuste das funçoes.
#define BOTAO_INCREMENTO PIN_B1 //Botão incremento de variáveis.
#define BOTAO_DECREMENTO PIN_B2 //Botão de decremento das variáveis.
//Foram utilizados resistores pull-up e
//pull-down em todos os botões para
//evitar ruídos.

/*=====================
Minhas variáveis:
=======================*/

int16 q=0; //Variável que incrementa a cada 0.5s dentro da interupção do timer1.
int s=0; //Variável dos segundos, incrementa na metade de q.
int m=0; //Variável dos minutos. 0 a 59
int h=0; //Variável das horas. 0 a 23.
int contador=0; //Variável de controle do botão de ajuste.
int ndia_semana=1; //Variável dos dias da semana, é associada a uma string.
int dia=1; //Variável dos dias do mês. 0 a 31.
int mes=1; //Variável dos meses. 0 a 12.
int16 ano=2010; //Variável dos anos. 2000 a 2099.

/*=====================
Minha Interrupção:
=======================*/

#int_TIMER1 //Interrupção do Timer1
void temp1s(void) //Funcão. O que deverá ser feiro a cada interrupão.
{
q++; //Variável q incrementada a cada estouro do Timer1
set_timer1 (3036); //Preload do Timer1
}

/*=====================
O programa Principal:
=======================*/
void main()
{
lcd_init(); //Inicializa o LCD (obrigatório)!

lcd_gotoxy (2,1); //Coluna 6, linha 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_timer_1 (T1_INTERNAL | T1_DIV_BY_8); //Configuração do Timer1 para clock interno = 1E6 dividido por 8
set_timer1 (3036); //Preload do Timer1
enable_interrupts(INT_TIMER1); //Habilita interrupção timer1
enable_interrupts(global); //habilita interrupcão global

while(TRUE) //Loop Principal
{
/*=====================================================================
Teste do botão de ajuste. A medida que é precionado, a variável contador
incrementa e as diversas funções de ajustes podem ser efetuadas. São 6
funções de ajuste, HORA, MINUTO, DIA DA SEMANA,DIA DO MES, MÊS e ANO. A
cada ajuste de uma função, o menu principal com todas as informações é
mostrado.
=====================================================================*/

if (input(BOTAO1)) //Teste do botão.
{
delay_ms (100); //Para evitar retorno.
if (contador>11) //Se maior q 11, zera o contador.
{
contador=0;
}

contador++; //Incremento da variável contador.
}

switch (contador) //Depois de incrementada, a variável CONTADOR
{ //assume um dos casos a seguir:
case 1: //Menu de ajuste da HORA.
{
if (input (BOTAO_INCREMENTO)) //Incrementa a variável H(hora).
{
delay_ms (75);
h++;

if (h>23) //Se a hora for maior que 23, reset.
{
h=0;
}
}

if (input (BOTAO_DECREMENTO)) //Decrementa a variável H(hora).
{
delay_ms (75);
h--;

if (h==255) //H é uma variável inteira de 8 bits.
{ //Quando é decrementada para um valor
h=23; //menor que zero, se torna 255. Ou seja,
} //deve voltar para 23.
}

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 variável 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) //Diferente aqui.
{
m=0;
}
}

if (input (BOTAO_DECREMENTO))
{
delay_ms (75);
m--;

if (m==255) //Igual aqui.
{
m=59;
}
}

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 função ficou meio bagunçada. Pesquisarei
um pouco sobre como trasformar uma string numa variável. Só
consegui fazer isso com 1 (um) caracter, mas não é o ideal. Depois disso,
provavelmente essa parte ficará mais enxuta.

A função ficou assim: Uma variável chamada ndia_semana(número dia da
semana) é incrementada de 1 a 7. Cada número é 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 função SWITCH para
associar cada número 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; //Variável q sempre resetada nos menus.
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: \n%02u", mes);
delay_ms (100);
break;
}

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: \n%Lu", ano);
delay_ms (100);
break;
}

default: //Menu principal. Mostra todas as informações.
{
s=q/2; //A variável Q incrementa a 2Hz, então os segundos
//devem ser a metade.
if (s==60) //Se for igual a 60, reset em Q e S. M incrementa.
{
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 MÊS 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, "sábado ");
delay_ms (100);
break;
}
}

switch (mes) //Para saber se um mês possui 31, 30 ou 28 dias.
{ //Numa versão mais nova, farei essa rotina 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;
}
}

lcd_gotoxy (9,1);
printf (lcd_putc, "%02u:%02u:%02u\n%02u/%02u/%Lu Koala", h, m, s, dia, mes, ano);
delay_ms (100);
break;
}
}
}
}
/*=============================================================================

flws

Postado

Po gostei desse ai eim !!!

tenho um pic 16f877a rolando aqui

vou fazer algums testes

brigadão !!!

valeu!

Ola matheus !!

tenho outro q eu pegei na net !!

só q eu não temho o codigo fonte dele q eu peguei o arquivo . HEX pronto jha tem como altera-lo?

aqui tem umas fotos dele

eu não quero me desfazer deste projeto ficou muito bom q estragou foi o codigo !!:unsure:

post-771509-13884956856715_thumb.jpg

post-771509-13884956857127_thumb.jpg

post-771509-13884956857415_thumb.jpg

Postado

Então, já li em algum lugar q não me lembro onde que tem um aplicativo que pega o .hex e transforma pra assembly. Mas não é uma boa ideia.

Sem falar que a programação, pelo menos para mim, é mais complicada.

Falou

Postado
  Projetos_afg disse:
Para relógios mais profissionais, é melhor usar um RTC acoplado com uma bateria, já que ele é de uma maior precisão, e libera o PIC para qualquer outra tarefa.

Excelente dica. Eu mesmo ainda não usei um.

valeu

  • 4 semanas depois...
Postado

Bom dia amigo, sou um novo membro desse clube.

Por favor , tenho uma dúvida, a respeito do relógio e calendário, q você montou e é fácil.

O ci PIC16F628, precisa de um programa ou só montar o circuito q ele funciona.

PS: vi a tabela hex-decimal, á necessidade de gravação, se houver, como faço isso.

Obrigado por enguanto

Bom dia amigo.

você saberia me informar como faria para colocar o programa desse relogio.

Há necessidade de equipamentos específicos, como faria esse relógio funcionar ou é só montar o circuito.!!!!!!!!!!!!!!!!!!!!!!!!!!

Tenho dúvidas.

Abraço.

Obrigado

  • 3 semanas depois...
Postado

eu comprei um desses foi la também

otimo produto !!!!

pessoal tenho outra duvida queria saber como eu faço pra fazer um relogio com mesmo pic q com display de led 7 segmentos ????

queria fazer um só não sei nem começar

valeu !!

  • 3 meses depois...
Postado

Boa noite! Como ficaria o código em c, para que o cronometro inicie quando eu apertar uma tecla rb0 e parar quando eu apertar rb1, fico muito grato pela ajuda!

Circuito: jpg.gif

  • 4 semanas depois...
Postado
  ejss disse:
Boa noite! Como ficaria o código em c, para que o cronometro inicie quando eu apertar uma tecla rb0 e parar quando eu apertar rb1, fico muito grato pela ajuda!

Circuito:

Boa noite MatheuLPS tentei através do codigo que voce fez para o seu relógio mas não consegui implementar uma tecla para iniciar a contagem e também não consegui implementar uma tecla para parar a contagem estou verde em programação porém a vontade de amadurecer é grande, me ajude neste desafio de implementação das teclas. abaixo segue alterações que fiz no código que voce disponibilisou:

#include <16F877A.h> //O PIC utilizado, obrigatório!

#FUSES NOWDT //Sem Watch dog, evitando reset

#FUSES XT //Crystal de oscilação igual a 4mhz

#FUSES PUT //Tempo de início do PIC

#FUSES NOPROTECT //Codigo sem proteção de leitura, software livre!

#FUSES NODEBUG //No Debug mode for ICD

#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O

#FUSES NOCPD //No EE protection

#use delay(clock=4000000) // Definição do clock utilizado. Obrigatório!

#include <lcd.C> //Inclusão da biblioteca de LCD. Obrigatório!

// D0 enable //Pinos utilizados pelo LCD. Podem ser alterados.

// D1 rs

// D2 rw

// D4 D4

// D5 D5

// D6 D6

// D7 D7

/*=====================

Meu Botões:

=======================*/

#define BOTAO1 PIN_B0 //Botão de escolha de ajuste das funções.

#define BOTAO_INCREMENTO PIN_B1 //Botão incremento de variáveis.

#define BOTAO_DECREMENTO PIN_B2 //Botão de decremento das variáveis.

//Foram utilizados resistores pull-up e

//pull-down em todos os botões para

//evitar ruídos.

/*=====================

Minhas variáveis:

=======================*/

int16 q=0; //Variável que incrementa a cada 0.5s dentro da interupção do timer1.

int s=0; //Variável dos segundos, incrementa na metade de q.

int m=0; //Variável dos minutos. 0 a 59

int h=0; //Variável das horas. 0 a 23.

int contador=0; //Variável de controle do botão de ajuste.

/*int ndia_semana=1; //Variável dos dias da semana, é associada a uma string.

int dia=1; //Variável dos dias do mês. 0 a 31.

int mes=1; //Variável dos meses. 0 a 12.

int16 ano=2010; //Variável dos anos. 2000 a 2099.*/

/*=====================

Minha Interrupção:

=======================*/

#int_TIMER1 //Interrupção do Timer1

void temp1s(void) //Funcão. O que deverá ser feiro a cada interrupão.

{

q++; //Variável q incrementada a cada estouro do Timer1

set_timer1 (3036); //Preload do Timer1

}

/*=====================

O programa Principal:

=======================*/

void main()

{

lcd_init(); //Inicializa o LCD (obrigatório)!

lcd_gotoxy (2,1); //Coluna 6, linha 1.

lcd_putc("Projeto Tempo:");

delay_ms(200);

lcd_putc ("\f");

delay_ms(100);

setup_timer_1 (T1_INTERNAL | T1_DIV_BY_8); //Configuração do Timer1 para clock interno = 1E6 dividido por 8

set_timer1 (3036); //Preload do Timer1

enable_interrupts(INT_TIMER1); //Habilita interrupção timer1

enable_interrupts(global); //habilita interrupcão global

while(TRUE) //Loop Principal

{

if (input(BOTAO1)) //Teste do botão.

{

delay_ms (100); //Para evitar retorno.

if (contador>11) //Se maior q 11, zera o contador.

{

contador=0;

}

contador++; //Incremento da variável contador.

}

switch (contador) //Depois de incrementada, a variável CONTADOR

{ //assume um dos casos a seguir:

case 1: //Menu de ajuste da HORA.

{

if (input (BOTAO_INCREMENTO)) //Incrementa a variável H(hora).

{

delay_ms (75);

h++;

if (h>23) //Se a hora for maior que 23, reset.

{

h=0;

}

}

if (input (BOTAO_DECREMENTO)) //Decrementa a variável H(hora).

{

delay_ms (75);

h--;

if (h==255) //H é uma variável inteira de 8 bits.

{ //Quando é decrementada para um valor

h=23; //menor que zero, se torna 255. Ou seja,

} //deve voltar para 23.

}

}

case 3: //Menu de ajuste do MINUTO. Idem ao anterior.

{

if (input (BOTAO_INCREMENTO))

{

delay_ms (75);

m++;

if (m>59) //Diferente aqui.

{

m=0;

}

}

if (input (BOTAO_DECREMENTO))

{

delay_ms (75);

m--;

if (m==255) //Igual aqui.

{

m=59;

}

}

}

default: //Menu principal. Mostra todas as informações.

{

s=q/2; //A variável Q incrementa a 2Hz, então os segundos

//devem ser a metade.

if (s==60) //Se for igual a 60, reset em Q e S. M incrementa.

{

q=0;

s=0;

m++;

}

if (m>59)

{

m=0;

h++;

}

lcd_gotoxy (1,1);

printf (lcd_putc, "Inicio: ");

lcd_gotoxy (9,1);

printf (lcd_putc, "%02u:%02u:%02u", h, m, s,);

delay_ms (100);

break;

}

}

}

}

Postado

Utilize esse circuito:

semttulovjw.png

E esse código:

#include <16F877A.h> //O PIC utilizado, obrigatório!

#FUSES NOWDT //Sem Watch dog, evitando reset
#FUSES XT //Crystal de oscilação igual a 4mhz
#FUSES PUT //Tempo de início do PIC
#FUSES NOPROTECT //Codigo sem proteção de leitura, software livre!
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection

#use delay(clock=4000000) // Definição do clock utilizado. Obrigatório!
#include <lcd.C> //Inclusão da biblioteca de LCD. Obrigatório!
// D0 enable //Pinos utilizados pelo LCD. Podem ser alterados.
// D1 rs
// D2 rw
// D4 D4
// D5 D5
// D6 D6
// D7 D7
/*=====================
Meu Botões:
=======================*/
#define BOTAO_1 PIN_B0 //Botão de escolha de ajuste das funções.
#define BOTAO_2 PIN_B1 //Botão incremento de variáveis.
#define BOTAO_3 PIN_B2 //Botão de escolha de ajuste das funções.


//Foram utilizados resistores pull-up e
//pull-down em todos os botões para
//evitar ruídos.

/*=====================
Minhas variáveis:
=======================*/
int16 q=0; //Variável que incrementa a cada 0.5s dentro da interupção do timer1.
int s=0; //Variável dos segundos, incrementa na metade de q.
int m=0; //Variável dos minutos. 0 a 59
int h=0; //Variável das horas. 0 a 23.

/*int ndia_semana=1; //Variável dos dias da semana, é associada a uma string.
int dia=1; //Variável dos dias do mês. 0 a 31.
int mes=1; //Variável dos meses. 0 a 12.
int16 ano=2010; //Variável dos anos. 2000 a 2099.*/
/*=====================
Minha Interrupção:
=======================*/
#int_TIMER1 //Interrupção do Timer1
void temp1s(void) //Funcão. O que deverá ser feiro a cada interrupão.
{
q++; //Variável q incrementada a cada estouro do Timer1
set_timer1 (3036); //Preload do Timer1
}
/*=====================
O programa Principal:
=======================*/
void main()
{
lcd_init(); //Inicializa o LCD (obrigatório)!

lcd_gotoxy (2,1); //Coluna 6, linha 1.
lcd_putc("Projeto Tempo:");
delay_ms(1000);
lcd_putc ("\f");
delay_ms(1000);

setup_timer_1 (T1_INTERNAL | T1_DIV_BY_8); //Configuração do Timer1 para clock interno = 1E6 dividido por 8
set_timer1 (3036); //Preload do Timer1
disable_interrupts(INT_TIMER1); //Habilita interrupção timer1
enable_interrupts(global); //habilita interrupcão global

while(TRUE) //Loop Principal
{

if (input(BOTAO_1)) //Teste do botão.
{
delay_ms (100); //Para evitar retorno.

enable_interrupts(INT_TIMER1); //Habilita interrupção timer1
}

if (input(BOTAO_2)) //Teste do botão.
{
delay_ms (100); //Para evitar retorno.

disable_interrupts(INT_TIMER1); //Habilita interrupção timer1
}

if (input(BOTAO_3)) //Teste do botão.
{
delay_ms (100); //Para evitar retorno.
q=0;
s=0;
m=0;
h=0;
}

s=q/2; //A variável Q incrementa a 2Hz, então os segundos
//devem ser a metade.

if (s==60) //Se for igual a 60, reset em Q e S. M incrementa.
{
q=0;
s=0;
m++;
}

if (m>59)
{
m=0;
h++;
}

lcd_gotoxy (1,1);
printf (lcd_putc, "Inicio: ");
lcd_gotoxy (9,1);
printf (lcd_putc, "%02u:%02u:%02u", h, m, s,);
delay_ms (100);
}
}

Não deixei bonito o código, mas funciona.

Falou

Postado

Boa noite MatheuLPS, simulei no proteus o código que você postou, funcionou legal, agora a pergunta é, daria para implementar os milésimos de segundos neste cronometro? Se der como você faria a implementação?

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Mostrar mais  

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

Mostrar mais  
×
×
  • Criar novo...