/***************************************************** This program was produced by the CodeWizardAVR V1.24.8d Professional Automatic Program Generator © Copyright 1998-2006 Pavel Haiduc, HP InfoTech s.r.l. http://www.hpinfotech.com Project : Version : Date : 02.08.2007 Author : F4CG Company : F4CG Comments: Chip type : ATmega8535 Program type : Application Clock frequency : 1,000000 MHz Memory model : Small External SRAM size : 0 Data Stack size : 128 *****************************************************/ #asm .equ __lcd_port=0x15 //Port #endasm #include #include #include typedef unsigned char byte; /* table for the user defined character arrow that points to the top right corner */ flash byte char0[8]={ 0b0000000, 0b0001111, 0b0000011, 0b0000101, 0b0001001, 0b0010000, 0b0100000, 0b1000000}; /* function used to define user characters */ void define_char(byte flash *pc,byte char_code) { byte i,a; a=(char_code<<3) | 0x40; for (i=0; i<8; i++) lcd_write_byte(a++,*pc++); } int sek = 55; int min = 0; int std = 3; int tag = 0; int mon = 0; int jah = 0; int dcf77 = 0; int inter = 0; char sek1[16]; char min1[16]; char std1[16]; char tag1[16]; char mon1[16]; char jah1[16]; volatile int zaehler; int dcf77array[60]; int arrayzaehler = 0; int dcf77start = 0; int dcf77status = 0; interrupt [TIM0_OVF] void timer0(void) { zaehler++; } interrupt [3] void interr0(void) { inter = 1; zaehler = 0; dcf77status = 0; //kippt von 0 auf 1 } void main(void) { PORTA=0x00; DDRA=0x00; PORTB=0x00; DDRB=0xFF; PORTC=0x00; DDRC=0xFF; PORTD=0x00; DDRD=0b00000000; TIMSK = 0b00000001; TCCR0 = 0b00000100; MCUCR = 0b00000010; GICR = 0b01000000; #asm("sei") lcd_init (16); define_char(char0,0); lcd_gotoxy (0,0); lcd_putsf("j m t s m s "); while (1) { if (sek == 1 && min == 1 && std == 3) { dcf77 = 1; } if (dcf77 == 0) { if (zaehler == 122) { if (sek == 60) { sek = 0; min++; } if (min == 60) { min = 0; std++; } if (std == 24) { std = 0; tag++; } if (tag == 32) { if (mon == 1 || mon == 3 || mon == 5 || mon == 7 || mon == 8 || mon == 10 || mon == 12) { tag = 1; mon++; } } if (tag == 31) { if (mon == 4 || mon == 6 || mon == 9 || mon == 11) { tag = 1; mon++; } } if (tag == 30 && jah%4 == 0 && mon == 2) { tag = 1; mon++; } if (tag == 29 && jah%4 != 0 && mon == 2) { tag = 1; mon++; } if (mon == 13) { mon = 1; jah++; } itoa(jah, jah1); lcd_gotoxy (0,1); lcd_puts(jah1); itoa(mon, mon1); lcd_gotoxy (2,1); lcd_puts(mon1); itoa(tag, tag1); lcd_gotoxy (5,1); lcd_puts(tag1); itoa(std, std1); lcd_gotoxy (8,1); lcd_puts(std1); itoa(min, min1); lcd_gotoxy (11,1); lcd_puts(min1); itoa(sek, sek1); lcd_gotoxy (14,1); lcd_puts(sek1); zaehler = 0; sek++; } } if (dcf77 == 1) { lcd_clear(); lcd_gotoxy (0,0); lcd_putsf("DCF77 wird"); lcd_gotoxy (0,1); lcd_putsf("aktualisiert"); if (inter == 1 && PIND.3 == 0) { inter = 0; //kippt von 1 auf 0 } if (zaehler > 125) { dcf77start = 1; } if (dcf77start == 1) { if (inter == 0) { if (zaehler > 17 && dcf77status == 0) { dcf77array[arrayzaehler] = 1; arrayzaehler++; dcf77status = 1; } if (zaehler <= 17 && dcf77status == 0) { dcf77array[arrayzaehler] = 0; arrayzaehler++; dcf77status = 1; } } } if (arrayzaehler == 59) { sek = 0; min = dcf77array[20]*1+dcf77array[21]*2+dcf77array[22]*4+dcf77array[23]*8+dcf77array[24]*10+dcf77array[25]*20+dcf77array[26]*40; std = dcf77array[28]*1+dcf77array[29]*2+dcf77array[30]*4+dcf77array[31]*8+dcf77array[32]*10+dcf77array[33]*20; arrayzaehler = 0; zaehler = 0; dcf77 = 0; } } } }