Ir ao conteúdo
  • Cadastre-se

Arthur Caviquioli

Membro Júnior
  • Posts

    7
  • Cadastrado em

  • Última visita

posts postados por Arthur Caviquioli

  1. Galera, a um tempo atras eu fiz um upgrade na bios dessa mobo para a versao uefi que estava em beta, e desde entao alguns perifericos (headset razer) nao funcionaram corretamente, e alguns programas pararam de ser compativeis, minha duvida é a seguinte, como fazer downgrade na bios.

    eu ate cheguei a achar uns post gringos, mas muito breves, e nao entendi muito.

     

    desde já agradeço 

  2. n sei se é complicado, optei em uma fonte nova kkkk ,atualizar a bios pode funcionar, mas é arriscado , se a energia cair na hora da atualizaçao e desligar o pc ,corrompe a bios dai ja era

     antes de atualizar pesquise um pouco mais,só por garantia

  3. uma vez onde trabalho,usei uma fonte de pc para alimentar um projeto, sendo q usei uma fonte que nessecitava desse sinal do pc; então eu tive 2 escolhas, ou trocava essa fonte para uma q n nessecitase desse sinal,ou bolar algum jeito d criar esse sinal.

     

    o que eu quero dizer é que vai q essa corsair precise deste sinal e sua placa-mãe n manda 

    e sua fonte antiga n precisa do sinal porisso ela liga normal

     

     

  4. Galera,sou novo aqui no forum e vim tirar uma duvida com vocês.

     

    eu achei pesquisando na internet um projeto com o pic16f877a de um radio relogio com despertador e termometro entre outras caracteristicas,o esquema ta tudo certo,mas o programa aparecem erros ao compilar, tentei compilar pelo  mikroC pro,mplab x ide e tambem pelo mplab ide 8, todos aparecem erros,então eu queria ver se vocês podiam me ajudar

    obs:nao entendo muito de programaçao,lendo o codigo creio q é linguagem C

     

    link o projeto:https://antoniopolo.wordpress.com/2012/03/06/radio-fm-pll-digital-termometro-relogio-pic16f877a/

     

    codigo:

    </pre>
    <pre>// LCD module connections
     sbit LCD_RS at RB4_bit;
     sbit LCD_EN at RB5_bit;
     sbit LCD_D4 at RB0_bit;
     sbit LCD_D5 at RB1_bit;
     sbit LCD_D6 at RB2_bit;
     sbit LCD_D7 at RB3_bit;
     sbit LCD_RS_Direction at TRISB4_bit;
     sbit LCD_EN_Direction at TRISB5_bit;
     sbit LCD_D4_Direction at TRISB0_bit;
     sbit LCD_D5_Direction at TRISB1_bit;
     sbit LCD_D6_Direction at TRISB2_bit;
     sbit LCD_D7_Direction at TRISB3_bit;
     // End LCD module connections
     //DS1307 RTC Interfacing with PIC16F877A
     sbit I2C1_Scl at RC3_bit;
     sbit I2C1_Sda at RC4_bit;
     sbit I2C1_Scl_Direction at TRISC3_bit;
     sbit I2C1_Sda_Direction at TRISC4_bit;
     //I2C via software with PIC16F877A - via hardware deu erro para ler o Chip FM
     sbit Soft_I2C_Scl at RD2_bit;
     sbit Soft_I2C_Sda at RD3_bit;
     sbit Soft_I2C_Scl_Direction at TRISD2_bit;
     sbit Soft_I2C_Sda_Direction at TRISD3_bit;
     // End Software I2C connections
     
    // Botoes de sintonia
     #define BUTTON_DOWN (PORTD.F0 == 0) //search down
     #define BUTTON_UP (PORTD.F1 == 0) //search up
     #define BUTTON_SET2 (PORTD.F4 == 0)
     #define BUTTON_SET1 (PORTD.F5 == 0)
     #define BUTTON_SNOOZE (PORTD.F7 == 0)
     #define mem_fm_qtd 25 //quantidade de posicoes de memoria para estacoes
     #define tempo_exposicao 50 // tempo exposicao da temperatura
     #define tempo_exposicao2 100 // tempo exposicao data
     
    //Range de Frequencias Europa
     #define FREQ_HIGH 108
     #define FREQ_LOW 87.5
     
    //nivel do sinal simbolo
     #define nivel_clear Lcd_Chr(1,1,' '); Lcd_Chr(1,2,' '); Lcd_Chr(1,3,' '); Lcd_Chr(1,4,' ')
     #define rele_on PORTB.F7 = 1
     #define rele_off PORTB.F7 = 0
     //define functions
     void Display_Temperature(unsigned int temp2write, unsigned int linha);
     void Sintoniza_freq(float frequex); //sintoniza frequ fixa
     void Le_freq(); //ler o chip FM carregando as variaveis
     void display_freq(float freqrep); //mostra frequencia
     void display_sinal(); // mostr ao nivel do sinal
     void recup_freq(int freq_addr, int sint_yn); //recupera freq da eprom e 0=nao sintoniza / 1=sintoniza
     void grava_Freq(int freq_addr); //grava 2 bytes da pll no eprom
     void display_mem(short int mem_fm); // mostra a frequencia de uma determ posic memoria =1,2,3,4,5
     void acerta_relogio (unsigned short xtipo);
     
    void write_ds1307(unsigned short address,unsigned short w_data); //escreve hora
     unsigned short read_ds1307(unsigned short address); //le hora
     unsigned char BCD2UpperCh(unsigned char bcd); //usada no relogio
     unsigned char BCD2LowerCh(unsigned char bcd); //usada no relogio
     void holdx(); // testa tempo de pressao na tecla - vai para ajste alarme ou ajuste hora
     void alarme(); //ajusta alarme
     
    //char bcd_to_bin(char bcd);
     //void checa_alarm();
     //end define functions
     
    //variaveis do termometro
     unsigned char *tempC = "000.0";
     unsigned int tempinC;
     unsigned long temp_value;
     unsigned char txt[15];
     
    //Variaveis do FM
     char frequencyH=0;
     char frequencyL=0;
     int frequencyB;
     long int frequency=0;
     char buffer[5];
     float freq_available=0;
     float freq_available2=0;
     short int showtime; //showtime variavel para shift no display : data x temp
     unsigned int cnt;
     short int flag_exp; //flag para shift display data x temper
     short int niv; //nivel do sinal
     short int st_flag; //informacao de stereo
     short int freq_eprom1; //byte1 da freq recuperado da eprom
     short int freq_eprom2; //byte2 da freq recuperado da eprom
     float freq_now;
     int memoria_fm;
     int hold_bt; //contador para apertar e segurar o botao - set hora
     int temp_min; //variaveis temps alarme
     int temp_hour; //variaveis temps alarme
     
    //variaveis de acerto de relogio
     unsigned short xchar; //dois digitos do valor (hora, mes, dia..) para a funcao de acerto do rlogio
     
    //variaveis do relogio
     //unsigned int sec;
     unsigned short int minute;
     unsigned short int hour;
     unsigned short int day;
     unsigned short int date;
     unsigned short int month;
     unsigned short int year;
     unsigned char time[9];
     unsigned char ddate[9];
     unsigned char ddate2[9]; //data temporaria para ajuste de hora
     
    //variaveis do alarme
     unsigned short a_hour;
     unsigned short a_min;
     unsigned short cnt2;
     unsigned short xalarme; //alarme 0 = alarme off, 1, 2, 3 = qtd do snooze
     bit in_alarm; // se 1 o alarme esta acionado se 0 o alarme nao esta acionado
     
    void main()
     {
     
    TRISB = 0; // PORTB saida do display lcd
     
    //termometro porta analogicas
     ADCON1 = 0b10000000; // 1- opcao osc, 0- left justif, 00-void, 0000 - vref+=vdd vref-=vss todas as portas an = A analogicasA
     TRISA = 0b00110011; //ra0/an0 e ra1/an1 inputs lm35
     TRISD =0xFF; // porta de sera input dos botoes
     CMCON = 0x07; // Disable Comparators
     
    Lcd_Init(); // Initialize LCD
     Lcd_Cmd(_LCD_CLEAR); // Clear LCD display
     Lcd_Cmd(_LCD_CURSOR_OFF); // Turn cursor off
     
    I2C1_Init(32768); //Inicia o DS1307 I2C e define a frequencia do xtal - xtal do tipo de relogio
     
    Soft_I2C_Init();
     //Delay_ms(50);
     
    //recupera e sintoniza ultima frequencia sintonizada
     recup_freq(0x00, 1);
     //Delay_ms(500);
     Le_freq(); //le freque inicial
     freq_now=freq_available2;
     display_freq(freq_now); //display frequencia
     
    //teste do relogio
     //================================
     
    write_ds1307(0,0x00);
     
    //================= loop principal - inicio =================//
     //================= loop principal - inicio =================//
     //================= loop principal - inicio =================//
     
    memoria_fm = 1;
     showtime = 1; //controla tempo de exibicao da hora x temperatura
     flag_exp = 0;
     in_alarm = 0; //alarme nao esta acionado
     
    //le informacoes do alarme - hora, min, e snooze
     //a_hour= EEPROM_Read(0xAA); // posicoes de memoria para hora e minuto
     //a_min= EEPROM_Read(0XAF);
     while(1)
     {
     temp_value = ADC_Read(0); // le o sensor numero 1
     temp_value = temp_value*5000;//1077; //1168;
     tempinC = temp_value/1000;
     tempinC = tempinC*10;
     
    if(showtime >= tempo_exposicao) if(showtime < tempo_exposicao2) //controle tempo de exposicao da hora x temperatura { VDelay_ms(15); if(flag_exp == 1) { Lcd_Out(2,1," "); Lcd_Chr(2,3,223); //imprime o grau celcius e o C Lcd_Chr(2,4,'C'); Display_Temperature(tempinC,2); flag_exp =0; //tratamento impressao do dia da semana ddate2[6] = BCD2UpperCh(day); ddate2[7] = BCD2LowerCh(day); ddate2[8] = '\0'; if(ddate2[7] == '1') {Lcd_Chr(2, 6, 'D');Lcd_Chr(2, 7, 'o');Lcd_Chr(2, 8, 'm');} if(ddate2[7] == '2') {Lcd_Chr(2, 6, 'S');Lcd_Chr(2, 7, 'e');Lcd_Chr(2, 8, 'g');} if(ddate2[7] == '3') {Lcd_Chr(2, 6, 'T');Lcd_Chr(2, 7, 'e');Lcd_Chr(2, 8, 'r');} if(ddate2[7] == '4') {Lcd_Chr(2, 6, 'Q');Lcd_Chr(2, 7, 'u');Lcd_Chr(2, 8, 'a');} if(ddate2[7] == '5') {Lcd_Chr(2, 6, 'Q');Lcd_Chr(2, 7, 'u');Lcd_Chr(2, 8, 'i');} if(ddate2[7] == '6') {Lcd_Chr(2, 6, 'S');Lcd_Chr(2, 7, 'e');Lcd_Chr(2, 8, 'x');} if(ddate2[7] == '7') {Lcd_Chr(2, 6, 'S');Lcd_Chr(2, 7, 'a');Lcd_Chr(2, 8, 'b');} } showtime++; } else { showtime= 1; } Delay_ms(50); //Acerto de Estacoes de FM //le hora e imprime //======================= //sec=read_ds1307(0); // read second minute=read_ds1307(1); // read minute hour=read_ds1307(2); // read hour day=read_ds1307(3); // read day date=read_ds1307(4); // read date month=read_ds1307(5); // read month year=read_ds1307(6); // read year time[0] = BCD2UpperCh(hour); time[1] = BCD2LowerCh(hour); time[2] = ':'; time[3] = BCD2UpperCh(minute); time[4] = BCD2LowerCh(minute); time[5] = '\0'; ddate[0] = BCD2UpperCh(date); ddate[1] = BCD2LowerCh(date); ddate[2] ='.'; ddate[3] = BCD2UpperCh(month); ddate[4] = BCD2LowerCh(month); ddate[5] ='.'; ddate[6] = BCD2UpperCh(year); ddate[7] = BCD2LowerCh(year); ddate[8] = '\0'; // checa alarme liga rele a_min= EEPROM_Read(0XAF); a_hour= EEPROM_Read(0xAA); xalarme= EEPROM_Read(0XB2); temp_min = minute; //conversoes de hora minuto temp_min = ((temp_min>>4)&0x0f)*10 + (temp_min&0x0f); //bcd to dec
     temp_hour = hour;
     temp_hour = ((temp_hour>>4)&0x0f)*10 + (temp_hour&0x0f); //bcd to dec
     
     if (xalarme >0) //alarme on - snooze maior que zero
     {
     if (temp_hour == a_hour && temp_min== a_min && !in_alarm) //dispara alarme
     {
     in_alarm = 1;
     rele_on;
     write_ds1307(7,0x10);
     xalarme--; //snooze menos 1
     if (xalarme 59) {a_min=0; a_hour++; if (a_hour > 23) a_hour = 0;} //ajuste estouros
     
     EEPROM_Write(0xAA, a_hour); //regrava alarme
     EEPROM_Write(0xAF, a_min);
     EEPROM_Write(0xB2, xalarme);
     in_alarm =0; // rehabilita alarme
     }
     }
     
     }
     if (xalarme >0) Lcd_Chr(2, 11, 'a'); else Lcd_Chr(2, 11, ' ');//indicador de alarme ligado
     
    if(BUTTON_SNOOZE){ write_ds1307(7,0x00); PORTB.F7 = ~PORTB.F7; Vdelay_ms(500);} // botao snooze
     Lcd_Out(2,12,time);
     
     if(showtime < tempo_exposicao) //controle tempo de exposicao da data x temperatura { if(flag_exp == 0) { Lcd_Out(2,1," "); Lcd_Out(2,1,ddate); flag_exp =1; } showtime++; } if(BUTTON_DOWN) //search down { while(BUTTON_DOWN) // incrementa sem sintonizar { freq_now = freq_now - 0.1; display_freq(freq_now); VDelay_ms(50); } Sintoniza_freq(freq_now); VDelay_ms(100) ; Le_Freq(); } if(BUTTON_UP) //search up { while(BUTTON_UP) // incrementa decrem sem sintonizar { freq_now = freq_now + 0.1; display_freq(freq_now); VDelay_ms(50); } Sintoniza_freq(freq_now); VDelay_ms(100) ; Le_Freq(); } if(BUTTON_SET1) //menu de memorizacao de estacoes { hold_bt = 0; // pressionar e segurar o botao de SET- ajuste de hora holdx(); //ajuste de hora e alarme if (hold_bt > 800) // ajuste de hora
     {
     write_ds1307(0,0x80); //write sec stop oscilator
     acerta_relogio(2); //hour
     acerta_relogio(1); //minute
     acerta_relogio(4); //date
     acerta_relogio(5); //month
     acerta_relogio(6); //year
     acerta_relogio(3); //day
     write_ds1307(0,0x00); //Reset second to 0 sec. and start Oscillator
     }
     
    if (hold_bt > 440) if (hold_bt cnt=0;
     memoria_fm = 1;
     display_mem(memoria_fm);
     
    while(cnt<550)
     {
     VDelay_ms(5); // COMENTADO PARA LIBERAR MEMORIA
     // if(BUTTON_DOWN) //decresce memoria
     // {
     // VDelay_ms(15) ;
     // cnt=0;
     //while(BUTTON_DOWN) // debounce button
     //{
     // memoria_fm = memoria_fm -2;
     // if (memoria_fm mem_fm_qtd) memoria_fm=1;
     display_mem(memoria_fm);
     VDelay_ms(100) ;
     
    //}
     }
     
    if(BUTTON_SET2) //memoriza estação
     {
     VDelay_ms(15) ;
     //while(BUTTON_SET2)
     //{
     recup_freq(0x00,0); //recupera a frequencia atual atualiza variaveis
     Delay_ms(500);
     Le_freq(); // le frequencia do FM e atualiza variaveis
     grava_Freq(0x00+(memoria_fm+1));
     cnt=1000;
     //}
     }
     cnt++;
     }
     
    Lcd_Cmd(_LCD_CLEAR);
     /*
     if (cnt == 1001) // saiu pois memorizou a estacao = mantem estacao e grava na memoria a mesma
     {
     Lcd_Cmd(_LCD_CLEAR);
     recup_freq(0x00,1); //recupera a frequencia atual atualiza variaveis
     freq_now=freq_available2;
     display_freq(freq_now); //display frequencia
     Le_freq(); // le frequencia do FM e atualiza variaveis
     }
     if (cnt == 550) //saiu por time out = sintoniza a estacao corrente da memoria
     {
     Lcd_Cmd(_LCD_CLEAR);
     display_freq(freq_now); //display frequencia
     Le_freq(); // le frequencia do FM e atualiza variaveis
     }
     */
     
    } //end do if de set1 - memoriza estacoes
     if(BUTTON_SET2) //browse estacoes memorizadas
     {
     
    cnt=0;
     display_mem(memoria_fm);
     
    while(cnt<150)
     {
     
     VDelay_ms(15) ;
     if(BUTTON_DOWN) //acresce memoria
     {
     VDelay_ms(15) ;
     cnt=0;
     //while(BUTTON_DOWN) // debounce button
     // {
     memoria_fm = memoria_fm -2;
     if (memoria_fm mem_fm_qtd) memoria_fm=1;
     display_mem(memoria_fm);
     VDelay_ms(100) ;
     recup_freq(0x00+(memoria_fm+1),1); //recupera a frequencia atual atualiza variaveis
     freq_now=freq_available2;
     display_freq(freq_now); //display frequencia
     Le_freq(); // le frequencia do FM e atualiza variaveis
     Sintoniza_freq(freq_now);
     
    //}
     }
     
    cnt++;
     }
     display_sinal(); // mostr ao nivel do sinal
     } //end do if de set2 - browse estacoes
     
    } //end while
     //================= loop principal - final =================//
     //================= loop principal - final =================//
     //================= loop principal - final =================//
     } // end main
     
    void Display_Temperature(unsigned int temp2write, unsigned int linha) {
     if (temp2write/10000)// convert Temp to characters// 48 is the decimal character code value for displaying 0 on LCD
     tempC[0] = temp2write/10000 + 48;
     else tempC[0] = ' ';
     tempC[1] = (temp2write/1000)%10 + 48; // Extract tens digit
     tempC[2] = (temp2write/100)%10 + 48; // Extract ones digit
     tempC[4] = (temp2write/10)%10 + 48; // Extract tens digit
     Lcd_Chr(linha,1,tempC[1]); // print temperature on LCD
     Lcd_Chr(linha,2,tempC[2]);
     }
     
    void Sintoniza_freq(float frequex) { // Set frequencia fixa no FM
     
    if (frequex < FREQ_LOW) { frequex = FREQ_HIGH; freq_now=FREQ_HIGH; } if (frequex > FREQ_HIGH)
     {
     frequex = FREQ_LOW;
     freq_now=FREQ_LOW;
     }
     
    frequency=frequex*1000000; //starting frequency 89.7 novafm
     frequencyB=(4*(frequency+225000))/32768; //valor decimal da pll
     frequencyH=frequencyB>>8; // desloca 8 bytes e pega entao o primeiro byte = 00110010 - decimal 50
     frequencyL=frequencyB&0XFF; // pega o 2nd byte faz(AND) com 00000000 11111111 -> resultado 10000010 - dec 130
     Soft_I2C_Start();
     Soft_I2C_Write(0xC0); //endereço do chip FM - write mode
     Soft_I2C_Write(frequencyH); //byte1
     Soft_I2C_Write(frequencyL); //byte2
     Soft_I2C_Write(0xB0); //byte3
     Soft_I2C_Write(0x10); //byte4
     Soft_I2C_Write(0x00); //byte5
     Soft_I2C_Stop();
     
    grava_Freq(0x00); //grava 1o e 2o bytes com a frequencia sintonizada
     //0x00 e 0x01 sao os enderecos para gravacao da ultima estacao
     
    }
     
    void Le_Freq() //atualiza variaveis de frequ e variaveis de sinal, fm
     {
     Soft_I2C_Start();
     Soft_I2C_Write(0xC1);
     buffer[0] = Soft_I2C_Read(1);
     buffer[1] = Soft_I2C_Read(1);
     buffer[2] = Soft_I2C_Read(1);
     buffer[3] = Soft_I2C_Read(1);
     buffer[4] = Soft_I2C_Read(1);
     Soft_I2C_Stop();
     
    Delay_ms(50);
     freq_available=(((buffer[0]&0x3F)<>4; // valor numerico do nivel do sinal
     display_sinal(); // mostr anivel do sinal
     //flag de stereo - acende o led
     st_flag = buffer[2]>>7;
     if (st_flag ==0) {Lcd_Chr(1,15,' ');Lcd_Chr(1,16,' ');}
     else {Lcd_Chr(1,15,'F');Lcd_Chr(1,16,'m');}
     
    }
     
    void display_freq(float freqrep)
     {
     long int i;
     if (freqrep < FREQ_LOW) { freqrep = FREQ_HIGH; freq_now=FREQ_HIGH; } if (freqrep > FREQ_HIGH)
     {
     freqrep = FREQ_LOW;
     freq_now= FREQ_LOW;
     }
     
    i= (freqrep*1000000)-30000; //soma 50k para acertar arredondamento
     
    longToStr(i, txt);
     
    Lcd_Chr(1,5,txt[2]);
     Lcd_Chr(1,6,txt[3]);
     Lcd_Chr(1,7,txt[4]);
     Lcd_Chr(1,8,'.');
     Lcd_Chr(1,9,txt[5]);
     Lcd_Out(1,10, "Mhz");
     }
     void display_sinal() //imprime nivel do sinal graficamente
     {
     nivel_clear;
     if (niv=3 && niv4 && niv8 && niv12 ) {nivel_clear;Lcd_Chr(1,1,'o');Lcd_Chr(1,2,'o');Lcd_Chr(1,3,'o');Lcd_Chr(1,4,'o');}
     
    }
     void grava_Freq(int freq_addr) // Grava frequencia - enderecos da 877a 0x00 - 0xFF (256bytes)
     {
     EEPROM_Write(freq_addr, frequencyH);
     EEPROM_Write(freq_addr+1, frequencyL);
     }
     void recup_freq(int freq_addr, int sint_yn) //recupera frequencia DA MEMORIA e sintoniza a mesma
     // 1 = le bytes da eprom e sintoniza , 0 = apenas le os bytes da eprom
     {
     
    frequencyH= EEPROM_Read(freq_addr);
     frequencyL= EEPROM_Read(freq_addr+1);
     
    if (sint_yn== 1)
     {
     Soft_I2C_Start();
     Soft_I2C_Write(0xC0); //endereço do chip FM - write mode
     Soft_I2C_Write(frequencyH); //byte1
     Soft_I2C_Write(frequencyL); //byte2
     Soft_I2C_Write(0xB0); //byte3
     Soft_I2C_Write(0x10); //byte4
     Soft_I2C_Write(0x00); //byte5
     Soft_I2C_Stop();
     }
     
    }
     void display_mem(short int mem_fm)
     {
     Lcd_Cmd(_LCD_CLEAR);
     Lcd_Chr(2,1,'M');
     Lcd_Chr(2,2,'e');
     Lcd_Chr(2,3,'m');
     inttostr(mem_fm,txt);
     Lcd_Out(2, 8, txt);
     
    recup_freq(0x00+(mem_fm+1), 0); //memoria 1
     
    if (frequencyL == 0xFF) //memoria sem estacao gravada
     {
     Lcd_Chr(1,5,'-');
     Lcd_Chr(1,6,'-');
     Lcd_Chr(1,7,'-');
     Lcd_Chr(1,8,'.');
     Lcd_Chr(1,9,'-');
     Lcd_Out(1,10, "Mhz");
     }
     else //memoria COM estacao gravada
     {
     
    freq_available=((frequencyH< 0xD0
     I2C1_Wr(address);
     I2C1_Repeated_Start();
     I2C1_Wr(0xd1);
     I2C1_Rd(0);
     I2C1_stop();
     }
     void write_ds1307(unsigned short address,unsigned short w_data)
     {
     I2C1_Start(); // issue I2C start signal
     I2C1_Wr(0xD0); // send byte via I2C (device address + W)
     I2C1_Wr(address); // send byte (address of DS1307 location)
     I2C1_Wr(w_data); // send data (data to be written)
     I2C1_Stop(); // issue I2C stop signal
     }
     //manipulacao de tipos para o relogio
     unsigned char BCD2UpperCh(unsigned char bcd)
     {
     return ((bcd >> 4) + '0');
     }
     
    //manipulacao de tipos para o relogio
     unsigned char BCD2LowerCh(unsigned char bcd)
     {
     return ((bcd & 0x0F) + '0');
     }
    void alarme()
    {
     
    //Lcd_Cmd(_LCD_CLEAR);
     //Delay_ms(5000);
     a_hour= EEPROM_Read(0xAA); // posicoes de memoria para hora e minuto
     a_min= EEPROM_Read(0XAF);
     xalarme= EEPROM_Read(0XB2);
     
    if (a_hour == 0xFF) a_hour = 0; //se posicao de memoria vazia - zera variaveis
     if (a_min == 0xFF) a_min = 0;
     if (xalarme == 0xFF) xalarme = 0;
     
    Lcd_Cmd(_LCD_CLEAR);
     
    cnt2 = 0;
     
    while(cnt2 < 100) { cnt2++; inttostr(a_hour,ddate2); Lcd_Chr(1, 8, ddate2[4]); Lcd_Chr(1, 9, ddate2[5]); Lcd_Chr(1, 10, ':'); inttostr(a_min,ddate2); Lcd_Chr(1, 11, ddate2[4]); Lcd_Chr(1, 12, ddate2[5]); inttostr(xalarme,ddate2); Lcd_Chr(1, 1, 'A');Lcd_Chr(1, 2, 'l');Lcd_Chr(1, 3, ':'); Lcd_Chr(1, 5, ddate2[4]); Lcd_Chr(1, 6, ddate2[5]); if(BUTTON_DOWN) { cnt2=0; a_hour++; Delay_ms(150); if (a_hour > 23) a_hour = 0;
     inttostr(a_hour,ddate2);
     Lcd_Chr(1, 8, ddate2[4]);
     Lcd_Chr(1, 9, ddate2[5]);
     }
     
    if(BUTTON_UP)
     {
     cnt2=0;
     a_min++;
     Delay_ms(150);
     if (a_min > 60) a_min = 0;
     inttostr(a_min,ddate2);
     Lcd_Chr(1, 10, ddate2[4]);
     Lcd_Chr(1, 11, ddate2[5]);
     }
     if(BUTTON_SET2)
     {
     cnt2=0;
     xalarme++;
     Delay_ms(150);
     if (xalarme > 3) xalarme = 0;
     inttostr(xalarme,ddate2);
     Lcd_Chr(1, 1, 'A');Lcd_Chr(1, 2, 'l');Lcd_Chr(1, 3, ':');
     Lcd_Chr(1, 5, ddate2[4]);
     Lcd_Chr(1, 6, ddate2[5]);
     
    }
     in_alarm =0; // rehabilita alarme
     EEPROM_Write(0xAA, a_hour);
     EEPROM_Write(0xAF, a_min);
     EEPROM_Write(0xB2, xalarme);
     }
     }
     
    //acerta relogio - grava novo valor
    void acerta_relogio (unsigned short xtipo)
    {
     
    unsigned short xlimite;
    unsigned short xchart;
     
    Lcd_Cmd(_LCD_CLEAR);
     
    xchart = 0;
     
    if (xtipo==2) {Lcd_Out(1, 1, "Hora:");xlimite=23;}
    if (xtipo==1) {Lcd_Out(1, 1, "Min:");xlimite=59;}
    if (xtipo==4) {Lcd_Out(1, 1, "Dia:");xlimite=31;}
    if (xtipo==5) {Lcd_Out(1, 1, "Mes:");xlimite=12;}
    if (xtipo==6) {Lcd_Out(1, 1, "Ano:");xlimite=20;}
    if (xtipo==3) {Lcd_Out(1, 1, "Semana:");xlimite=7;}
     
    for(;;)
    {
     
    inttostr(xchart,ddate2);
     
    Lcd_Chr(1, 10, ddate2[4]);
    Lcd_Chr(1, 11, ddate2[5]);
    //Lcd_Out(2, 1, ddate2);
     
    if(BUTTON_UP) // advance hour
    {
    VDelay_ms(150) ;
    xchart++;
    if (xchart>xlimite) xchart=0;
    }
     
    if(BUTTON_SET2) // valid
    {
    VDelay_ms(550) ;
    write_ds1307(xtipo,dec2bcd(xchart)); //write hour
    break ; // exit loop
    }
    }
    }
    void holdx()
    {
     
    while(BUTTON_SET1) //hold botão de SET1 - ajuste de hora
     {
     hold_bt++;
     
    if (hold_bt == 440) Lcd_Out(2, 1, "Alarme ");
     
    if (hold_bt == 800) Lcd_Out(2, 1, "Hora ");
     
    VDelay_ms(5);
     }
     }
    <pre>

     

    segue tambem o esquema anexado

     

    e desde já agradeço

    Projeto parte 1.jpg

    Projeto parte 2.jpg

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