سلام دوستان 
من تو پروژه ای از IC تایمر DS1307 استفاده میکنم ، با استفاده از تابع زیر تاریخ میلادی گرفته شده از IC تایمر رو به تاریخ شمسی تبدیل میکنم :
ورودی های تابع :
_Year
_month
_day
خروجی های تابع :
Jyear
Jmonth
Jday
[Code=vb]
'—————-http://www.yazdkit.com————— —’
$lib "mcsbyteint.lbx"
Dim Myear As Integer 'input Miladi(gregorian) Year
Dim Mday As Integer 'input Miladi Day
Dim Mmonth As Integer 'input Miladi Month
Dim Mdayofyear As Integer
Dim Myear_ As Integer
Dim Jday As Integer 'output Jalali(shamsi) Day
Dim Jmonth As Integer 'output Jalali Month
Dim Jyear As Integer 'output Jalali Year
Dim Jdayofyear As Integer
Dim Gnumdayofyear As Integer
Dim Isleapyear As Bit
Dim Isleapyearp As Bit
Dim Iloop As Byte
Dim Temp3 As Integer
Dim Temp4 As Integer
Dim Temp5 As Integer
Dim Temp6 As Integer
Dim Jmonth_a(12) As Byte
Dim Mmonth_a(12) As Byte
Mmonth_a(1) = 31
'——–28 Ya 29 Agar Sall Kabiseh Bashad In Mah 29 Roz Mibashad—————— –
Mmonth_a(2) = 28
Mmonth_a(3) = 31
Mmonth_a(4) = 30
Mmonth_a(5) = 31
Mmonth_a(6) = 30
Mmonth_a(7) = 31
Mmonth_a(8) = 31
Mmonth_a(9) = 30
Mmonth_a(10) = 31
Mmonth_a(11) = 30
Mmonth_a(12) = 31
Gnumdayofyear = 365
Myear = _year + 2000 'sample Miladi(gregorian) Year
Mday = _day 'sample Miladi Day
Mmonth = _month 'sample Miladi Month
Mdayofyear = 0
'————–shart Kabiseh Bodane Sall———— -
Temp3 = Myear Mod 4
Temp4 = Myear Mod 100
Temp5 = Myear Mod 400
Temp6 = Temp3 And Temp4
If Temp6 <> 0 Or Temp5 = 0 Then
Mmonth_a(2) = 28
Else
Mmonth_a(2) = 29
End If
Myear_ = Myear - 1
Temp3 = Myear_ Mod 4
Temp4 = Myear_ Mod 100
Temp5 = Myear_ Mod 400
Temp6 = Temp3 And Temp4
If Temp6 <> 0 Or Temp5 = 0 Then
Reset Isleapyearp
Else
Set Isleapyearp
End If
Temp3 = Mmonth - 1
For Iloop = 1 To Temp3
Mdayofyear = Mmonth_a(iloop) + Mdayofyear
Next
Mdayofyear = Mday + Mdayofyear
If Mdayofyear > 79 Then
Temp3 = Mdayofyear - 79
Jyear = Myear - 621
If Temp3 < 186 Then
Temp4 = Temp3 Mod 31
Temp5 = Temp3 / 31
If Temp4 = 0 Then
Jmonth = Temp5
Jday = 31
Else
Jmonth = Temp5 + 1
Jday = Temp4
End If
Else
Temp4 = Temp3 - 186
Temp5 = Temp4 Mod 30
Temp6 = Temp4 / 30
If Temp5 = 0 Then
Jmonth = Temp6 + 6
Jday = 30
Else
Jmonth = Temp6 + 7
Jday = Temp5
End If
End If
Else
Jyear = Myear - 622
If Isleapyearp = 1 Then
Mdayofyear = Mdayofyear + 11
Else
Mdayofyear = Mdayofyear + 10
End If
Temp4 = Mdayofyear Mod 30
Temp5 = Mdayofyear / 30
If Temp4 = 0 Then
Jmonth = Temp5 + 9
Jday = 30
Else
Jmonth = Temp5 + 10
Jday = Temp4
End If
Waitms 1
End If
[/code]
همچنین برای تنطیم تاریخ از دو کلید ( روز - ماه ) استفاده میکنم ،
اما برای مقدار دهی روز و ماه با مشکل مواجه شدم ، وقتی که روز یا ماه رو تغییر میدم ، چون تاریخ میلادی رو تغییر میدم ، تاریخ شمسی هم تغییر میکنه ! یعنی وقتی روز رو تغییر میدم خود به خود ماه ، و زمانی که ماه رو تغییر میدم متناسب با شمسی روز هم تغییر میکنه و نمیشه به صورت دستی تاریخ شمسی رو ست کرد :sad:
---
به نظر خودم باید یک تابع هم داشته باشم تا شمسی رو به میلادی تبدیل کنه ، وقتی با کلید تاریخ شمسی ست میشه تبدیل بشه به میلادی ، بعد تابع تبدیل میلادی به شمسی اون رو نمایش بده ...
اما راهکاری به نظرم نرسید ! کسی در این مورد نظری داره ؟

