PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : راهنمایی در مورد کد برنامه تایمر و ساعت



lakers
09-08-2015, 15:51
با سلام بر اساتید
من یک برنامه تایمر و ساعت دارم با 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);

}



سپاس