Ir ao conteúdo
  • Cadastre-se

Reginaldo99

Membro Júnior
  • Posts

    3
  • Cadastrado em

  • Última visita

Reputação

0
  1. adicionado 1 minuto depois Obrigado Isadora Ferraz, ajudou muito!!! adicionado 3 minutos depois Obrigado Bommu Perneta, estou comentando depois eu posta pra você verificar. adicionado 4 minutos depois
  2. Eu encontrei na net e mexi um pouco. No lcd aparece dia, mês, hora e minuto, mas para despertar só ajusta hora e minuto. Eu preciso ajustar o alarme também para mês e dia.
  3. Sou estudante de técnico em Eletrônica e estou fazendo um relógio com pic18f4550, com RTC DS1307 e com memoria 24C32A. consegui um exemplo na net, que funciona bem. Porém no ajuste do alarme ele só ajusta às horas e minutos e eu preciso que seja ajustável o alarme em dia, mês, horas e minutos.Quem puder me ajudar eu agradeço. Segue o código em Mikroc: //Incluções de arquivos header (Cabeçalho) /******************************************************************************/ #include "DS1307_I2C_lib.h" #include "Menu_Lcd_lib.h" #include "24C32A_I2C_lib.h" //Definições (Apelidos) /******************************************************************************/ #define B_mais Button(&PORTB,4,10,0) #define B_menos Button(&PORTB,5,10,0) #define B_enter Button(&PORTB,6,10,0) #define B_voltar Button(&PORTB,7,10,0) //Variáveis Globais /******************************************************************************/ bit flag_teste; char cont_alt = 0; sbit LCD_RS at RC0_bit; sbit LCD_EN at RC1_bit; sbit LCD_D4 at RD4_bit; sbit LCD_D5 at RD5_bit; sbit LCD_D6 at RD6_bit; sbit LCD_D7 at RD7_bit; sbit LCD_RS_Direction at TRISC0_bit; sbit LCD_EN_Direction at TRISC1_bit; sbit LCD_D4_Direction at TRISD4_bit; sbit LCD_D5_Direction at TRISD5_bit; sbit LCD_D6_Direction at TRISD6_bit; sbit LCD_D7_Direction at TRISD7_bit; //Funções Secundárias /******************************************************************************/ void InitTimer0(); void Interrupt(); //Função Principal void main() { // Função Obrigatória da linguagem C //Variáveis Locais short listaMenu = 0, cont = 0; bit flag_mais, flag_menos, flag_enter, flag_voltar; //Configuração dos TRIS ADCON1 = 0x0F; CMCON = 0x07; TRISA = 0xFF; TRISB = 0xFF; TRISC = 0XFF; TRISD = 0xFF; TRISE = 0xFF; //Inicialização das funções Lcd_Init(); Lcd_Cmd(_LCD_CLEAR); Lcd_Cmd(_LCD_CURSOR_OFF); Lcd_Out(1,3,"ALIMENTADOR"); delay_ms(4000); Lcd_Out(2,3,"PET'S 3P"); delay_ms(2000); Lcd_Cmd(_LCD_CLEAR); I2C1_Init(100000); v_hora = read24C32A(0x00,1); v_min = read24C32A(0x00,3); //Condições iniciais das saídas TRISD3_bit = 0; RD3_bit = 0; TRISD2_bit = 0; RD2_bit = 0; InitTimer0(); delay_ms(1000); menu_principal(1); for(;;) //Loop inf. { if(B_mais && !flag_mais) { //inicio flag_mais = 1; }//final if(!B_mais && flag_mais) { //inicio if(getMenu() == 0) { listaMenu++; if(listaMenu > 4) listaMenu = 1; menu_principal(listaMenu); } if((getMenu() == 2) && (cont == 1)) { char aux_rtc = read_I2C_DS1307_Dia(); aux_rtc++; if(aux_rtc > 31) aux_rtc = 1; write_I2C_DS1307_Dia(aux_rtc); setMenu(2); Lcd_Out(1,12,"Dia"); } if((getMenu() == 2) && (cont == 2)) { char aux_rtc = read_I2C_DS1307_Mes(); aux_rtc++; if(aux_rtc > 12) aux_rtc = 1; write_I2C_DS1307_Mes(aux_rtc); setMenu(2); Lcd_Out(1,12,"Mes"); } if((getMenu() == 2) && (cont == 3)) { char aux_rtc = read_I2C_DS1307_Horas(); aux_rtc++; if(aux_rtc > 23) aux_rtc = 0; write_I2C_DS1307_Horas(aux_rtc); setMenu(2); Lcd_Out(1,12,"Hor"); } if((getMenu() == 2) && (cont == 4)) { char aux_rtc = read_I2C_DS1307_Minutos(); aux_rtc++; if(aux_rtc > 59) aux_rtc = 0; write_I2C_DS1307_Minutos(aux_rtc); setMenu(2); Lcd_Out(1,12,"Min"); } if((getMenu() == 2) && (cont == 5)) { char aux_rtc = read_I2C_DS1307_DiaDaSemana(); aux_rtc++; if(aux_rtc > 7) aux_rtc = 0; write_I2C_DS1307_DiaDaSemana(aux_rtc); setMenu(2); Lcd_Out(1,12,"Sem"); } if((getMenu() == 2) && (cont == 6)){ Lcd_Out(1,12," "); cont = 1; } if((getMenu() == 3) && (cont == 1)){ v_hora++; if(v_hora > 23) v_hora = 0; setMenu(3); Lcd_Out(2,12,"Hor"); } if((getMenu() == 3) && (cont == 2)){ v_min++; if(v_min > 59) v_min = 0; setMenu(3); Lcd_Out(2,12,"Min"); } if((getMenu() == 3) && (cont == 3)){ Lcd_Out(2,12," "); cont = 1; } flag_mais = 0; }//final if(B_menos && !flag_menos) { //inicio flag_menos = 1; }//final if(!B_menos && flag_menos) { //inicio if(getMenu() == 0) { listaMenu--; if(listaMenu < 1) listaMenu = 4; menu_principal(listaMenu); } if((getMenu() == 2) && (cont == 1)) { char aux_rtc = read_I2C_DS1307_Dia(); aux_rtc--; if(aux_rtc < 1) aux_rtc = 31; write_I2C_DS1307_Dia(aux_rtc); setMenu(2); Lcd_Out(1,12,"Dia"); } if((getMenu() == 2) && (cont == 2)) { char aux_rtc = read_I2C_DS1307_Mes(); aux_rtc--; if(aux_rtc < 1) aux_rtc = 12; write_I2C_DS1307_Mes(aux_rtc); setMenu(2); Lcd_Out(1,12,"Mes"); } if((getMenu() == 2) && (cont == 3)) { char aux_rtc = read_I2C_DS1307_Horas(); aux_rtc--; if(aux_rtc < 0) aux_rtc = 23; write_I2C_DS1307_Horas(aux_rtc); setMenu(2); Lcd_Out(1,12,"Hor"); } if((getMenu() == 2) && (cont == 4)) { char aux_rtc = read_I2C_DS1307_Minutos(); aux_rtc--; if(aux_rtc < 0) aux_rtc = 59; write_I2C_DS1307_Minutos(aux_rtc); setMenu(2); Lcd_Out(1,12,"Min"); } if((getMenu() == 2) && (cont == 5)) { char aux_rtc = read_I2C_DS1307_DiaDaSemana(); aux_rtc--; if(aux_rtc < 0) aux_rtc = 7; write_I2C_DS1307_DiaDaSemana(aux_rtc); setMenu(2); Lcd_Out(1,12,"Sem"); } if((getMenu() == 2) && (cont == 6)){ Lcd_Out(1,12," "); cont = 1; } if((getMenu() == 3) && (cont == 1)){ v_hora--; if(v_hora < 0) v_hora = 23; setMenu(3); Lcd_Out(2,12,"Hor"); } if((getMenu() == 3) && (cont == 2)){ v_min--; if(v_min < 0) v_min = 59; setMenu(3); Lcd_Out(2,12,"Min"); } if((getMenu() == 3) && (cont == 3)){ Lcd_Out(2,12," "); cont = 1; } flag_menos = 0; }//final if(B_enter && !flag_enter) { //inicio flag_enter = 1; }//final if(!B_enter && flag_enter) { //inicio if(getMenu() == 0) { setMenu(listaMenu); } if((getMenu() == 2) || (getMenu() == 3) ) { cont++; } if(getMenu() == 4) { RD3_bit = !RD3_bit; setMenu(4); } flag_enter = 0; }//final if(B_voltar && !flag_voltar) { //inicio flag_voltar = 1; }//final if(!B_voltar && flag_voltar) { //inicio if(getMenu() == 3) { write24C32A(0x00, 1, v_hora); write24C32A(0x00, 3, v_min); } if(getMenu() != 0) { retMenu(); } if(getMenu() == 0) { menu_principal(1); listaMenu = 1; } cont = 0; flag_voltar = 0; }//final if(flag_teste){ char aux_hora, aux_min; aux_hora = read_I2C_DS1307_Horas(); aux_min = read_I2C_DS1307_Minutos(); if(getMenu() == 0){ menu_principal(1); listaMenu = 1; } if( (aux_hora == v_hora) && (aux_min == v_min) ){ RD3_bit = 1; delay_ms(100000); RD3_bit =0; menu_principal(4); listaMenu = 4; } flag_teste = 0; }//final delay_ms(1); }//final do Loop }//Final da main //Timer0 //Prescaler 1:256; TMR0 Preload = 18661; Actual Interrupt Time : 1 void InitTimer0(){ T0CON = 0x87; TMR0H = 0x48; TMR0L = 0xE5; GIE_bit = 1; TMR0IE_bit = 1; IPEN_bit = 0; } void Interrupt(){ if (TMR0IF_bit){ cont_alt++; if(cont_alt > 20){ RD2_bit = !RD2_bit; flag_teste= 1; cont_alt = 0; } TMR0IF_bit = 0; TMR0H = 0x48; TMR0L = 0xE5; } }

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...