پاسخ : گیر کردن رله هنگام متصل شدن برق به مدار
سلام
من در کد قبل اشتباه کردم شما پین رله رو به PINC.2 وصل کن وتست کن
اگه نشد احتمالا یکی از کتابخونه ها مثلا DS1307 مشکلی داره
سلام
من در کد قبل اشتباه کردم شما پین رله رو به PINC.2 وصل کن وتست کن
اگه نشد احتمالا یکی از کتابخونه ها مثلا DS1307 مشکلی داره
کد:
#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_down PIND.3 #define relay PORTC.2 #define buzzer PORTC.0 //____________________________________________________________ void main(){ char lcd_buffer1[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; DDRC=0xFF; relay = 0; PORTD=0XFF; lcd_init(16); i2c_init(); 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; buzzer = 1; delay_ms(3000); buzzer = 0; } 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; buzzer = 1; delay_ms(3000); buzzer = 0; } 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); } delay_ms(200); } rtc_get_time(&hr,&min,&sec); b: while(status == 1) { if(b_up == 0) { hr++; if(hr == 25) hr = 0; delay_ms(70); } if(b_down == 0) { hr--; if(hr == -1) hr = 0; delay_ms(70); } lcd_clear(); lcd_gotoxy(0,0); sprintf(lcd_buffer1,"Time~%02u:%02u:%02u",hr,min,sec); lcd_puts(lcd_buffer1); delay_ms(80); lcd_clear(); sprintf(lcd_buffer1,"Time~ :%02u:%02u",min,sec); lcd_puts(lcd_buffer1); delay_ms(80); if(b_set == 0) { rtc_set_time(hr,min,sec); status++; if(status == 19) status = 0; while(b_set == 0); } if(b_set_down == 0) { status--; if(status == -1) status = 0; while(b_set_down == 0); goto b; } }
دیدگاه