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");
}
}
};
}
Diposting oleh
roon 2 the moon


0 komentar:
Posting Komentar