من تو پروژه ای از IC تایمر DS1307 استفاده میکنم ، با استفاده از تابع زیر تاریخ میلادی گرفته شده از IC تایمر رو به تاریخ شمسی تبدیل میکنم :
ورودی های تابع :
_Year
_month
_day
خروجی های تابع :
Jyear
Jmonth
Jday
[Code=vb]
'—————-http://www.yazdkit.com————— —’
$lib "mcsbyteint.lbx"
Dim Myear As Integer 'input Miladi(gregorian) Year
Dim Mday As Integer 'input Miladi Day
Dim Mmonth As Integer 'input Miladi Month
Dim Mdayofyear As Integer
Dim Myear_ As Integer
Dim Jday As Integer 'output Jalali(shamsi) Day
Dim Jmonth As Integer 'output Jalali Month
Dim Jyear As Integer 'output Jalali Year
Dim Jdayofyear As Integer
Dim Gnumdayofyear As Integer
Dim Isleapyear As Bit
Dim Isleapyearp As Bit
Dim Iloop As Byte
Dim Temp3 As Integer
Dim Temp4 As Integer
Dim Temp5 As Integer
Dim Temp6 As Integer
Dim Jmonth_a(12) As Byte
Dim Mmonth_a(12) As Byte
Mmonth_a(1) = 31
'——–28 Ya 29 Agar Sall Kabiseh Bashad In Mah 29 Roz Mibashad—————— –
Mmonth_a(2) = 28
Mmonth_a(3) = 31
Mmonth_a(4) = 30
Mmonth_a(5) = 31
Mmonth_a(6) = 30
Mmonth_a(7) = 31
Mmonth_a(8) = 31
Mmonth_a(9) = 30
Mmonth_a(10) = 31
Mmonth_a(11) = 30
Mmonth_a(12) = 31
Gnumdayofyear = 365
Myear = _year + 2000 'sample Miladi(gregorian) Year
Mday = _day 'sample Miladi Day
Mmonth = _month 'sample Miladi Month
Mdayofyear = 0
'————–shart Kabiseh Bodane Sall———— -
Temp3 = Myear Mod 4
Temp4 = Myear Mod 100
Temp5 = Myear Mod 400
Temp6 = Temp3 And Temp4
If Temp6 <> 0 Or Temp5 = 0 Then
Mmonth_a(2) = 28
Else
Mmonth_a(2) = 29
End If
Myear_ = Myear - 1
Temp3 = Myear_ Mod 4
Temp4 = Myear_ Mod 100
Temp5 = Myear_ Mod 400
Temp6 = Temp3 And Temp4
If Temp6 <> 0 Or Temp5 = 0 Then
Reset Isleapyearp
Else
Set Isleapyearp
End If
Temp3 = Mmonth - 1
For Iloop = 1 To Temp3
Mdayofyear = Mmonth_a(iloop) + Mdayofyear
Next
Mdayofyear = Mday + Mdayofyear
If Mdayofyear > 79 Then
Temp3 = Mdayofyear - 79
Jyear = Myear - 621
If Temp3 < 186 Then
Temp4 = Temp3 Mod 31
Temp5 = Temp3 / 31
If Temp4 = 0 Then
Jmonth = Temp5
Jday = 31
Else
Jmonth = Temp5 + 1
Jday = Temp4
End If
Else
Temp4 = Temp3 - 186
Temp5 = Temp4 Mod 30
Temp6 = Temp4 / 30
If Temp5 = 0 Then
Jmonth = Temp6 + 6
Jday = 30
Else
Jmonth = Temp6 + 7
Jday = Temp5
End If
End If
Else
Jyear = Myear - 622
If Isleapyearp = 1 Then
Mdayofyear = Mdayofyear + 11
Else
Mdayofyear = Mdayofyear + 10
End If
Temp4 = Mdayofyear Mod 30
Temp5 = Mdayofyear / 30
If Temp4 = 0 Then
Jmonth = Temp5 + 9
Jday = 30
Else
Jmonth = Temp5 + 10
Jday = Temp4
End If
Waitms 1
End If
[/code]
همچنین برای تنطیم تاریخ از دو کلید ( روز - ماه ) استفاده میکنم ،
اما برای مقدار دهی روز و ماه با مشکل مواجه شدم ، وقتی که روز یا ماه رو تغییر میدم ، چون تاریخ میلادی رو تغییر میدم ، تاریخ شمسی هم تغییر میکنه ! یعنی وقتی روز رو تغییر میدم خود به خود ماه ، و زمانی که ماه رو تغییر میدم متناسب با شمسی روز هم تغییر میکنه و نمیشه به صورت دستی تاریخ شمسی رو ست کرد :sad:
---
به نظر خودم باید یک تابع هم داشته باشم تا شمسی رو به میلادی تبدیل کنه ، وقتی با کلید تاریخ شمسی ست میشه تبدیل بشه به میلادی ، بعد تابع تبدیل میلادی به شمسی اون رو نمایش بده ...
اما راهکاری به نظرم نرسید ! کسی در این مورد نظری داره ؟
دیدگاه