با سلام بر اساتید
من یک برنامه تایمر و ساعت دارم با ds1307 هست و این برنامه را قبلا خریده بودم !! تایمر اش به صورت روزانه هست یعنی هر روز سر ساعت خاصی رله فعال میشه !! من میخوام کاری کنم مه مثلا هر 3 روز یکبار رله فعال بشود!! هر کاری کردم نتونستم درست اش کنم !! تاریخ اش میلادی هست !! لطفا اگر می توانید راهنمایی کنید!
سپاس
من یک برنامه تایمر و ساعت دارم با ds1307 هست و این برنامه را قبلا خریده بودم !! تایمر اش به صورت روزانه هست یعنی هر روز سر ساعت خاصی رله فعال میشه !! من میخوام کاری کنم مه مثلا هر 3 روز یکبار رله فعال بشود!! هر کاری کردم نتونستم درست اش کنم !! تاریخ اش میلادی هست !! لطفا اگر می توانید راهنمایی کنید!
کد:
#include <mega8.h> #include <delay.h> #include <stdio.h> #include <i2c.h> #include <ds1307.h> #include <alcd.h> #define b_down PIND.1 #define b_up PIND.2 #define b_set PIND.0 #define b_set_up PIND.4 #define b_set_down PIND.5 #define relay PORTB.7 //____________________________________________________________ void main(){ char lcd_buffer1[16]; //char lcd_buffer2[16]; unsigned char hr,min,sec,status=0,value=0,roz=0; unsigned char week,year,month,day; unsigned char en_hr=0,en_min=0,en_sec=0; unsigned char st_hr=0,st_min=0,st_sec=0; unsigned char en_year=0,en_month=0,en_day=0; unsigned char st_year=0,st_month=0,st_day=0; unsigned int main_year; DDRB.7=0xFF; PORTD=0XFF; i2c_init(); lcd_init(16); rtc_init(0,0,0); if(b_set == 0) { rtc_set_time(0,0,0); rtc_set_date(0,8,7,15); lcd_putsf("Successfully!"); while(1) { } } delay_ms(20); rtc_get_time(&en_hr,&en_min,&en_sec); rtc_get_time(&st_hr,&st_min,&st_sec); rtc_get_date(&week,&en_day,&en_month,&en_year); rtc_get_date(&week,&st_day,&st_month,&st_year); delay_ms(20); while (1){ while(status == 0) { rtc_get_time(&hr,&min,&sec); rtc_get_date(&week,&day,&month,&year); main_year = year + 2000; if(b_up == 0) { roz++; if(roz == 2) roz = 0; while(b_up == 0); } if(roz == 0) { if(hr == en_hr & min == en_min & sec == en_sec & year == en_year & month == en_month & day == en_day) { value = 1; relay = 1; } if(hr == st_hr & min == st_min & sec == st_sec & year == en_year & month == en_month & day == en_day) { value = 0; relay = 0; } } else { if(hr == en_hr & min == en_min & sec == en_sec) { value = 1; relay = 1; } if(hr == st_hr & min == st_min & sec == st_sec) { value = 0; relay = 0; } } lcd_clear(); sprintf(lcd_buffer1,"Time~ %02u:%02u:%02u",hr,min,sec); lcd_gotoxy(0,0); lcd_puts(lcd_buffer1); sprintf(lcd_buffer1,"%u/%02u/%02u ",main_year,month,day); lcd_gotoxy(0,1); lcd_puts(lcd_buffer1); if(value == 0) lcd_putsf("Off"); else lcd_putsf("On"); if(roz != 0) lcd_putsf(" R"); if(b_set == 0) { status++; if(status == 19) status = 0; while(b_set == 0); }
دیدگاه