PDA

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



MICROTECKNIC
28-10-2007, 15:01
به نام خدا
باز هم سلام خدمت دوستان عزیزم البته باید ببخشید که من خیلی سوال می کنم .
من یک برنامه (باBASCOM) نوشتم که در اون زمان و تاریخ به وسیله یک DS1307 محاسبه می شه من به وسیله یک برنامه تبدیل تاریخ میلادی به شمسی که از اینترنت گرفته بودم وقرار دادن اون در برنامه ام تونستم تاریخ میلادی را به شمسی تبدیل کنم ولی مشکلی که من دارم اینه که برای تنظیم تاریخ احتیاج به تبدیل شمسی به میلادی دارم لطف کنید و من رو در این مورد یاری کنید

saeed_niknami
29-10-2007, 18:32
--------------------------------------------------------------------------------
flash unsigned char shmtable[6][12]={
{11,10,10,9,9,9,8,9,9,10,11,9},
{20,20,21,21,22,22,22,22,21,21,20,19},
{11,10,10,9,9,9,8,9,9,10,11,10},
{20,20,21,21,22,22,22,22,21,21,20,19},
{12,11,11,10,10,10,9,10,10,11,12,10},
{19,19,20,20,21,21,21,21,20,20,19,18}};

flash unsigned char miltable[6][12]={
{20,19,19,19,20,20,21,21,21,21,20,20},
{10,11,10,12,11,11,10,10,10,9,10,10},
{19,18,20,20,21,21,22,22,22,22,21,21},
{11,12,10,11,10,10,9,9,9,8,9,9},
{20,19,20,20,21,21,22,22,22,22,21,21},
{10,11,9,11,10,10,9,9,9,8,9,9}};

struct date{
unsigned char day;
unsigned char month;
unsigned char year;
};
struct date shmdate,mildate ;
/************************************************** ***********************/
void miltoshmcv(unsigned char ym,unsigned char mm,unsigned char dm)
{
unsigned char k,t1,t2;
k=ym%4;
if(k==3)
k=2;
k*=2;
t1=miltable[k][mm-1];
t2=miltable[k+1][mm-1];
if(mm<3 || (mm==3 && dm<=miltable[k][mm-1]))
shmdate.year = ym + 78;
else
shmdate.year = ym + 79;

if(dm<=t1)
{
shmdate.day=dm+t2;
shmdate.month=(mm+8)%12+1;
}
else
{
shmdate.day=dm-t1;
shmdate.month=(mm+9)%12+1;
}
}
/************************************************** ********************/
void shmtomilcv(unsigned char ys ,unsigned char ms,unsigned char ds)
{
unsigned char k,t1,t2;
k = yss%4;
if( k == 0)
k = 2;
else
k = k + k;
t1 =shmtable[k - 2][ms-1];
t2 = shmtable[k-1][ms-1];
if(ms<10 || (ms==10 && ds <= shmtable[k-2][ms-1]))
mildate.year = ys - 79;
else
mildate.year = ys - 78;

if(ds <= t1)
{
mildate.day = ds + t2;
mildate.month = (ms + 1)%12 + 1;
}
else
{
mildate.day= ds - t1;
mildate.month= (ms + 2)%12 + 1;
}
}





همشو كپي كن تو نتپد و شيفت + كنترل سمت چپ كيبورد رو بزن

تو ترجمش هر جا اشكال داشتي به من بگو

MICROTECKNIC
31-10-2007, 07:09
به نام خدا
خدا خیرت بده ولی متاسفانه در bascom شما نمی توانید متغییر چند بعدی داشته باشید لطف کن و اگر می توانی همین برنامه را به برنامه bascom تبدیل کن چون اگر من بخواهم همه برنامه ام را تبدیل به زبان سی بکنم خیلی کار دارد
واین که در کل این برنامه باید به زبان basic نوشته شود به دلایلی... :roll:

saeed_niknami
01-11-2007, 14:01
با سلام
من مي تونم دستورات بسكامو ترجمه كنم ولي نمي تونم برنامه واسش بنويسيم
شما برنامه تو بزار ببنيم مي شه كلشو به زبان سي آورد

