Ir ao conteúdo

Duvida!!!! relogio digital de tempo real com ds1307 e pic linguagem C


diego.maga

Posts recomendados

Postado

Ola acabei de montar o seguinte circuito que é nada mais que um relogio digital e funcionou perfeitamente porém gostaria de implementar dois ou mais botões para fazer o ajuste das horas porém já tentei de tudo e não consegui nada, alguem já fez isso.Utilizo o CCS COMPILER e o PROTEUS.

#include <16F876a.h>
#use delay(clock=4000000)
#include <dds1307.c>
#include <lcd_flexB.C>
#FUSES XT //Crystal osc <= 4mhz

//============================Variaveis utilizada===============================
int sec; //Variavel que armazena o valor dos segundos
int mim; //Variavel que armazena o valor dos minutos
int hrs; //Variavel que armazena o valor das horas
int dia; //Variavel que armazena o valor do dia
int mes; //Variavel que armazena o valor do mes
int ano; //Variavel que armazena o valor ano
int dow;
void main()
{
ds1307_init(); //Inicializa o componente ds1307
ds1307_set_date_time(9,9,10,5,23,57,00); //9/09/10 23:59:50
delay_ms(1000); //Aguarda 1000ms

lcd_init(); //Inicializa LCD
delay_ms(10); //Aguarda 10ms

while(true)
{
ds1307_get_date(dia,mes,ano,dow);
ds1307_get_time(hrs,mim,sec);
delay_ms(100);

lcd_gotoxy(1,1); printf(lcd_putc," Hora %02d:%02d:%02d",hrs,mim,sec);
lcd_gotoxy(1,2); printf(lcd_putc," Data %02d/%02d/%02d",dia,mes,ano);
}
}

Segue abaixo codigo da biblioteca do DS1307

////////////////////////////////////////////////////////////////////////////////

/// DS1307.C ///

/// Driver for Real Time Clock ///

/// ///

/// ds1307_init() - Enable oscillator without clearing the seconds register -///

/// used when PIC loses power and DS1307 run from 3V BAT ///

/// - Disable squarewave output ///

/// ///

/// ds1307_set_date_time(day,mth,year,dow,hour,mim,sec) Set the date/time ///

/// ///

/// ds1307_get_date(day,mth,year,dow) Get the date ///

/// ///

/// ds1307_get_time(hr,mim,sec) Get the time ///

/// ///

////////////////////////////////////////////////////////////////////////////////

#use i2c(Master,Fast,sda=PIN_C4,scl=PIN_C3)

BYTE bin2bcd(BYTE binary_value);

BYTE bcd2bin(BYTE bcd_value);

void ds1307_init(void)

{

BYTE seconds = 0;

i2c_start();

i2c_write(0xD0); // WR to RTC

i2c_write(0x00); // REG 0

i2c_start();

i2c_write(0xD1); // RD from RTC

seconds = bcd2bin(i2c_read(0)); // Read current "seconds" in DS1307

i2c_stop();

seconds &= 0x7F;

//delay_us(3);

i2c_start();

i2c_write(0xD0); // WR to RTC

i2c_write(0x00); // REG 0

i2c_write(bin2bcd(seconds)); // Start oscillator with current "seconds value

i2c_start();

i2c_write(0xD0); // WR to RTC

i2c_write(0x07); // Control Register 0777777777

i2c_write(0x80); // Disable squarewave output pin

i2c_stop();

}

void ds1307_set_date_time(BYTE day, BYTE mth, BYTE year, BYTE dow, BYTE hr, BYTE mim, BYTE sec)

{

sec &= 0x7F;

hr &= 0x3F;

i2c_start();

i2c_write(0xD0); // I2C write address

i2c_write(0x00); // Start at REG 0 - Seconds

i2c_write(bin2bcd(sec)); // REG 0

i2c_write(bin2bcd(mim)); // REG 1

i2c_write(bin2bcd(hr)); // REG 2

i2c_write(bin2bcd(dow)); // REG 3

i2c_write(bin2bcd(day)); // REG 4

i2c_write(bin2bcd(mth)); // REG 5

i2c_write(bin2bcd(year)); // REG 6

i2c_write(0x80); // REG 7 - Disable squarewave output pin

i2c_stop();

}

void ds1307_get_date(BYTE &day, BYTE &mth, BYTE &year, BYTE &dow)

{

i2c_start();

i2c_write(0xD0);

i2c_write(0x03); // Start at REG 3 - Day of week

i2c_start();

i2c_write(0xD1);

dow = bcd2bin(i2c_read() & 0x7f); // REG 3

day = bcd2bin(i2c_read() & 0x3f); // REG 4

mth = bcd2bin(i2c_read() & 0x1f); // REG 5

year = bcd2bin(i2c_read(0)); // REG 6

i2c_stop();

}

void ds1307_get_time(BYTE &hr, BYTE &mim, BYTE &sec)

