اطلاعیه

Collapse
No announcement yet.

برنامه تبدیل تاریخ میلادی به شمسی با ds1307 به زبان بیس(کمک)

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

    برنامه تبدیل تاریخ میلادی به شمسی با ds1307 به زبان بیس(کمک)

    درود بر همگی دوستان کسی برنامه تبدیل تاریخ شمسی به میلادی در آی سی ds1307 رو داره؟راستش با lcd زیاد هست من ساعتش رو با 7سگمنت ساختم مشکلی هم با نمایش تاریخ میلادی ندارم اما میخوام با همین آی سی میلادی رو به شمسی تبدیل کنم کسی هست کمک کنه؟ممنون میشم
    در روزگاري که لبخند ادم ها بخاطر شکست توست برخيز تا بگيرند.........

    #2
    پاسخ : برنامه تبدیل تاریخ میلادی به شمسی با ds1307 به زبان بیس(کمک)

    دوستان کسی نیست؟
    در روزگاري که لبخند ادم ها بخاطر شکست توست برخيز تا بگيرند.........

    دیدگاه


      #3
      پاسخ : برنامه تبدیل تاریخ میلادی به شمسی با ds1307 به زبان بیس(کمک)

      یکی بیاد کمک :angry:
      در روزگاري که لبخند ادم ها بخاطر شکست توست برخيز تا بگيرند.........

      دیدگاه


        #4
        پاسخ : برنامه تبدیل تاریخ میلادی به شمسی با ds1307 به زبان بیس(کمک)

        تبدیل که ربطی به ای سی نداره.همون برنامه های با السیدی رو بردار توابع تبدیلشو استخراج کن .اصلا همونو به جای نمایش رو السیدی بگذار رو سون سگمنت دیگه مشکل چیه؟ :read:

        دیدگاه


          #5
          پاسخ : برنامه تبدیل تاریخ میلادی به شمسی با ds1307 به زبان بیس(کمک)

          نه اخه ممکنه مقدارهای داخلش باشه که نشه تو برنامه ام بذارم و باید دس ببرم داخلش اصلا باید تغییر اساسی داده بشه ممکنه با متغییرهایی که من گرفتم قاطی پاطی شه :angry: .......راستی میشه برنامه رو چند تیکه کرد؟مثلا 4تا دکمه بذاری و چهار خط برنامه اشو داخل حلقه do-loop بذاری هرکدوم از کلیدها که زده شد بره داخل یه زیربرنامه که اونجاهم حلقه do-loop داشته باشه میخوام با اینکار حالت های ساعت و تاریخ رو تغییر بدم مثلا ساعتم رو هم 12ساعته بذارم(am-pm) هم 24ساعته یعنی واسه اینکار دوتا کلید بذارم.....واسه تاریخم 2تا بذاری میلادی و شمسی
          میخواستم بدونم این راه ج میده یا باید برنامه رو جور دیگه ای نوشت
          در روزگاري که لبخند ادم ها بخاطر شکست توست برخيز تا بگيرند.........

          دیدگاه


            #6
            پاسخ : برنامه تبدیل تاریخ میلادی به شمسی با ds1307 به زبان بیس(کمک)

            [code]
            Const Ds1307w = &HD0 ' Addresses of Ds1307 clock
            Const Ds1307r = &HD1
            Config Clock = User
            Config Date = Dmy , Separator = / ' this will dim the bytes automatic
            'dim other needed variables
            Declare Function M_kabise(byref Sal As Word)as Byte
            Declare Function Sh_kabise(byref Sal As Word)as Byte

            Dim Weekday As Byte
            '--------------
            Dim M_day As Word
            Dim Sh_day As Word
            Dim M_year As Word
            Dim Sh_year As Word
            Dim M_month As Word
            Dim Sh_month As Word
            Dim Kabise As Byte
            Dim Kole_roz_m As Word
            Dim Kole_roz_sh As Word
            '-------------

            '********************************

            Dim Conter1 As Word
            Dim Conter2 As Word
            Dim Conter3 As Word
            Dim Conter4 As Word
            Dim Day_of_month(12) As Byte
            Day_of_month(1) = 31
            Day_of_month(2) = 28
            Day_of_month(3) = 31
            Day_of_month(4) = 30
            Day_of_month(5) = 31
            Day_of_month(6) = 30
            Day_of_month(7) = 31
            Day_of_month(8) = 31
            Day_of_month(9) = 30
            Day_of_month(10) = 31
            Day_of_month(11) = 30
            Day_of_month(12) = 31

            '----------------------

            Dim Temp1 As Integer
            Dim Temp2 As Integer
            Dim Temp3 As Word
            Dim Temp4 As Word
            Dim Temp5 As Byte
            .
            .
            .
            Do
            Gosub Getdatetime
            If _sec = 0 Then
            Gosub M_to_sh
            end if
            Loop
            .
            .
            .
            Getdatetime:
            I2cstart ' Generate start code
            I2cwbyte Ds1307w ' send address
            I2cwbyte 0 ' start address in 1307
            I2cstart ' Generate start code
            I2cwbyte Ds1307r ' send address
            I2crbyte _sec , Ack
            I2crbyte _min , Ack ' MINUTES
            I2crbyte _hour , Ack ' Hours
            I2crbyte Weekday , Ack ' Day of Week
            I2crbyte _day , Ack ' Day of Month
            I2crbyte _month , Ack ' Month of Year
            I2crbyte _year , Nack ' Year
            I2cstop
            _sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
            _day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)

            Return

            Setdate:
            _day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)
            I2cstart ' Generate start code
            I2cwbyte Ds1307w ' send address
            I2cwbyte 4 ' starting address in 1307
            I2cwbyte _day ' Send Data to SECONDS
            I2cwbyte _month ' MINUTES
            I2cwbyte _year ' Hours
            I2cstop
            Return

            Settime:
            _sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
            I2cstart ' Generate start code
            I2cwbyte Ds1307w ' send address
            I2cwbyte 0 ' starting address in 1307
            I2cwbyte _sec ' Send Data to SECONDS
            I2cwbyte _min ' MINUTES
            I2cwbyte _hour ' Hours
            I2cstop
            Return
            '---------------------------- date chenge --------------------------------
            '============================================ =============================
            M_to_sh:
            M_year = 2000 + _year : M_month = _month : M_day = _day
            '----------------
            If M_kabise(m_year) = 0 Then
            Day_of_month(2) = 28
            Else
            Day_of_month(2) = 29
            End If
            '----------------

            Conter2 = M_month - 1
            Kole_roz_m = 0

            For Conter1 = 1 To Conter2
            Kole_roz_m = Kole_roz_m + Day_of_month(conter1)
            Next
            Kole_roz_m = Kole_roz_m + M_day

            '**********************************

            If Kole_roz_m > 79 Then

            Sh_year = M_year - 621
            Kole_roz_sh = Kole_roz_m - 79

            Else

            Sh_year = M_year - 622

            Temp4 = M_year - 1
            Temp5 = M_kabise(temp4)

            If Temp5 = 0 Then
            Kole_roz_sh = Kole_roz_m + 286
            Else
            Kole_roz_sh = Kole_roz_m + 287
            End If

            End If

            '**********************************

            Sh_month = 1

            '****************
            While Kole_roz_sh > 30

            If Sh_month < 7 Then
            Kole_roz_sh = Kole_roz_sh - 31
            Else
            Kole_roz_sh = Kole_roz_sh - 30
            End If

            Incr Sh_month

            Wend
            '***************
            '---------------
            If Kole_roz_sh = 0 Then

            Decr Sh_month
            If Sh_month < 7 Then
            Sh_day = 31
            Else
            Sh_day = 30
            End If
            Else
            Sh_day = Kole_roz_sh
            End If
            '---------------
            Return
            '******************************************** ***********************************
            '****************************** ****************
            'WWW.ISEEE.IR ***************** SHAMSI TO MILADI ****************
            '****************************** ****************
            '******************************************** ***********************************

            Sh_to_m:

            '------------------
            Kole_roz_sh = 0
            '------------------

            If Sh_month > 6 Then

            Kole_roz_sh = 186
            Temp4 = Sh_month - 7
            Temp4 = Temp4 * 30
            Kole_roz_sh = Kole_roz_sh + Temp4

            Else

            Temp4 = Sh_month - 1
            Temp4 = Temp4 * 31
            Kole_roz_sh = Kole_roz_sh + Temp4

            End If
            Kole_roz_sh = Kole_roz_sh + Sh_day

            '****************************
            If Kole_roz_sh > 286 Then

            M_year = Sh_year + 622
            Kole_roz_m = Kole_roz_sh - 286

            Else

            M_year = Sh_year + 621
            Kole_roz_m = Kole_roz_sh + 79

            End If
            '**************************

            If M_kabise(m_year) = 0 Then
            Day_of_month(2) = 28
            Else
            Day_of_month(2) = 29
            End If


            '----------------



            For M_month = 1 To 12

            If Kole_roz_m < 31 Then Exit For
            Kole_roz_m = Kole_roz_m - Day_of_month(m_month)

            Next


            If Kole_roz_m > Day_of_month(m_month) Then

            Kole_roz_m = Kole_roz_m - Day_of_month(conter1)
            Incr M_month

            End If

            M_day = Kole_roz_m

            Return
            '============================================ ===================
            '============================================ ===================
            Function M_kabise(byref Sal As Word)as Byte

            Local T1 As Integer
            Local T2 As Integer
            Local T3 As Integer
            Local B As Byte
            '=========================
            T1 = Sal Mod 4
            T2 = Sal Mod 100
            T3 = Sal Mod 400
            B = 0
            '=========================
            '------
            If T1 = 0 And T2 <> 0 Then
            B = 1
            End If
            '------
            If T2 = 0 And T3 = 0 Then
            B = 1
            End If
            '------
            M_kabise = B

            End Function

            '============================================ ================
            '============================================ ================

            Function Sh_kabise(byref Sal As Word)as Byte

            Local T1 As Integer
            Local B As Byte
            '==================
            T1 = Sal Mod 33
            B = 0
            '==================
            '------
            If T1 = 1 Or T1 = 5 Or T1 = 9 Or T1 = 13 Or T1 = 17 Or T1 = 22 Or _
            T1 = 26 Or T1 = 30 Then

            B = 1

            End If
            '------
            Sh_kabise = B

            End Function

            کد:
            بیا متغیراشم بهت دادم دیگه دست نبر توش فقط از متغیرا استفاده کن وبه چند نکته دقت کن
            اوی اینکه وقتی میخوای وارد یه زیر برنامه بشی مظمئن باش که متغیرهای داخلشو قبلا استفاده نکرده باشی یعنی وقتی میری تو زیر برنامه متغیر مقداری نداشته باشه که تو محاسباتی که روش انجاممیشه تاثیر بذاره :agree:
            دوم وقتی میخوای برنامه بنویسی همیشه خودتو بذار جای pointer برنامه رو خط به خط دنبال کن :read:
            سوم هیچ وقت به پروتئوس اعتماد نکن :angry:

            دیدگاه


              #7
              پاسخ : برنامه تبدیل تاریخ میلادی به شمسی با ds1307 به زبان بیس(کمک)

              سلام تبدیل تاریخ که کاری به آیسی نداره و من منظورتون رو متوجه نشدم
              برای حالت 4 مد کاری میتونی اول برنامه توی یک حلقه ی اصلی 4تا if بزاری که وضعیت کلیدها رو بخونه و به مد موردنظر پرش کنه بعد اونجا هم بزاریش توی یک حلقه ی دیگه البته با این شرط که اگر یک کلید دیگه زده شد از این حلقه بیاد بیرون و به اون حلقه اصلی برگرده و دوباره وضعیت کلیدها رو چک کنه

              دیدگاه


                #8
                پاسخ : برنامه تبدیل تاریخ میلادی به شمسی با ds1307 به زبان بیس(کمک)

                نوشته اصلی توسط m.plusboy
                [code]
                Const Ds1307w = &HD0 ' Addresses of Ds1307 clock
                Const Ds1307r = &HD1
                Config Clock = User
                Config Date = Dmy , Separator = / ' this will dim the bytes automatic
                'dim other needed variables
                Declare Function M_kabise(byref Sal As Word)as Byte
                Declare Function Sh_kabise(byref Sal As Word)as Byte

                Dim Weekday As Byte
                '--------------
                Dim M_day As Word
                Dim Sh_day As Word
                Dim M_year As Word
                Dim Sh_year As Word
                Dim M_month As Word
                Dim Sh_month As Word
                Dim Kabise As Byte
                Dim Kole_roz_m As Word
                Dim Kole_roz_sh As Word
                '-------------

                '********************************

                Dim Conter1 As Word
                Dim Conter2 As Word
                Dim Conter3 As Word
                Dim Conter4 As Word
                Dim Day_of_month(12) As Byte
                Day_of_month(1) = 31
                Day_of_month(2) = 28
                Day_of_month(3) = 31
                Day_of_month(4) = 30
                Day_of_month(5) = 31
                Day_of_month(6) = 30
                Day_of_month(7) = 31
                Day_of_month(8) = 31
                Day_of_month(9) = 30
                Day_of_month(10) = 31
                Day_of_month(11) = 30
                Day_of_month(12) = 31

                '----------------------

                Dim Temp1 As Integer
                Dim Temp2 As Integer
                Dim Temp3 As Word
                Dim Temp4 As Word
                Dim Temp5 As Byte
                .
                .
                .
                Do
                Gosub Getdatetime
                If _sec = 0 Then
                Gosub M_to_sh
                end if
                Loop
                .
                .
                .
                Getdatetime:
                I2cstart ' Generate start code
                I2cwbyte Ds1307w ' send address
                I2cwbyte 0 ' start address in 1307
                I2cstart ' Generate start code
                I2cwbyte Ds1307r ' send address
                I2crbyte _sec , Ack
                I2crbyte _min , Ack ' MINUTES
                I2crbyte _hour , Ack ' Hours
                I2crbyte Weekday , Ack ' Day of Week
                I2crbyte _day , Ack ' Day of Month
                I2crbyte _month , Ack ' Month of Year
                I2crbyte _year , Nack ' Year
                I2cstop
                _sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
                _day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)

                Return

                Setdate:
                _day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)
                I2cstart ' Generate start code
                I2cwbyte Ds1307w ' send address
                I2cwbyte 4 ' starting address in 1307
                I2cwbyte _day ' Send Data to SECONDS
                I2cwbyte _month ' MINUTES
                I2cwbyte _year ' Hours
                I2cstop
                Return

                Settime:
                _sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
                I2cstart ' Generate start code
                I2cwbyte Ds1307w ' send address
                I2cwbyte 0 ' starting address in 1307
                I2cwbyte _sec ' Send Data to SECONDS
                I2cwbyte _min ' MINUTES
                I2cwbyte _hour ' Hours
                I2cstop
                Return
                '---------------------------- date chenge --------------------------------
                '============================================ =============================
                M_to_sh:
                M_year = 2000 + _year : M_month = _month : M_day = _day
                '----------------
                If M_kabise(m_year) = 0 Then
                Day_of_month(2) = 28
                Else
                Day_of_month(2) = 29
                End If
                '----------------

                Conter2 = M_month - 1
                Kole_roz_m = 0

                For Conter1 = 1 To Conter2
                Kole_roz_m = Kole_roz_m + Day_of_month(conter1)
                Next
                Kole_roz_m = Kole_roz_m + M_day

                '**********************************

                If Kole_roz_m > 79 Then

                Sh_year = M_year - 621
                Kole_roz_sh = Kole_roz_m - 79

                Else

                Sh_year = M_year - 622

                Temp4 = M_year - 1
                Temp5 = M_kabise(temp4)

                If Temp5 = 0 Then
                Kole_roz_sh = Kole_roz_m + 286
                Else
                Kole_roz_sh = Kole_roz_m + 287
                End If

                End If

                '**********************************

                Sh_month = 1

                '****************
                While Kole_roz_sh > 30

                If Sh_month < 7 Then
                Kole_roz_sh = Kole_roz_sh - 31
                Else
                Kole_roz_sh = Kole_roz_sh - 30
                End If

                Incr Sh_month

                Wend
                '***************
                '---------------
                If Kole_roz_sh = 0 Then

                Decr Sh_month
                If Sh_month < 7 Then
                Sh_day = 31
                Else
                Sh_day = 30
                End If
                Else
                Sh_day = Kole_roz_sh
                End If
                '---------------
                Return
                '******************************************** ***********************************
                '****************************** ****************
                'WWW.ISEEE.IR ***************** SHAMSI TO MILADI ****************
                '****************************** ****************
                '******************************************** ***********************************

                Sh_to_m:

                '------------------
                Kole_roz_sh = 0
                '------------------

                If Sh_month > 6 Then

                Kole_roz_sh = 186
                Temp4 = Sh_month - 7
                Temp4 = Temp4 * 30
                Kole_roz_sh = Kole_roz_sh + Temp4

                Else

                Temp4 = Sh_month - 1
                Temp4 = Temp4 * 31
                Kole_roz_sh = Kole_roz_sh + Temp4

                End If
                Kole_roz_sh = Kole_roz_sh + Sh_day

                '****************************
                If Kole_roz_sh > 286 Then

                M_year = Sh_year + 622
                Kole_roz_m = Kole_roz_sh - 286

                Else

                M_year = Sh_year + 621
                Kole_roz_m = Kole_roz_sh + 79

                End If
                '**************************

                If M_kabise(m_year) = 0 Then
                Day_of_month(2) = 28
                Else
                Day_of_month(2) = 29
                End If


                '----------------



                For M_month = 1 To 12

                If Kole_roz_m < 31 Then Exit For
                Kole_roz_m = Kole_roz_m - Day_of_month(m_month)

                Next


                If Kole_roz_m > Day_of_month(m_month) Then

                Kole_roz_m = Kole_roz_m - Day_of_month(conter1)
                Incr M_month

                End If

                M_day = Kole_roz_m

                Return
                '============================================ ===================
                '============================================ ===================
                Function M_kabise(byref Sal As Word)as Byte

                Local T1 As Integer
                Local T2 As Integer
                Local T3 As Integer
                Local B As Byte
                '=========================
                T1 = Sal Mod 4
                T2 = Sal Mod 100
                T3 = Sal Mod 400
                B = 0
                '=========================
                '------
                If T1 = 0 And T2 <> 0 Then
                B = 1
                End If
                '------
                If T2 = 0 And T3 = 0 Then
                B = 1
                End If
                '------
                M_kabise = B

                End Function

                '============================================ ================
                '============================================ ================

                Function Sh_kabise(byref Sal As Word)as Byte

                Local T1 As Integer
                Local B As Byte
                '==================
                T1 = Sal Mod 33
                B = 0
                '==================
                '------
                If T1 = 1 Or T1 = 5 Or T1 = 9 Or T1 = 13 Or T1 = 17 Or T1 = 22 Or _
                T1 = 26 Or T1 = 30 Then

                B = 1

                End If
                '------
                Sh_kabise = B

                End Function

                کد:
                بیا متغیراشم بهت دادم دیگه دست نبر توش فقط از متغیرا استفاده کن وبه چند نکته دقت کن
                اوی اینکه وقتی میخوای وارد یه زیر برنامه بشی مظمئن باش که متغیرهای داخلشو قبلا استفاده نکرده باشی یعنی وقتی میری تو زیر برنامه متغیر مقداری نداشته باشه که تو محاسباتی که روش انجاممیشه تاثیر بذاره :agree:
                دوم وقتی میخوای برنامه بنویسی همیشه خودتو بذار جای pointer برنامه رو خط به خط دنبال کن :read:
                سوم هیچ وقت به پروتئوس اعتماد نکن :angry:


                نوشته اصلی توسط Masoud0711
                سلام تبدیل تاریخ که کاری به آیسی نداره و من منظورتون رو متوجه نشدم
                برای حالت 4 مد کاری میتونی اول برنامه توی یک حلقه ی اصلی 4تا if بزاری که وضعیت کلیدها رو بخونه و به مد موردنظر پرش کنه بعد اونجا هم بزاریش توی یک حلقه ی دیگه البته با این شرط که اگر یک کلید دیگه زده شد از این حلقه بیاد بیرون و به اون حلقه اصلی برگرده و دوباره وضعیت کلیدها رو چک کنه

                دستتون درد نکنه فقط این مد های کاری رو که گفتم مثلا تو برنامه اصلی شرط کلیدهارو هم گذاشتم بعد اگه رفت داخل یکی از مدها و اون مد رو اجرا کرد باید چیکارکنم که اگه کلید دیگری زده شد و خواست مد دیگه ای رو اجرا کنه چطوری از مد ای که داره کار میکنه بره به مد دیگه.....یا اون وضعیت کلیدها رو دائم چک کنه؟
                در روزگاري که لبخند ادم ها بخاطر شکست توست برخيز تا بگيرند.........

                دیدگاه


                  #9
                  پاسخ : برنامه تبدیل تاریخ میلادی به شمسی با ds1307 به زبان بیس(کمک)

                  نوشته اصلی توسط کوروش22



                  دستتون درد نکنه فقط این مد های کاری رو که گفتم مثلا تو برنامه اصلی شرط کلیدهارو هم گذاشتم بعد اگه رفت داخل یکی از مدها و اون مد رو اجرا کرد باید چیکارکنم که اگه کلید دیگری زده شد و خواست مد دیگه ای رو اجرا کنه چطوری از مد ای که داره کار میکنه بره به مد دیگه.....یا اون وضعیت کلیدها رو دائم چک کنه؟
                  میتونی do loop حلقه ی هر مد رو مثلا به این صورت do loop untill pind.0=0 بزاری که اگر pind.0 فشار داده شد از این حلقه خارج شده و به حلقه اصلی بپره
                  یک راه دقیقترم اینه که از وقفه int استفاده کنی که اگه کلید رو فشار داری فورا بپره به برنامه اصلی

                  دیدگاه


                    #10
                    پاسخ : برنامه تبدیل تاریخ میلادی به شمسی با ds1307 به زبان بیس(کمک)

                    نوشته اصلی توسط Masoud0711
                    میتونی do loop حلقه ی هر مد رو مثلا به این صورت do loop untill pind.0=0 بزاری که اگر pind.0 فشار داده شد از این حلقه خارج شده و به حلقه اصلی بپره
                    یک راه دقیقترم اینه که از وقفه int استفاده کنی که اگه کلید رو فشار داری فورا بپره به برنامه اصلی
                    میگم خب نمیشه بجای do-loop از حلقه while استفاده کرد که اگه پین مورد نظر فعال شد اون برنامه اجرا شه؟فک کنم while محدودیت اجرا برنامه داره اگه اشتباه نکنم oo: اصلا امکانش هست :read:
                    میشه واسه این وقفه یه مثال هم بزنی؟ممنون میشم
                    در روزگاري که لبخند ادم ها بخاطر شکست توست برخيز تا بگيرند.........

                    دیدگاه


                      #11
                      پاسخ : برنامه تبدیل تاریخ میلادی به شمسی با ds1307

                      فکر می کنم اگه این تاپیکو کامل بخونی کاملا متوجه بشی
                      http://www.eca.ir/forum2/index.php?topic=38492.msg603369#msg603369

                      دیدگاه

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