saeidhp
03-01-2012, 09:37
--------------------------------------------------------------------------------
flash unsigned char shmtable[6][12]={
{11,10,10,9,9,9,8,9,9,10,11,9},
{20,20,21,21,22,22,22,22,21,21,20,19},
{11,10,10,9,9,9,8,9,9,10,11,10},
{20,20,21,21,22,22,22,22,21,21,20,19},
{12,11,11,10,10,10,9,10,10,11,12,10},
{19,19,20,20,21,21,21,21,20,20,19,18}};

flash unsigned char miltable[6][12]={
{20,19,19,19,20,20,21,21,21,21,20,20},
{10,11,10,12,11,11,10,10,10,9,10,10},
{19,18,20,20,21,21,22,22,22,22,21,21},
{11,12,10,11,10,10,9,9,9,8,9,9},
{20,19,20,20,21,21,22,22,22,22,21,21},
{10,11,9,11,10,10,9,9,9,8,9,9}};

struct date{
unsigned char day;
unsigned char month;
unsigned char year;
};
struct date shmdate,mildate ;
/************************************************** ***********************/
void miltoshmcv(unsigned char ym,unsigned char mm,unsigned char dm)
{
unsigned char k,t1,t2;
k=ym%4;
if(k==3)
k=2;
k*=2;
t1=miltable[k][mm-1];
t2=miltable[k+1][mm-1];
if(mm<3 || (mm==3 && dm<=miltable[k][mm-1]))
shmdate.year = ym + 78;
else
shmdate.year = ym + 79;

if(dm<=t1)
{
shmdate.day=dm+t2;
shmdate.month=(mm+8)%12+1;
}
else
{
shmdate.day=dm-t1;
shmdate.month=(mm+9)%12+1;
}
}
/************************************************** ********************/
void shmtomilcv(unsigned char ys ,unsigned char ms,unsigned char ds)
{
unsigned char k,t1,t2;
k = yss%4;
if( k == 0)
k = 2;
else
k = k + k;
t1 =shmtable[k - 2][ms-1];
t2 = shmtable[k-1][ms-1];
if(ms<10 || (ms==10 && ds <= shmtable[k-2][ms-1]))
mildate.year = ys - 79;
else
mildate.year = ys - 78;

if(ds <= t1)
{
mildate.day = ds + t2;
mildate.month = (ms + 1)%12 + 1;
}
else
{
mildate.day= ds - t1;
mildate.month= (ms + 2)%12 + 1;
}
}





همشو كپي كن تو نتپد و شيفت + كنترل سمت چپ كيبورد رو بزن

تو ترجمش هر جا اشكال داشتي به من بگو


سلام

ممکنه یکی از دوستان این کدها رو توضیح بده مخصوصا قسمت اولش جداول شمسی و میلادی ساخته شده

ممنون

M.ABDOLLAHI
03-01-2012, 09:45
سلام من یک کار میتونم برات انجام بدم یک پروژه کامل با شبیه سازی برات از کدویژن قرار بدم شرمنده من BASCOM را چند ساله گذاشتم کنار از من میشنوی کدویژن خیلی ساده تر خیلی...
You can see links before reply

saeidhp
03-01-2012, 12:21
ممنون میشم اگه زحمتشو بکشید من بیشتر توضیح کدها رو میخوام

من یکم تازه واردم و بسکام تا حالا کار نکردم ولی فکر کنم کدهای بالا کد c باشه

M.ABDOLLAHI
03-01-2012, 19:05
سلام مجدد نگاه کن این مدار یک پروژه ساعت و تقویم شمسی که روی lcd نمایش پیدا میکنه و با پروتئوس شبیه سازی شده فکر میکنم شما خودت هم باید یک مقدار مطالعه کنی انشاا... که کارت راه بیفته ...

saeidhp
11-02-2012, 23:13
آقا ممنون از برنامه
الان یه مشکل هست که مثلا ساعت 11:00:00 رو به صورت 11:0:0 نشون میده

چطور میتونم این مشکلو برطرف کنم ؟

saeidhp
16-02-2012, 13:46
کسی نیست راهنمایی کنه؟

hamid_051
09-12-2012, 17:01
سلام
به این شکل درست میشه
sprintf(str,"%02u:%02u:%02u",hour,minute,second)
11:02:03