{

i2c_start();

i2c_write(0xD0);

i2c_write(0x00); // Start at REG 0 - Seconds

i2c_start();

i2c_write(0xD1);

sec = bcd2bin(i2c_read() & 0x7f);

mim = bcd2bin(i2c_read() & 0x7f);

hr = bcd2bin(i2c_read(0) & 0x3f);

i2c_stop();

}

BYTE bin2bcd(BYTE binary_value)

{

BYTE temp;

BYTE retval;

temp = binary_value;

retval = 0;

while(1)

{

// Get the tens digit by doing multiple subtraction

// of 10 from the binary value.

if(temp >= 10)

{

temp -= 10;

retval += 0x10;

}

else // Get the ones digit by adding the remainder.

{

retval += temp;

break;

}

}

return(retval);

}

// Input range - 00 to 99.

BYTE bcd2bin(BYTE bcd_value)

{

BYTE temp;

temp = bcd_value;

// Shifting upper digit right by 1 is same as multiplying by 8.

temp >>= 1;

// Isolate the bits for the upper digit.

temp &= 0x78;

// Now return: (Tens * 8) + (Tens * 2) + Ones

return(temp + (temp >> 2) + (bcd_value & 0x0f));

}

post-779635-13884957840323_thumb.jpg

Postado

Que tal usar o meu código?

É grande, mas funciona q é uma beleza!


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

#include <16F628A.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_flex.C> //Inclusão da biblioteca de LCD. Obrigatório!

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

