alat dan bahan : Atmega8 dengan Xtal 8Mhz
kapasitor 22pF
LCD 16 X 2
potensiometer 10 Kohm
push button
IC RTC DS1307 Dengan Xtal 32.768Khz
Resistor sebagai pull-up
battery 3v

berikut ini adalah programnya:



#include mega8.h
#include stdio.h
#include delay.h

#define pb1 PINB.2
#define pb2 PINB.3
#define pb3 PINB.4
#define pb4 PINB.5

#define off 0x00
#define on 0x02
#define timer TCCR0

// I2C Bus functions
#asm
.equ __i2c_port=0x15 ;PORTB
.equ __sda_bit=0
.equ __scl_bit=1
#endasm
#include

// DS1307 Real Time Clock functions
#include

// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x12
#endasm
#include

unsigned char buff[33],hour,minute,second,date,month,year,mode=1,hari=0,i;


// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
i++;
if(i==255)
{
if(mode==0)
{
rtc_get_time(&hour,&minute,&second);
rtc_get_date(&date,&month,&year);
i2c_start();
i2c_write(0xd0);
i2c_write(0x03);
i2c_start();
i2c_write(0xd1);
hari=i2c_read(0);
i2c_stop();
}

lcd_gotoxy(0,0);
lcd_putsf("Pukul");
sprintf(buff," %2d:%2d:%2d",hour,minute,second);
lcd_puts(buff);


}

}

set_clock()
{
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("Atur Waktu");
while(pb2==1)
{
lcd_gotoxy(0,1);
sprintf(buff,"[%2d]:%2d:%2d",hour,minute,second);
lcd_puts(buff);
if(pb3==0)
{
delay_ms(15);
if(pb3==0)
{
hour++;
if(hour==24)hour=0;
lcd_gotoxy(0,1);
sprintf(buff,"[%2d]:%2d:%2d",hour,minute,second);
lcd_puts(buff);
delay_ms(700);
while(pb3==0)
{
hour++;
if(hour==24)hour=0;
lcd_gotoxy(0,1);
sprintf(buff,"[%2d]:%2d:%2d",hour,minute,second);
lcd_puts(buff);
delay_ms(200);
}
}

}
if(pb4==0)
{
delay_ms(15);
if(pb4==0)
{
hour--;
if(hour==-1)hour=23;
lcd_gotoxy(0,1);
sprintf(buff,"[%2d]:%2d:%2d",hour,minute,second);
lcd_puts(buff);
delay_ms(700);
while(pb4==0)
{
hour--;
if(hour==-1)hour=23;
lcd_gotoxy(0,1);
sprintf(buff,"[%2d]:%2d:%2d",hour,minute,second);
lcd_puts(buff);
delay_ms(200);
}
}

}
}
delay_ms(15);
while(pb2==0);
while(pb2==1)
{
lcd_gotoxy(0,1);
sprintf(buff,"%2d:[%2d]:%2d",hour,minute,second);
lcd_puts(buff);
if(pb3==0)
{
delay_ms(15);
if(pb3==0)
{
minute++;
if(minute==60)minute=0;
lcd_gotoxy(0,1);
sprintf(buff,"%2d:[%2d]:%2d",hour,minute,second);
lcd_puts(buff);
delay_ms(700);
while(pb3==0)
{
minute++;
if(minute==60)minute=0;
lcd_gotoxy(0,1);
sprintf(buff,"%2d:[%2d]:%2d",hour,minute,second);
lcd_puts(buff);
delay_ms(200);
}
}

}
if(pb4==0)
{
delay_ms(15);
if(pb4==0)
{
minute--;
if(minute==-1)minute=59;
lcd_gotoxy(0,1);
sprintf(buff,"%2d:[%2d]:%2d",hour,minute,second);
lcd_puts(buff);
delay_ms(700);
while(pb4==0)
{
minute--;
if(minute==-1)minute=59;
lcd_gotoxy(0,1);
sprintf(buff,"%2d:[%2d]:%2d",hour,minute,second);
lcd_puts(buff);
delay_ms(200);
}
}

}
}
delay_ms(15);
while(pb2==0);
while(pb2==1)
{
lcd_gotoxy(0,1);
sprintf(buff,"%2d:%2d:[%2d]",hour,minute,second);
lcd_puts(buff);
if(pb3==0)
{
delay_ms(15);
if(pb3==0)
{
second++;
if(second==60)second=0;
lcd_gotoxy(0,1);
sprintf(buff,"%2d:%2d:[%2d]",hour,minute,second);
lcd_puts(buff);
delay_ms(700);
while(pb3==0)
{
second++;
if(second==60)second=0;
lcd_gotoxy(0,1);
sprintf(buff,"%2d:%2d:[%2d]",hour,minute,second);
lcd_puts(buff);
delay_ms(200);
}
}

}
if(pb4==0)
{
delay_ms(15);
if(pb4==0)
{
second--;
if(second==-1)second=59;
lcd_gotoxy(0,1);
sprintf(buff,"%2d:%2d:[%2d]",hour,minute,second);
lcd_puts(buff);
delay_ms(700);
while(pb4==0)
{
second--;
if(second==-1)second=59;
lcd_gotoxy(0,1);
sprintf(buff,"%2d:%2d:[%2d]",hour,minute,second);
lcd_puts(buff);
delay_ms(200);
}
}

}
}
delay_ms(15);
while(pb2==0);
rtc_set_time(hour,minute,second);
delay_ms(200);
while(pb2==0);
i2c_start();
i2c_write(0xd0);
i2c_write(0x03);
i2c_write(hari);
i2c_stop();
lcd_clear();
delay_ms(500);
}


// Declare your global variables here

void main(void)
{

PORTB=0xFF; port b sebagai input pull up

timer=off;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x01;


// I2C Bus initialization
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);

// LCD module initialization
lcd_init(16);

// Global enable interrupts
#asm("sei")


delay_ms(1000);
timer=on;
mode=0;

while (1)
{
if(pb1==0)
{
delay_ms(15);
if(pb1==0)
{
while(pb1==0);
mode=1;
timer=off;
set_clock();
timer=on;
mode=0;
}
}
if(pb2==0)
{
delay_ms(15);
if(pb2==0)
{
while(pb2==0);
mode=0;

}
}
if(pb3==0)
{
delay_ms(15);
if(pb3==0)
{
while(pb3==0);
sprintf(buff,"pb_3");

}
}
if(pb4==0)
{
delay_ms(15);
if(pb4==0)
{
while(pb4==0);
sprintf(buff,"pb_4");


}
}

};
}

0 komentar:

Posting Komentar

All Seeing Eye

All Seeing Eye

About this blog

berlarilah hingga kau ke bulan dan ambillah bintang yang paling terang

About Me

Foto saya
seorang anak adam yang di kirim ke dunia

Pengikut

Clock

StatCounter