Ir ao conteúdo
  • Cadastre-se

Matheus_Carvalho

Membro Pleno
  • Posts

    123
  • Cadastrado em

  • Última visita

posts postados por Matheus_Carvalho

  1. Tem esse programa muito bom para fazer um relogio, ele pode servir de ajuda em outros porgramas também, o circuito usa um ds1307 para contar o tempo e um pic 16f877a, o programa foi feito no mikroc:


    void write_ds1307(unsigned short address,unsigned short w_data);
    unsigned short sec;
    unsigned short minute;
    unsigned short hour;
    unsigned short day;
    unsigned short date;
    unsigned short month;
    unsigned short year;
    unsigned short data;
    char time[9];
    char ddate[11];

    unsigned char BCD2UpperCh(unsigned char bcd);
    unsigned char BCD2LowerCh(unsigned char bcd);

    void main(){

    I2C_Init(100000); //DS1307 I2C is running at 100KHz
    PORTB = 0;
    TRISB = 0; // Configure PORTB as output
    TRISC = 0xFF;
    Lcd_Init(&PORTB); // Initialize LCD connected to PORTB
    Lcd_Cmd(Lcd_CLEAR); // Clear display
    Lcd_Cmd(Lcd_CURSOR_OFF); // Turn cursor off
    Lcd_Out(1, 1, "TIME:");
    Lcd_Out(2, 1, "DATE:");

    //Set Time
    write_ds1307(0,0x80); //Reset second to 0 sec. and stop Oscillator
    write_ds1307(1,0x10); //write min 27
    write_ds1307(2,0x01); //write hour 14
    write_ds1307(3,0x02); //write day of week 2:Monday
    write_ds1307(4,0x05); // write date 17
    write_ds1307(5,0x01); // write month 6 June
    write_ds1307(6,0x09); // write year 8 --> 2008
    write_ds1307(7,0x10); //SQWE output at 1 Hz
    write_ds1307(0,0x00); //Reset second to 0 sec. and start Oscillator

    while(1)
    {
    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] = ':';
    time[6] = BCD2UpperCh(sec);
    time[7] = BCD2LowerCh(sec);
    time[8] = '\0';

    ddate[0] = BCD2UpperCh(date);
    ddate[1] = BCD2LowerCh(date);
    ddate[2] ='/';
    ddate[3] = BCD2UpperCh(month);
    ddate[4] = BCD2LowerCh(month);
    ddate[5] ='/';
    ddate[6] = '2';
    ddate[7] = '0';
    ddate[8] = BCD2UpperCh(year);
    ddate[9] = BCD2LowerCh(year);
    ddate[10] = '\0';

    Lcd_Out(1,6,time);
    Lcd_Out(2,6,ddate);
    Delay_ms(50);
    }
    }

    unsigned short read_ds1307(unsigned short address)
    {
    I2C_Start();
    I2C_Wr(0xd0); //address 0x68 followed by direction bit (0 for write, 1 for read) 0x68 followed by 0 --> 0xD0
    I2C_Wr(address);
    I2C_Repeated_Start();
    I2C_Wr(0xd1); //0x68 followed by 1 --> 0xD1
    data=I2C_Rd(0);
    I2C_Stop();
    return(data);
    }

    unsigned char BCD2UpperCh(unsigned char bcd)
    {
    return ((bcd >> 4) + '0');
    }

    unsigned char BCD2LowerCh(unsigned char bcd)
    {
    return ((bcd & 0x0F) + '0');
    }
    void write_ds1307(unsigned short address,unsigned short w_data)
    {
    I2C_Start(); // issue I2C start signal
    //address 0x68 followed by direction bit (0 for write, 1 for read) 0x68 followed by 0 --> 0xD0
    I2C_Wr(0xD0); // send byte via I2C (device address + W)
    I2C_Wr(address); // send byte (address of DS1307 location)
    I2C_Wr(w_data); // send data (data to be written)
    I2C_Stop(); // issue I2C stop signal
    }
    unsigned short read_ds1307(unsigned short address );

    a simulação foi feita no proteus,

    eu montei já o circuito no protoboard e ta funcionando direitinho.

    post-580463-13884952678713_thumb.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...

 

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

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!