#define BOTAO1 PIN_A0 //Botão de escolha de ajuste das funçoes.
#define BOTAO_INCREMENTO PIN_A1 //Botão incremento de variáveis.
#define BOTAO_DECREMENTO PIN_A2 //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)!


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;
}
}
}
}
/*=============================================================================

Circuito:

circuitos.jpg

Foto:

ss102270.jpg

Falou

Postado

Obrigado pela resposta, mas é eu preciso usar o ds1307 para armazenar as horas mesmo desligando a energia eletrica, no seu caso programa, caso acabe a energia eletrica vou ter que setar novamente as horas entendeu.

Postado

Amigo, não trabalho com o CCS, mas interessei muito nesse código. Vou passar esta função para o mikroC.

Veja, você tem a função que passa parametros ao DS1307:

ds1307_set_date_time(9,9,10,5,23,57,00); //9/09/10 23:59:50

Pode perfeitamente criar variáveis para colocar como parametros desta forma:

int a, b, c, d, e, f, g;

ds1307_set_date_time(a,b,c,d,e,f,g); //9/09/10 23:59:50

Agora pode criar uma função para alterar o valor de a, b, c, d, e, f, g.

Talvez 2 botões, um para ajustar e o outro para confirmar e 1 para chamar a função:

ds1307_set_date_time(a,b,c,d,e,f,g); //9/09/10 23:59:50

Que irá gravar os dados alterados em suas variáveis no rtc.

Aguarde os feras no CCS para lhe ajudar com o restante.

Abraço.

Postado

Diego, para que o DS1307 continue contando as horas depois de desligado o circuito do microcontrolador, é necessário alimentar ele (ds1307) com uma bateria de pc:

ds1307_module_schematic.gif

DS1307_RTC_Module.jpg

Como expliquei, crie uma função que quando ela for chamada o programa fique preso à ela e enquanto você não ajustar todos os parâmetros dd/mm/aaaa hh/mm/ss .... ela não vai para outras tarefas. Quando ajustadas todas as variáveis, ao sair, chame a função que grava os valores "pre - setados"

É isso o que tem de fazer, pois a pior parte já está pronta (biblioteca), que é a gravação/leitura dos valores no lugar correto.

Att.

Postado

cara você conseguiu fazer?? eu tenho um codigo aqui q eu fiz cumo ds1307 meio grande mas funciona sim dah pra ajustar e td mais.. se quiser t passo

Postado

nao to em kza mas eu fiz uma matriz assim pegava os numeros e mandava gravar mais tarde posto o cod

#include <16f877a.H>
#fuses XT, NOWDT, NOPROTECT, BROWNOUT, PUT, NOLVP
#use delay(clock = 4000000)

#include <ds1307.c>
#include <lcd877.c>
int x,m,h,d,ms,a;
int8 hora,min,seg,dia,mes,ano,semana;

int min1[61]={
0x00,
0x01,
0x02,
0x03,
0x04,
0x05,
0x06,
0x07,
0x08,
0x09,
0x10,
0x11,
0x12,
0x13,
0x14,
0x15,
0x16,
0x17,
0x18,
0x19,
0x20,
0x21,
0x22,
0x23,
0x24,
0x25,
0x26,
0x27,
0x28,
0x29,
0x30,
0x31,
0x32,
0x33,
0x34,
0x35,
0x36,
0x37,
0x38,
0x39,
0x40,
0x41,
0x42,
0x43,
0x44,
0x45,
0x46,
0x47,
0x48,
0x49,
0x50,
0x51,
0x52,
0x53,
0x54,
0x55,
0x56,
0x57,
0x58,
0x59,
0x60,};






void gravar()
{
write_ds1307(0, seg);
write_ds1307(1, min);
write_ds1307(2,hora);
write_ds1307(3,semana);
write_ds1307(4,dia);
write_ds1307(5,mes);
write_ds1307(6,ano);
}
void ler()
{
seg=read_ds1307(0);
min=read_ds1307(1);
hora=read_ds1307(2);
semana=read_ds1307(3);
dia=read_ds1307(4);
mes=read_ds1307(5);
ano=read_ds1307(6);
}

void main()
{
set_tris_a(0b00000000);
set_tris_b(0b1111111);
m=0;
x=0;
h=0;
;

delay_ms(50);
init_ds1307(); // initial DS1307
seg=read_ds1307(0);
write_ds1307(0,seg & 0x7F); // enable oscillator(bit 7 =0)
lcd_init();

while(1)
{

if(!input(pin_b0)&(!input(pin_b1)))
{
x++;
delay_ms(200);
if(x==6)
{
x=0;
}
}

if((hora==0x02)&(min==0x03))
{
output_high(pin_a0);
}

switch(x)
{
case 0:


lcd_init();
ler();
lcd_gotoxy(1,1);
printf(lcd_putc, "Time: %02x:%02x:%02x",hora,min,seg);
lcd_gotoxy(1,2);
printf(lcd_putc,"Date: %02X/%02X/20%02x",dia,mes,ano);
delay_ms(50);


break;

case 1:
lcd_init();
lcd_gotoxy(5,1);
printf(lcd_putc, "Ajustar hora");
if(!input(pin_b1))
{

int z;
m=0;
z=0;
seg=0x00;
while(z==0)
{
delay_ms(200);
lcd_init();
lcd_gotoxy(3,1);
printf(lcd_putc, "Ajustar Dia");
lcd_gotoxy(3,2);
printf(lcd_putc,"Date : %02X/%02X/20%02X\r\n",dia,mes,ano);

if(!input(pin_b0))
{
delay_ms(100);
d++;
dia=min1[d];
if(d==31)
{
d=0;
}
}
if(!input(pin_b1))
{
delay_ms(100);
z=1;
}

}
z=0;

while(z==0)
{
delay_ms(200);
lcd_init();
lcd_gotoxy(3,1);
printf(lcd_putc, "Ajustar mes");
lcd_gotoxy(3,2);
printf(lcd_putc,"Date : %02X/%02X/20%02X\r\n",dia,mes,ano);

if(!input(pin_b0))
{
delay_ms(100);
ms++;
mes=min1[ms];
if(ms==12)
{
ms=0;
}
}
if(!input(pin_b1))
{
delay_ms(100);
z=1;
}

}
z=0;
while(z==0)
{

delay_ms(200);
lcd_init();
lcd_gotoxy(3,1);
printf(lcd_putc, "Ajustar ano");
lcd_gotoxy(3,2);
printf(lcd_putc,"Date : %02X/%02X/20%02X\r\n",dia,mes,ano);

if(!input(pin_b0))
{
delay_ms(100);
a++;
ano=min1[a];
if(a==40)
{
a=0;
}
}
if(!input(pin_b1))
{
delay_ms(100);
z=1;
}

}
z=0;

while(z==0)
{
delay_ms(200);
lcd_init();
lcd_gotoxy(3,1);
printf(lcd_putc, "Ajustar minutos");
lcd_gotoxy(3,2);

printf(lcd_putc, "Time : %02x:%02x:%02x\r\n",hora,min,seg);

if(!input(pin_b0))
{
delay_ms(100);
m++;
min=min1[m];
if(m==59)
{
m=0;
}
}
if(!input(pin_b1))
{
delay_ms(100);
z=1;
}

}
z=0;
delay_ms(100);
while(z==0)
{
lcd_init();
lcd_gotoxy(3,1);
printf(lcd_putc, "Ajustar horas");
lcd_gotoxy(3,2);

printf(lcd_putc, "Time : %02x:%02x:%02x\r\n",hora,min,seg);
if(!input(pin_b0))
{
delay_ms(180);
h++;
hora=min1[h];
if(h==23)
{
h=0;
}
}
if(!input(pin_b1))
{

delay_ms(100);
z=1;
gravar();
x=0;
}

}
}
break;

case 2:
lcd_init();
lcd_gotoxy(5,1);
printf(lcd_putc, "Contraste");

break;

case 3:
lcd_init();
lcd_gotoxy(5,1);
printf(lcd_putc, "Ajustar alarme");

break;
}

}
}

cara tá meio confuso qualquer coisa pergunte

  • Coordenador
Postado

Caso o autor do tópico necessite, o mesmo será reaberto, para isso deverá entrar em contato com a moderação solicitando o desbloqueio.

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

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

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!