اطلاعیه

Collapse
No announcement yet.

برنامه بیسیک ساعت با ds1307

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

    برنامه بیسیک ساعت با ds1307

    سلام به همه برو بچ انجمن
    بلاخره تونستم برنامه ساعت با Ds1307 و 7سگمنت رو بنویسم
    تو پروتئوس کار میکنه فقط الان مشکل کار اینجاست که چه طور باید ساعت رو تنظیم کنم
    برنامه رو میزارم ببینین باید چه کار کرد
    کد:
    $regfile = "M8def.dat"
    $crystal = 8000000
    Dim Minute As Word
    Dim Hour As Word
    Dim K As Word
    Config Scl = Portc.5
    Config Sda = Portc.4
    Dim _sec As Byte , _min As Byte , _hour As Byte
    Dim Strg1 As Word
    Dim Strg2 As Word
    Dim Strg3 As Word
    Dim Saniye1 As Word
    Dim Saniye2 As Word
    Dim Daghighe1 As Word
    Dim Daghighe2 As Word
    Dim Saat1 As Word
    Dim Saat2 As Word
    Config Portd = Output
    Config Portb = Output
    Const Ds1307w = &HD0
    Const Ds1307r = &HD1
    Config Pinc.0 = Input
    Config Pinc.1 = Input
    Config Pinc.2 = Input
    Config Pinc.3 = Input
    Pinc.2 Alias Minute
    Pinc.3 Alias Hour
    Do
    If Minute = 0 Then
    Incr Strg2
    End If
    Gosub Getdatetime
    Strg1 = Makedec(_sec)
    Strg2 = Makedec(_min)
    Strg3 = Makedec(_hour)
    Saniye1 = Strg1 / 10
    Saniye2 = Strg1 Mod 10
    Daghighe1 = Strg2 / 10
    Daghighe2 = Strg2 Mod 10
    Saat1 = Strg3 / 10
    Saat2 = Strg3 Mod 10
    Portb = &B00000001
    Portd = Lookup(saniye2 , Lable1)
    Waitms 2
    Portb = &B00000010
    Portd = Lookup(saniye1 , Lable1)
    Waitms 2
    Portb = &B00000100
    Portd = Lookup(daghighe2 , Lable1)
    Waitms 2
    Portb = &B00001000
    Portd = Lookup(daghighe1 , Lable1)
    Waitms 2
    Portb = &B00010000
    Portd = Lookup(saat2 , Lable1)
    Waitms 2
    Portb = &B00100000
    Portd = Lookup(saat1 , Lable1)
    Waitms 2
    Loop
    End
    Getdatetime:
    I2cstart
    I2cwbyte Ds1307w
    I2cwbyte 0
    I2cstart
    I2cwbyte Ds1307r
    I2crbyte _sec , Ack
    I2crbyte _min , Ack
    I2crbyte _hour , Nack
    I2cstop
    Return
    Lable1:
    Data &B11000000                       '00111111
    Data &B11111001                       '00000110
    Data &B10100100                       '01011011
    Data &B10110000                       '01001111
    Data &B10011001                       '01100110
    Data &B10010010                       '01101101
    Data &B10000010                       '01111101
    Data &B11111000                       '00000111
    Data &B10000000                       '01111111
    Data &B10010000                  '01101111

    #2
    پاسخ : برنامه بیسیک ساعت با ds1307

    سلام.

    برای این کار باید یه لوپ دیگه درست کنی که داخلش از ds1307 دیتا خونده نشه و یا روی سگمنت ها 0 رو نشون بدی یا آخرین عددی که داخل متغییر های Strg1 -Strg2 -Strg3 هست رو نشون بدی.
    بعد داخل این لوپ کافیه از چندین کلید برای کم و زیاد کردن مقدار متغیرها استفاده کنی. و در آخر یک کلید هم برای ذخیره بگذاری. که وقتی اون کلید رو زدی به یک برچسب بپره و مقدار ها رو داخل ds1307 ذخیره بکنه.

    من بهت پیشنهاد میکنم برای رفرش سگمنت ها از سرریز تایمر استفاده کنی.
    اگه برای خوندن کلید ها از دستور Debounce استفاده میکنی 25 میلی ثانیه تاخیر ایجاد میکنه و باعث چشمک زدن سگمنت ها میشه و خیلی به چشم میاد ولی اگه از سرریز تایمر استفاده کنی دیگه این اتفاق نمیفته.
    www.icesi.ir

    دیدگاه


      #3
      پاسخ : برنامه بیسیک ساعت با ds1307

      نوشته اصلی توسط hamed_avr
      سلام به همه برو بچ انجمن
      بلاخره تونستم برنامه ساعت با Ds1307 و 7سگمنت رو بنویسم
      تو پروتئوس کار میکنه فقط الان مشکل کار اینجاست که چه طور باید ساعت رو تنظیم کنم
      برنامه رو میزارم ببینین باید چه کار کرد
      کد:
      $regfile = "M8def.dat"
      $crystal = 8000000
      Dim Minute As Word
      Dim Hour As Word
      Dim K As Word
      Config Scl = Portc.5
      Config Sda = Portc.4
      Dim _sec As Byte , _min As Byte , _hour As Byte
      Dim Strg1 As Word
      Dim Strg2 As Word
      Dim Strg3 As Word
      Dim Saniye1 As Word
      Dim Saniye2 As Word
      Dim Daghighe1 As Word
      Dim Daghighe2 As Word
      Dim Saat1 As Word
      Dim Saat2 As Word
      Config Portd = Output
      Config Portb = Output
      Const Ds1307w = &HD0
      Const Ds1307r = &HD1
      Config Pinc.0 = Input
      Config Pinc.1 = Input
      Config Pinc.2 = Input
      Config Pinc.3 = Input
      Pinc.2 Alias Minute
      Pinc.3 Alias Hour
      Do
      If Minute = 0 Then
      Incr Strg2
      End If
      Gosub Getdatetime
      Strg1 = Makedec(_sec)
      Strg2 = Makedec(_min)
      Strg3 = Makedec(_hour)
      Saniye1 = Strg1 / 10
      Saniye2 = Strg1 Mod 10
      Daghighe1 = Strg2 / 10
      Daghighe2 = Strg2 Mod 10
      Saat1 = Strg3 / 10
      Saat2 = Strg3 Mod 10
      Portb = &B00000001
      Portd = Lookup(saniye2 , Lable1)
      Waitms 2
      Portb = &B00000010
      Portd = Lookup(saniye1 , Lable1)
      Waitms 2
      Portb = &B00000100
      Portd = Lookup(daghighe2 , Lable1)
      Waitms 2
      Portb = &B00001000
      Portd = Lookup(daghighe1 , Lable1)
      Waitms 2
      Portb = &B00010000
      Portd = Lookup(saat2 , Lable1)
      Waitms 2
      Portb = &B00100000
      Portd = Lookup(saat1 , Lable1)
      Waitms 2
      Loop
      End
      Getdatetime:
      I2cstart
      I2cwbyte Ds1307w
      I2cwbyte 0
      I2cstart
      I2cwbyte Ds1307r
      I2crbyte _sec , Ack
      I2crbyte _min , Ack
      I2crbyte _hour , Nack
      I2cstop
      Return
      Lable1:
      Data &B11000000                      '00111111
      Data &B11111001                      '00000110
      Data &B10100100                      '01011011
      Data &B10110000                      '01001111
      Data &B10011001                      '01100110
      Data &B10010010                      '01101101
      Data &B10000010                      '01111101
      Data &B11111000                      '00000111
      Data &B10000000                      '01111111
      Data &B10010000                 '01101111
      سلام
      اگه میشه در مورد این برنامه کمی توضیح بدین و چطوری ایسی رو به میکرو وصل کنم
      ممنون
      r.pسابق

      دیدگاه


        #4
        پاسخ : برنامه بیسیک ساعت با ds1307

        اینا رو به برنامه اضافه کن. فقط هر وقت خواستی پدیت کنی مقادیر زمان رو تغییر بده و این دو تا رو فراخوانی کن.

        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

        دیدگاه


          #5
          پاسخ : برنامه بیسیک ساعت با ds1307

          یک پست با همین عنوان آقای hamed_avr عنوان کرده بود که با هم برنامه رو کامل کردیم

          http://www.eca.ir/forum2/index.php?topic=16409.0

          www.icesi.ir

          دیدگاه

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