اطلاعیه

Collapse
No announcement yet.

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

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

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

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

    کد:
    $regfile = "m32def.dat"
    $crystal = 8000000
    
    Config Porta = Output
    Config Portb = Output
    Config Portd = Output
    
    
    Config Pinc.5 = Input
    Config Pinc.6 = Input
    Config Pinc.7 = Input
    
    
    $lib "Ds1307clock.lib"
    
    Config Sda = Portc.1
    Config Scl = Portc.0
    
    
    Dim Second As Byte
     Dim Minute As Byte
      Dim Hour As Byte
    
    Dim H2 As Word
    Dim H1 As Word
    Dim M2 As Word
    Dim M1 As Word
    Dim S2 As Word
    Dim S1 As Word
    
    
    Const Ds1307w = &HD0
    Const Ds1307r = &HD1
    
    
     Gosub Ds1307h
    Main:
    Do
    
     Gosub Ds1307
      Gosub Korosh
    
     Gosub Keyscan
    
    
    Loop
    
    
    
    
    Korosh:
    
    Second = Makedec(second)
       Minute = Makedec(minute)
         Hour = Makedec(hour)
    
    If Second > 59 Then Second = 0
      If Minute > 59 Then Minute = 0
    If Hour > 23 Then Hour = 0
    
    
    
    
         H1 = Hour / 10
    
         H2 = Hour Mod 10
    
    
    
         M1 = Minute / 10
    
         M2 = Minute Mod 10
    
    
         S1 = Second / 10
    
         S2 = Second Mod 10
    
    
         Set Portb.1
         Reset Portb.2
         Reset Portb.3
         Reset Portb.4
         Reset Portb.5
         Reset Portb.6
         Porta = Lookup(h2 , Dta)
         Waitms 2
    
    
         Reset Portb.1
         Set Portb.2
         Reset Portb.3
         Reset Portb.4
         Reset Portb.5
         Reset Portb.6
         Porta = Lookup(h1 , Dta)
         Waitms 2
    
    
         Reset Portb.1
         Reset Portb.2
         Set Portb.3
         Reset Portb.4
         Reset Portb.5
         Reset Portb.6
         Porta = Lookup(m2 , Dta)
         Waitms 2
    
    
         Reset Portb.1
         Reset Portb.2
         Reset Portb.3
         Set Portb.4
         Reset Portb.5
         Reset Portb.6
         Porta = Lookup(m1 , Dta)
         Waitms 2
    
    
    
         Reset Portb.1
         Reset Portb.2
         Reset Portb.3
         Reset Portb.4
         Set Portb.5
         Reset Portb.6
         Porta = Lookup(s2 , Dta)
         Waitms 2
    
    
    
         Reset Portb.1
         Reset Portb.2
         Reset Portb.3
         Reset Portb.4
         Reset Portb.5
         Set Portb.6
         Porta = Lookup(s1 , Dta)
         Waitms 2
    
    
     Return
    
    
    
    
    Ds1307:
    I2cstart
    I2cwbyte Ds1307w
    I2cwbyte 0
    I2cstart
    I2cwbyte Ds1307r
    I2crbyte Second , Ack
    I2crbyte Minute , Ack
    I2crbyte Hour , Nack
    I2cstop
     Return
    
    
    
    Ds1307h:
    If Second > 59 Then Second = 0
    Second = Makebcd(second)
    If Minute > 59 Then Minute = 0
    Minute = Makebcd(minute)
    If Hour > 23 Then Hour = 0
    Hour = Makebcd(hour)
    I2cstart
    I2cwbyte Ds1307w
    I2cwbyte 0
    I2cstart
    I2cwbyte Second
    I2cwbyte Minute
    I2cwbyte Hour
    I2cstop
     Return
    
    Keyscan:
    Debounce Pinc.5 , 0 , Yseco , Sub
    Debounce Pinc.6 , 0 , Ymin , Sub
    Debounce Pinc.7 , 0 , Yhour , Sub
    Return
    
    Yseco:
    
    Incr Second
    If Second > 59 Then Second = 0
    Second = Makebcd(second)
     I2cstart
    I2cwbyte Ds1307w
    I2cwbyte 0
    I2cwbyte Second
    I2cstop
     Return
    
    Ymin:
    
    Incr Minute
    If Minute > 59 Then Minute = 0
    Minute = Makebcd(minute)
     I2cstart
    I2cwbyte Ds1307w
    I2cwbyte 1
    I2cwbyte Minute
    I2cstop
     Return
    
    Yhour:
    
    Incr Hour
    If Hour > 23 Then Hour = 0
    Hour = Makebcd(hour)
     I2cstart
    I2cwbyte Ds1307w
    I2cwbyte 2
    I2cwbyte Hour
    I2cstop
     Return
    
    
    End
    
    Dta:
    Data &HC0 , &HF9 , &HA4 , &HB0 , &H99 , &H92 , &H82 , &HF8 , &H80 , &H90 , &HBF

    لینک برنامه:

    http://upir.ir/934/saat-ba-ds1307.zip
    در روزگاری که لبخند ادم ها بخاطر شکست توست برخیز تا بگیرند.........

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

    اگه با کدویژن کار کنی میتونم کمکت کنم

    دیدگاه


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

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

      دیدگاه


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

        کسی نیست مشکل منو حل کنه اینهمه برنامه نویس اینجا هست یکی بیاد کمک کنه :angry: :angry: :angry: :angry:

        این برنامه تبدیل تاریخ میلادی هست اما وقتی برنامه تبدیل میلادی به شمسی رو بهش اضافه میکنم قاطی میکنه یکی بیاد کمک کنههههههههه

        این تاریخ میلادی که تست کردم جواب هم داد

        کد:
        '           "
        
        '******************************************************************************'
        $regfile = "m32def.dat"
        $crystal = 1000000
        
        Config Porta = Output
        Config Portb = Output
        Config Portd = Output
        
        Config Pinc.5 = Input
        Config Pinc.6 = Input
        Config Pinc.7 = Input
        
        
        $lib "Ds1307clock.lib"
        
        Config Sda = Portc.1
        Config Scl = Portc.0
        
        
        Dim _sec As Byte
         Dim _min As Byte
          Dim _hour As Byte
        
        
        
        Dim Y2 As Word
        Dim Y1 As Word
        Dim Mo2 As Word
        Dim Mo1 As Word
        Dim D2 As Word
        Dim D1 As Word
        
        Dim _day As Integer
        Dim _month As Integer
        Dim _year As Integer
        
        
        Dim Weekday As Integer
        
        
        
        
        
        Const Ds1307w = &HD0
        Const Ds1307r = &HD1
        
        
        
        Main:
        Do
        
         Gosub Ds1307
          Gosub Saat
          Gosub Key
        
        
        Loop
        
        
        
        
        Key:
        Debounce Pinc.5 , 0 , Dayy , Sub
        Debounce Pinc.6 , 0 , Monthh , Sub
        Debounce Pinc.7 , 0 , Yearr , Sub
        Return
        
        
        Saat:
        
        
        If _day > 31 Then _day = 0
        
        
        
          If _month > 12 Then _month = 0
        
        
        
        
        If _year > 99 Then _year = 0
        
        
        
        _day = Makedec(_day)
              _month = Makedec(_month)
               _year = Makedec(_year)
        
        
        
        
        
             Y1 = _year / 10
        
             Y2 = _year Mod 10
        
        
        
             Mo1 = _month / 10
        
             Mo2 = _month Mod 10
        
        
             D1 = _day / 10
        
             D2 = _day Mod 10
        
        
             Set Portb.1
             Reset Portb.2
             Reset Portb.3
             Reset Portb.4
             Reset Portb.5
             Reset Portb.6
             Porta = Lookup(y2 , Dta)
             Waitms 2
        
        
             Reset Portb.1
             Set Portb.2
             Reset Portb.3
             Reset Portb.4
             Reset Portb.5
             Reset Portb.6
             Porta = Lookup(y1 , Dta)
             Waitms 2
        
        
             Reset Portb.1
             Reset Portb.2
             Set Portb.3
             Reset Portb.4
             Reset Portb.5
             Reset Portb.6
             Porta = Lookup(mo2 , Dta)
             Waitms 2
        
        
             Reset Portb.1
             Reset Portb.2
             Reset Portb.3
             Set Portb.4
             Reset Portb.5
             Reset Portb.6
             Porta = Lookup(mo1 , Dta)
             Waitms 2
        
        
        
             Reset Portb.1
             Reset Portb.2
             Reset Portb.3
             Reset Portb.4
             Set Portb.5
             Reset Portb.6
             Porta = Lookup(d2 , Dta)
             Waitms 2
        
        
        
             Reset Portb.1
             Reset Portb.2
             Reset Portb.3
             Reset Portb.4
             Reset Portb.5
             Set Portb.6
             Porta = Lookup(d1 , Dta)
             Waitms 2
        
        
        
         Return
        
        
        
        
        Ds1307:
         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
        
        
        
        
        
        
        
        
        Dayy:
        Incr _day
        If _day > 31 Then _day = 0
        _day = Makebcd(_day)
        I2cstart
        I2cwbyte Ds1307w
        I2cwbyte 4
        I2cwbyte _day
        I2cstop
        Return
        
        
        
        Monthh:
        Incr _month
        If _month > 12 Then _month = 0
        _month = Makebcd(_month)
        I2cstart
        I2cwbyte Ds1307w
        I2cwbyte 5
        I2cwbyte _month
        I2cstop
        Return
        
        
        Yearr:
        Incr _year
        If _year > 99 Then _year = 0
        _year = Makebcd(_year)
        I2cstart
        I2cwbyte Ds1307w
        I2cwbyte 6
        I2cwbyte _year
        I2cstop
        Return
        
        
        
        
        
        
        
        
        Dta:
        Data &HC0 , &HF9 , &HA4 , &HB0 , &H99 , &H92 , &H82 , &HF8 , &H80 , &H90 , &HBF


        اینم برنامه تبدیل میلادی به شمسی که قاطی میکنه سال رو که ناقص نشون میده دهگان سال رو نشون نمیده تو تنظیم کلیدها هم قاطی میکنه

        کد:
        '           "
        
        '******************************************************************************'
        $regfile = "m32def.dat"
        $crystal = 1000000
        
        Config Porta = Output
        Config Portb = Output
        Config Portd = Output
        
        Config Pinc.5 = Input
        Config Pinc.6 = Input
        Config Pinc.7 = Input
        
        
        $lib "Ds1307clock.lib"
        
        Config Sda = Portc.1
        Config Scl = Portc.0
        
        
        Dim _sec As Byte
         Dim _min As Byte
          Dim _hour As Byte
        
        
        
        Dim Y2 As Word
        Dim Y1 As Word
        Dim Mo2 As Word
        Dim Mo1 As Word
        Dim D2 As Word
        Dim D1 As Word
        
        Dim _day As Integer
        Dim _month As Integer
        Dim _year As Integer
        
        
        
        
        
        Dim Myear As Integer
        Dim Mday As Integer
        Dim Weekday As Integer
        Dim Mmonth As Integer
        Dim Mdayofyear As Integer
        Dim Myear_ As Integer
        
        Dim Jday As Integer
        Dim Jmonth As Integer
        Dim Jyear As Integer
        Dim Jdayofyear As Integer
        
        Dim Gnumdayofyear As Integer
        Dim Isleapyear As Bit
        Dim Isleapyearp As Bit
        
        Dim Iloop As Byte
        Dim Temp1 As Integer
        Dim Temp2 As Integer
        Dim Temp3 As Integer
        Dim Temp4 As Integer
        
        Dim Jmonth_a(12) As Byte
        Dim Mmonth_a(12) As Byte
        
        
        
        
        Const Ds1307w = &HD0
        Const Ds1307r = &HD1
        
        
        
        Main:
        Do
        
         Gosub Ds1307
          Gosub Saat
          Gosub Key
        
        
        Loop
        
        
        
        
        Key:
        Debounce Pinc.5 , 0 , Dayy , Sub
        Debounce Pinc.6 , 0 , Monthh , Sub
        Debounce Pinc.7 , 0 , Yearr , Sub
        Return
        
        
        Saat:
        
        
        If _day > 31 Then _day = 0
        
        
          If _month > 12 Then _month = 0
        
        
        If _year > 99 Then _year = 0
        
        
        
        Mmonth_a(1) = 31
        
        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
        Mday = _day
        Mmonth = _month
        
        
        Temp1 = Myear Mod 4
        Temp2 = Myear Mod 100
        Temp3 = Myear Mod 400
        Temp4 = Temp1 And Temp2
        
        If Temp4 <> 0 Or Temp3 = 0 Then
        Mmonth_a(2) = 28
        Else
        Mmonth_a(2) = 29
        End If
        
        
        Myear_ = Myear - 1
        Temp1 = Myear_ Mod 4
        Temp2 = Myear_ Mod 100
        Temp3 = Myear_ Mod 400
        Temp4 = Temp1 And Temp2
        
        If Temp4 <> 0 Or Temp3 = 0 Then
        Reset Isleapyearp
        Else
        Set Isleapyearp
        End If
        
        Temp1 = Mmonth - 1
        
        For Iloop = 1 To Temp1
        Mdayofyear = Mmonth_a(iloop) + Mdayofyear
        Next
        Mdayofyear = Mday + Mdayofyear
        
        
        
        If Mdayofyear > 79 Then
        
        Temp1 = Mdayofyear - 79
        Jyear = Myear - 621
        
        If Temp1 < 186 Then
        
        Temp2 = Temp1 Mod 31
        Temp3 = Temp1 / 31
        
        If Temp2 = 0 Then
        Jmonth = Temp3
        Jday = 31
        Else
        Jmonth = Temp3 + 1
        Jday = Temp2
        End If
        
        Else
        
        Temp2 = Temp1 - 186
        Temp3 = Temp2 Mod 30
        Temp4 = Temp2 / 30
        
        If Temp3 = 0 Then
        Jmonth = Temp4 + 6
        Jday = 30
        Else
        Jmonth = Temp4 + 7
        Jday = Temp3
        End If
        
        End If
        
        Else
        
        Jyear = Myear - 622
        
        If Isleapyearp = 1 Then
        Mdayofyear = Mdayofyear + 11
        Else
        Mdayofyear = Mdayofyear + 10
        End If
        
        Temp2 = Mdayofyear Mod 30
        Temp3 = Mdayofyear / 30
        
        If Temp2 = 0 Then
        Jmonth = Temp3 + 9
        Jday = 30
        Else
        Jmonth = Temp3 + 10
        Jday = Temp2
        End If
        
        End If
        
        Mdayofyear = 0
        
        
             Y1 = Jyear / 10
        
             Y2 = Jyear Mod 10
        
        
        
             Mo1 = Jmonth / 10
        
             Mo2 = Jmonth Mod 10
        
        
             D1 = Jday / 10
        
             D2 = Jday Mod 10
        
        
             Set Portb.1
             Reset Portb.2
             Reset Portb.3
             Reset Portb.4
             Reset Portb.5
             Reset Portb.6
             Porta = Lookup(y2 , Dta)
             Waitms 2
        
        
             Reset Portb.1
             Set Portb.2
             Reset Portb.3
             Reset Portb.4
             Reset Portb.5
             Reset Portb.6
             Porta = Lookup(y1 , Dta)
             Waitms 2
        
        
             Reset Portb.1
             Reset Portb.2
             Set Portb.3
             Reset Portb.4
             Reset Portb.5
             Reset Portb.6
             Porta = Lookup(mo2 , Dta)
             Waitms 2
        
        
             Reset Portb.1
             Reset Portb.2
             Reset Portb.3
             Set Portb.4
             Reset Portb.5
             Reset Portb.6
             Porta = Lookup(mo1 , Dta)
             Waitms 2
        
        
        
             Reset Portb.1
             Reset Portb.2
             Reset Portb.3
             Reset Portb.4
             Set Portb.5
             Reset Portb.6
             Porta = Lookup(d2 , Dta)
             Waitms 2
        
        
        
             Reset Portb.1
             Reset Portb.2
             Reset Portb.3
             Reset Portb.4
             Reset Portb.5
             Set Portb.6
             Porta = Lookup(d1 , Dta)
             Waitms 2
        
        
        
         Return
        
        
        
        
        Ds1307:
         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
        
        
        
        
        
        
        
        
        Dayy:
        Incr _day
        If _day > 31 Then _day = 0
        _day = Makebcd(_day)
        I2cstart
        I2cwbyte Ds1307w
        I2cwbyte 4
        I2cwbyte _day
        I2cstop
        Return
        
        
        
        Monthh:
        Incr _month
        If _month > 12 Then _month = 0
        _month = Makebcd(_month)
        I2cstart
        I2cwbyte Ds1307w
        I2cwbyte 5
        I2cwbyte _month
        I2cstop
        Return
        
        
        Yearr:
        Incr _year
        If _year > 99 Then _year = 0
        _year = Makebcd(_year)
        I2cstart
        I2cwbyte Ds1307w
        I2cwbyte 6
        I2cwbyte _year
        I2cstop
        Return
        
        
        
        
        
        
        
        
        Dta:
        Data &HC0 , &HF9 , &HA4 , &HB0 , &H99 , &H92 , &H82 , &HF8 , &H80 , &H90 , &HBF
        لطفا کمک کنید اگه کسی برنامه تست شده اش رو داره بذاره ببینم ایرادم کجاست یا همین برنامه رو اصلاح کنید دمتون گرم :angry: اگه فایل شبیه سازی و برنامه رو لازم دارید تو پست بالا گذاشتم لینکش رو
        در روزگاری که لبخند ادم ها بخاطر شکست توست برخیز تا بگیرند.........

        دیدگاه


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

          من دو روز پیش یه تابلو روان با ساعت و تاریخ شمسی طراحی کردم،خیلی عالی هم داره کار میکنه !
          البته منم سی کار میکنم.

          توصیه میکنم هرچه سریعتر زبان سی رو یاد بگیری !
          شاید اولش سخت باشه ولی پایانش شیرینه
          * هر گاه خدا بخواهد بنده ای را خوار کند، دانش را از او دور سازد.
          * سخن بگویید تا شناخته شوید، زیرا که انسان در زیر زبان خود پنهان است.
          *بدترین دوست،آ‌ کسی است که برای او به رنج و زحمت افتی.
          حضرت علی(ع)
          آموزش AVR به ساده ترین زبان ممکن : Noise.Blog.IR

          دیدگاه


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

            دوستان فعلا راه حل مشکل من رو بگید چون باید تمومش کنم حیاتی شده فعلا وقت زبان سی یاد گرفتن ندارم باید با همین بسکام تمومش کنم نمیدونم ایرادش چیه میلادی رو خوب نشون میده ولی تابع تبدیل رو اضافه که میکنم هم تو تنظیم روز و ماه و سال ایراد داره هم تو نمایش سال
            نمیدونم تابع تبدیلش درست هست یا نه از همین انجمن و سایتهای دیگه تابع رو برداشتم مطمئن نیستم درست کار میکنه یا نه :angry:
            در روزگاری که لبخند ادم ها بخاطر شکست توست برخیز تا بگیرند.........

            دیدگاه

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