اطلاعیه

Collapse
No announcement yet.

ساعت

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

    ساعت

    سلام دوستان من دستورات زیر را در بیسکام کامپایل کر دم و ال سی دی را به میکرو بستم البته rtc 32768hz را وصل کردم
    این همون برنامه ساعته
    من یک سوال داشتم چگونه میشه ساعت و تاریخ را دستی تنظیم کرد (منظورم با اتصال میکرو سوئیچ بود )

    $regfile = "M8def.dat"
    $crystal = 8000000
    Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2, _ Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4
    Config Lcd = 16 * 2
    CONFIG CLOCK = SOFT , GOSUB = SECTIC
    ENABLE INTERRUPTS
    DATE$ = "21/05/86"
    TIME$ = "1058"
    DO
    LOOP
    END
    SECTIC:
    LCD TIME$
    LOCATE 2,1
    LCD DATE$
    RETURN

    سوال دوم :
    برنامه زیر برنامه یک ساعت است که از کتاب کاهه انتخاب کردم
    این ساعت زیاد دقیق نیست
    من یک سوال داشتم ایا می شود برنامه زیر را با تایمر 2 مخلوط کرد و زمان را دقیق کرد
    $regfile = "M8def.dat"
    $crystal = 8000000
    Config Lcdpin = Pin , Db4 = Portc.1 , Db5 = Portc.2 , Db6 = Portc.3 , Db7 = _
    Portc.4 , E = Portd.2 , Rs = Portd.3
    Ddrc.0 = 0 : Portc.0 = 1
    Ddrd.7 = 0 : Portd.7 = 1
    Config Lcd = 16 * 2
    Declare Sub Incr_h
    Declare Sub Incr_m
    Dim S As Byte , M As Byte , H As Byte
    Dim A As Bit
    Main:
    S = 0 : M = 0 : H = 1
    Cls : Home : Lcd "time:"
    Do
    A = Pinc.0
    If A = 0 Then Call Incr_h
    If Pind.7 = 0 Then Call Incr_m
    Locate 2 , 1
    Lcd "" ; H ; ":" ; M ; ":" ; S
    Waitms 250
    Incr S
    If S > 59 Then
    S = 0
    Incr M
    Shiftcursor Left , 2
    Lcd " "
    If M > 59 Then
    Incr H
    M = 0
    If H > 12 Then
    jmp main
    End If
    End If
    End If
    Loop
    End

    Incr_m:
    Incr M
    If M > 59 Then
    Cls : Home : Lcd "time:"
    M = 0
    End If
    Return

    Incr_h:

    #2
    پاسخ : ساعت

    سلام :
    دوست عزیز ، شما می توانید در فواصل زمانی مناسب یک پورت را که میکرو سوئییچ ها به آن وصل است را چک کنید و با تغییر آن تغییرات لازم در متغییر های ساعت و دقیقه را انجام دهید .
    من قبلاً یک ساعت ساختم اما با 8051 تنظیم کردن آن به این شکل بود که 5 میکرو سوئیچ داشت که راست و چپ و بالا و پائین و تائید را تشکیل می دادند .
    با راست و چپ روی ساعت و دقیقه و ثانیه حرکت می کرد و با بالا و پائین هم مقادیر آن را تغییر می داد و در انتها با یک کلید که کلید مود بود آنرا تائید می کردیم .
    البته این پروژه در بخش 8051 موجود است و می توانید آنرا ببینید .

    اگر لازم بود بیشتر برایتان توضیح خواهم داد.
    موفق باشید

    دیدگاه


      #3
      پاسخ : ساعت

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

      دیدگاه


        #4
        پاسخ : ساعت

        سلام.
        تو برنامه اولتون , داخل حلقه دو , لوپ - باید چند تا کلید رو که به دلخواه برای تنظیم ساعت و تاریخ میگذاری چک کنی.
        هم با دستور دیبانس و هم با چک کردن معمولی پین مورد نظر.
        و با توجه به کلیدی که فشرده شده , ساعت و تاریخ رو کم و زیاد کنی.
        فقط یادت نره که یه وقفه چند صد میلی ثانیه ای هم اگر کلیدی فشرده شده بود بعد از چک کردن کلیدها بذاری تا قاطی نکنه.
        مثلا 150 میلی ثانیه.(بگو آخه 150 , چند صد میشه پسر خوب).
        الهم عجل لولیک الفرج

        دیدگاه


          #5
          پاسخ : ساعت

          اگه با 7 سگمنت بنویسی یه راه رو بلدم که هم می تونی به تعداد سگمنت هات سوئیچ بذاری
          و می تونی با یه پین چند تا کلید رو چک کنی
          اگه خواستی pm بده واست ارسال کنم
          برای تشکر از امتیاز + استفاده کنید

          دیدگاه


            #6
            پاسخ : ساعت

            نوشته اصلی توسط Iran-PC
            سلام.
            تو برنامه اولتون , داخل حلقه دو , لوپ - باید چند تا کلید رو که به دلخواه برای تنظیم ساعت و تاریخ میگذاری چک کنی.
            هم با دستور دیبانس و هم با چک کردن معمولی پین مورد نظر.
            و با توجه به کلیدی که فشرده شده , ساعت و تاریخ رو کم و زیاد کنی.
            فقط یادت نره که یه وقفه چند صد میلی ثانیه ای هم اگر کلیدی فشرده شده بود بعد از چک کردن کلیدها بذاری تا قاطی نکنه.
            مثلا 150 میلی ثانیه.(بگو آخه 150 , چند صد میشه پسر خوب).
            ممنون
            ولی میشه اینهایی را که گفتی عملا به برنامه تبدیل کنی

            دیدگاه


              #7
              پاسخ : ساعت

              نوشته اصلی توسط electronic6000
              اگه با 7 سگمنت بنویسی یه راه رو بلدم که هم می تونی به تعداد سگمنت هات سوئیچ بذاری
              و می تونی با یه پین چند تا کلید رو چک کنی
              اگه خواستی pm بده واست ارسال کنم
              ممنون میشم اگه لطف کنی

              دیدگاه


                #8
                پاسخ : ساعت

                نوشته اصلی توسط bnmo

                ممنون
                ولی میشه اینهایی را که گفتی عملا به برنامه تبدیل کنی
                چشم.
                شب کدش رو قرار میدم.
                الهم عجل لولیک الفرج

                دیدگاه


                  #9
                  پاسخ : ساعت

                  نوشته اصلی توسط Iran-PC

                  ممنون
                  ولی میشه اینهایی را که گفتی عملا به برنامه تبدیل کنی
                  چشم.
                  شب کدش رو قرار میدم.
                  [/quote]
                  یاشاسن

                  دیدگاه


                    #10
                    پاسخ : ساعت

                    $regfile = "M8def.dat"
                    $crystal = 8000000
                    Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4
                    Config Lcd = 16 * 2
                    Config Clock = Soft , Gosub = Sectic
                    Enable Interrupts
                    Date$ = "21/05/86"
                    Time$ = "1058"
                    _hour = 10
                    _min = 35
                    _sec = 58
                    Cls
                    Do
                    If Pinb.0 = 1 Then
                    If _hour < 23 Then
                    _hour = _hour + 1
                    Else
                    _hour = 0
                    End If
                    End If

                    If Pinb.1 = 1 Then
                    If _min < 59 Then
                    _min = _min + 1
                    Else
                    _min = 0
                    End If
                    End If


                    If Pinb.2 = 1 Then
                    If _sec < 59 Then
                    _sec = _sec + 1
                    Else
                    _sec = 0
                    End If
                    End If


                    If Pinb.3 = 1 Then
                    If _year < 98 Then
                    _year = _year + 1
                    Else
                    _year = 0
                    End If
                    End If


                    If Pinb.4 = 1 Then
                    If _month < 12 Then
                    _month = _month + 1
                    Else
                    _month = 1
                    End If
                    End If


                    If Pinb.5 = 1 Then
                    If _day < 30 Then
                    _day = _day + 1
                    Else
                    _day = 1
                    End If
                    End If



                    Loop
                    End
                    Sectic:
                    Lcd Time$
                    Locate 2 , 1
                    Lcd Date$
                    Return
                    الهم عجل لولیک الفرج

                    دیدگاه


                      #11
                      پاسخ : ساعت

                      سلام
                      ممنون ار لطف تون
                      من یک سوال داشتم ایا می شود برنامه زیر را با تایمر 2 مخلوط کرد و زمان را دقیق کرد
                      $regfile = "M8def.dat"
                      $crystal = 8000000
                      Config Lcdpin = Pin , Db4 = Portc.1 , Db5 = Portc.2 , Db6 = Portc.3 , Db7 = _
                      Portc.4 , E = Portd.2 , Rs = Portd.3
                      Ddrc.0 = 0 : Portc.0 = 1
                      Ddrd.7 = 0 : Portd.7 = 1
                      Config Lcd = 16 * 2
                      Declare Sub Incr_h
                      Declare Sub Incr_m
                      Dim S As Byte , M As Byte , H As Byte
                      Dim A As Bit
                      Main:
                      S = 0 : M = 0 : H = 1
                      Cls : Home : Lcd "time:"
                      Do
                      A = Pinc.0
                      If A = 0 Then Call Incr_h
                      If Pind.7 = 0 Then Call Incr_m
                      Locate 2 , 1
                      Lcd "" ; H ; ":" ; M ; ":" ; S
                      Waitms 250
                      Incr S
                      If S > 59 Then
                      S = 0
                      Incr M
                      Shiftcursor Left , 2
                      Lcd " "
                      If M > 59 Then
                      Incr H
                      M = 0
                      If H > 12 Then
                      jmp main
                      End If
                      End If
                      End If
                      Loop
                      End

                      Incr_m:
                      Incr M
                      If M > 59 Then
                      Cls : Home : Lcd "time:"
                      M = 0
                      End If
                      Return

                      Incr_h:
                      Incr H
                      If H > 12 Then
                      H = 1 : Cls : Home : Lcd "time:"
                      End If
                      Return

                      دیدگاه


                        #12
                        پاسخ : ساعت

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

                        دیدگاه


                          #13
                          پاسخ : ساعت

                          سلام :
                          شما باید تایمر را با زیر برنامه های مربوطه طوری تنظیم کنید که زمانهای یک ثانیه دقیق بسازه ، سپس با استفاده از آن می توانید ساعت دقیقی داشته باشید .
                          ضمناً در سایت پر است از پروژهای ساعت انجام شده از آنها هم می توانید کمک بگیرید .
                          در بخش پروژ های AVR دنبالش بگردید حتماً به جواب می رسید .

                          موفق باشید

                          دیدگاه


                            #14
                            پاسخ : ساعت

                            سلام
                            ممنون که جوابمو دادی
                            منظور از puul up کردن چیه
                            مثلا در برنامه های بالا دوتا از پین ها را به صورت پول اپ با دستور ddr به عنوان ورودی تعریف کرده منظور چیست
                            من از دستور debounce استفاده کردم و لی جواب نداد به نظر شما چر جواب نداد
                            چه فرقی با هم دارند
                            regfile = "M8def.dat"
                            $crystal = 8000000
                            Config Lcdpin = Pin , Db4 = Portc.1 , Db5 = Portc.2 , Db6 = Portc.3 , Db7 = _
                            Portc.4 , E = Portd.2 , Rs = Portd.3
                            Ddrc.0 = 0 : Portc.0 = 1
                            Ddrd.7 = 0 : Portd.7 = 1
                            Config Lcd = 16 * 2
                            Declare Sub Incr_h
                            Declare Sub Incr_m
                            Dim S As Byte , M As Byte , H As Byte
                            Dim A As Bit
                            Main:
                            S = 0 : M = 0 : H = 1
                            Cls : Home : Lcd "time:"
                            Do
                            A = Pinc.0
                            If A = 0 Then Call Incr_h
                            If Pind.7 = 0 Then Call Incr_m
                            Locate 2 , 1
                            Lcd "" ; H ; ":" ; M ; ":" ; S
                            Waitms 250
                            Incr S
                            If S > 59 Then
                            S = 0
                            Incr M
                            Shiftcursor Left , 2
                            Lcd " "
                            If M > 59 Then
                            Incr H
                            M = 0
                            If H > 12 Then
                            jmp main
                            End If
                            End If
                            End If
                            Loop
                            End

                            Incr_m:
                            Incr M
                            If M > 59 Then
                            Cls : Home : Lcd "time:"
                            M = 0
                            End If
                            Return

                            Incr_h:
                            Incr H
                            If H > 12 Then
                            H = 1 : Cls : Home : Lcd "time:"
                            End If
                            Return

                            دیدگاه


                              #15
                              پاسخ : ساعت

                              سلام :
                              pull up زمانی بکار می رود که می خواهیم ورودی یا خروجی در حالت نا مشخص نباشند ، یعنی اگر خروچی روی آن پابه نداشتیم آن پابه به مثلاً 5 ولت وصل باشد .
                              اگر به ولتاژ مثبت وصل باشد می گویند pull up و اگر به ولتاژ 0 یا زمین وصل باشد می گویند pull down و فقط برای جلوگیری از حالت نا مشخص بکار می رود .

                              موفق باشید

                              دیدگاه

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