#include <mega16a.h> #include <i2c.h>// I2C Bus functions #include <ds1307.h>// DS1307 Real Time Clock functions #include <alcd.h>// Alphanumeric LCD functions #include <alcd.h> #include <delay.h> #include <stdio.h> #include <math.h> int init_hour = 0, init_min = 31, init_sec = 0; char hour, minu, sec, weekDayNo, day, month, year; char weekDays[7][4] = {"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"}; char date_buffer[16]= {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, time_buffer[16]= {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; // Declare your global variables here void main(void) { // Declare your local variables here // Input/Output Ports initialization // Port A initialization // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In DDRA=(0<<DDA7) | (0<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0); // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0); // Port B initialization // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (1<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0); // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0); // Port C initialization // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In DDRC=(0<<DDC7) | (0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0); // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T PORTC=(0<<PORTC7) | (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0); // Port D initialization // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0); // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0); // Bit-Banged I2C Bus initialization // I2C Port: PORTC // I2C SDA bit: 1 // I2C SCL bit: 0 // Bit Rate: 100 kHz // Note: I2C settings are specified in the // Project|Configure|C Compiler|Libraries|I2C menu. i2c_init(); // DS1307 Real Time Clock initialization // Square wave output on pin SQW/OUT: Off // SQW/OUT pin state: 0 rtc_init(0,0,0); // Alphanumeric LCD initialization // Connections are specified in the // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu: // RS - PORTD Bit 0 // RD - PORTD Bit 1 // EN - PORTD Bit 2 // D4 - PORTD Bit 4 // D5 - PORTD Bit 5 // D6 - PORTD Bit 6 // D7 - PORTD Bit 7 // Characters/line: 16 lcd_init(16); rtc_get_time(&hour, &minu, &sec); if(hour == 0 && minu == 0 && sec == 0){//Time has not been set rtc_set_time(init_hour, init_min, init_sec); rtc_set_date(1, 28, 3, 21); } lcd_gotoxy(0, 0); sprintf(time_buffer, "%d:%d", intPart(6.899), intPart(3.1)); lcd_puts(time_buffer); while (1) { rtc_get_time(&hour, &minu, &sec); rtc_get_date(&weekDayNo, &day, &month, &year); lcd_clear(); lcd_gotoxy(4, 1); sprintf(time_buffer, "%d:%d:%d", hour, minu, sec); lcd_puts(time_buffer); lcd_gotoxy(1, 0); sprintf(date_buffer, "%s %2d/%02d/%d", weekDays[weekDayNo - 1], day ,month, 2000 + year); lcd_puts(date_buffer); if(minu == 59 && sec == 59) PORTB.3 = 1;//Alarm beep delay_ms(1000);//Refresh every 1 seconds PORTB.3 = 0; } }