اطلاعیه

Collapse
No announcement yet.

مقدار دهی دستی تاریخ شمسی در مدارات شامل DS1307

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    مقدار دهی دستی تاریخ شمسی در مدارات شامل DS1307

    سلام دوستان
    من تو پروژه ای از 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:
    ---
    به نظر خودم باید یک تابع هم داشته باشم تا شمسی رو به میلادی تبدیل کنه ، وقتی با کلید تاریخ شمسی ست میشه تبدیل بشه به میلادی ، بعد تابع تبدیل میلادی به شمسی اون رو نمایش بده ...
    اما راهکاری به نظرم نرسید ! کسی در این مورد نظری داره ؟
    - اَللّهُمَّ عَجِّل لِوَليِّکَ الفَرَج -
    ارتباط با من : ir02x6
    طراحی و ساخت انواع منابع تغذیه سوئیچینگ - SMPS Designer

    #2
    پاسخ : مقدار دهی دستی تاریخ شمسی در مدارات شامل DS1307

    سلام
    یه پروژه مشابه سه چهار سال پیش انجام داده بودیم
    با مگا 8 و DS1307 و کاری که شما میخوای انجام بدی رو انجام میداد
    و دقیقا روشی که شما اشاره کردی رو استفاده کردی
    یعنی دو تا تابع داشتیم: میلادی به شمسی و شمسی به میلادی
    کاربر زمان رو به شمسی وارد میکنه
    میکرو شمسی رو به میلادی تبدیل میکنه و میده به DS1307
    بع میکرو تاریخ رو از روی آی سی میخونه
    از تابع میلادی به شمسی استفاده میکنه
    و در نهایت بر روی نمایشگر نشون میده.
    به نظر میرسه این روش راحت و بی دردسر باشه
    :read:
    1: اللهم صل علي محمد و آل محمد و عجل فرجهم و ...
    2: دانش بهتره يا ثروت؟ بدون شعور هيچکدوم!
    3: دلا معاش چنان کن که گر بلغزد پاي *** فرشته‌ات به دو دست دعا نگه دارد (حافظ)

    دیدگاه


      #3
      پاسخ : مقدار دهی دستی تاریخ شمسی در مدارات شامل DS1307

      سلام
      واللا من خودم اینو تستش نکردم، اما میدونم که با استفاده از Day of Year (چندمین روز سال بودن) این کارو انجام داد...
      تشكر نكن، صلوات بفرست:

      [img width=165 height=100]http://www.askdin.com/gallery/images/29839/1___________5.png[/img]

      دیدگاه


        #4
        پاسخ : مقدار دهی دستی تاریخ شمسی در مدارات شامل DS1307

        نوشته اصلی توسط محمدصادق رستمی
        به نظر میرسه این روش راحت و بی دردسر باشه
        :read:
        ممنون دوست عزیز ، اتفاقا یک برنامه هم دانلود کردم ، جفت تابع های تبدیل رو به کار برده بودن اما چون قابلیت تشخیص سال کبیسه رو نداشت به کارم نیومد ، البته نتونستم تابع شمسی به میلادی رو برای برنامه خودم ست کنم ،،،
        ممنون میشم توابع تبدیل خودتون رو در اختیار بنده بزارید ،،،
        - اَللّهُمَّ عَجِّل لِوَليِّکَ الفَرَج -
        ارتباط با من : ir02x6
        طراحی و ساخت انواع منابع تغذیه سوئیچینگ - SMPS Designer

        دیدگاه


          #5
          پاسخ : پاسخ : مقدار دهی دستی تاریخ شمسی در مدارات شامل DS1307

          نوشته اصلی توسط ir02x6
          ممنون دوست عزیز ، اتفاقا یک برنامه هم دانلود کردم ، جفت تابع های تبدیل رو به کار برده بودن اما چون قابلیت تشخیص سال کبیسه رو نداشت به کارم نیومد ، البته نتونستم تابع شمسی به میلادی رو برای برنامه خودم ست کنم ،،،
          ممنون میشم توابع تبدیل خودتون رو در اختیار بنده بزارید ،،،
          برنامه ای که من هم گرفته بودم از توی نت بود
          و به زبان C !
          و حتی سال کبیسه را هم چک نکردم!
          1: اللهم صل علي محمد و آل محمد و عجل فرجهم و ...
          2: دانش بهتره يا ثروت؟ بدون شعور هيچکدوم!
          3: دلا معاش چنان کن که گر بلغزد پاي *** فرشته‌ات به دو دست دعا نگه دارد (حافظ)

          دیدگاه

          لطفا صبر کنید...
          X