اطلاعیه

Collapse
No announcement yet.

استفاده از یک کلید برای 2 کار

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

    #16
    پاسخ : استفاده از یک کلید برای 2 کار

    نوشته اصلی توسط میلاد موسوی
    مقدار a2 مثلا 5 هستش این کد میاد از برچسب 7سگمنت خط 5 رو روی پورت b میذاره.(از این راحت تر نمیتونم بگم)
    :angry:
    دلا یاران سه قسمند ار بدانی
    زبانی اند و نانی اند و جانی
    به نانی نان بده از در برانش
    محبت کن به یاران زبانی
    و لیکن یار جانی را به دست آر
    به جانش جان بده تا می توانی

    دیدگاه


      #17
      پاسخ : استفاده از یک کلید برای 2 کار

      در مورد استفاده از کلید در دو حالت من تا حالا این کار رو می کردم:
      یه تایمر می ذاشتم و هر بار که کلید فشار داده میشد یکی به مقدار یک متغیر اضافه می رکدم. حالا اگه فشردن کلید مربوط به قسمت اول باشه( یعنی فقط یک بار فشردن کلید) به محضی که مقدار اون متغیر به یک می رسید عملیات مربوطه انجام میشه و در غیر این صورت این قدر این مقدار تو تایمر زیاد میشه تا به حد 5 ثانیه برسه. وقتی به اون حد رسید عملیات مربوطه انجام میشه. مقدار اون متغیر هم در سه حالت صفر میشه. اول وقتی در وضعیت تک حالته هستیم . دوم وقتی هنوز به زمان 5 ثانیه نرسیده باشیم و دست از روی کلید برداشته باشیم. سوم زمانی که عملیات مربوط به فشرده شده گکلید بعد از 5 ثانیه انجام شد. ( چقدر سخت گفتم!!!)
      در مورد جدول لوک پ ( Look up) هم تو تاپیک های مستقل دیگه بحث شده. حتما سرچ کنین.

      دیدگاه


        #18
        پاسخ : استفاده از یک کلید برای 2 کار

        اینم برچسب 7سگمنت:

        7segment:
        Data &B11000000 'number 0'
        Data &B11111001 'number 1'
        Data &B10100100 'number 2'
        Data &B10110000 'number 3'
        Data &B10011001 'number 4'
        Data &B10010010 'number 5'
        Data &B10000010 'number 6'
        Data &B11111000 'number 7'
        Data &B10000000 'number 8'
        Data &B10010000 'number 9'

        اینا برای 7سگمنت آند مشترک هستش.(اگه بخوای برای کاتد مشترک استفاده کنی کافیه 0 رو به 1 و 1 رو به0 تبدیل کنی)

        www.icesi.ir

        دیدگاه


          #19
          پاسخ : استفاده از یک کلید برای 2 کار

          حامد جان سلام. منم تقریبا یه همچین کاری کردم ولی نمیدونم چرا جواب نمیده..مطمئن هستم مشکل از برنامه هستش.اگه میشه شما یه نگاهی بکن.

          تو لوپ اصلی برنامه تست کلید رو گذاشتم با دستور:
          Debounce Pind.5 , 1 , Mm2

          بعد تو برچسب mm2 اینو گذاشتم.
          Mm2:
          Start Timer0
          jmp milad1
          تایمر رو استارت میکنه و دوباره به روتین برنامه برمیگرده.

          اینم برچسب سرریز تایمره:
          Timer1rutin:
          Timer0 = 5

          If Clik = 0 Then
          Incr Op1

          If Pind.5 = 0 Then
          If Op1 < 120 Then Goto Milad1
          End If

          If Pind.5 = 0 Then
          If Op1 > 121 Then

          A1 = 0
          A2 = 0
          A3 = 0
          A4 = 0
          A5 = 0
          A6 = 0
          A7 = 0
          A8 = 0
          End If
          End If
          End If
          return

          زمان تایمر تقریبا 30 میلی ثانیه هستش . اگه دست روی کلید کمتر از 3.6 ثانیه باشه به برچسب مورد نظر میپره و اگه بیشتر باشه همه متغیر هارو صفر میکنه.

          راه بهتری بلدی راهنماییمون کن. همیشه کمکای شما به کار من اومده. :nice:
          www.icesi.ir

          دیدگاه


            #20
            پاسخ : استفاده از یک کلید برای 2 کار

            یک سوال. این که همزمان هر دوتا حالت امکان وقوع داشته باشن هست؟
            یعنی دوتا برداشت میشه کرد:
            1- تو یک موقعیت ختما باید مشخص بشه که 5 ثانیه نگه داشته شده در غیر این صورت به منزله به صورت فشردن لحظه ای هست.
            2- در هر موقعیت تنها یکی از حالت های لحظه ای یا 5 ثانیه ای امکان وقوع داره.
            اینو بگو چجوریه تا یه کم فکر ( :surprised: ) کنم

            دیدگاه


              #21
              پاسخ : استفاده از یک کلید برای 2 کار

              سلام.

              نه نباید 2 تا موقعیت با هم اتفاق بیفته.
              اگه کلید رو یه بار بزنه که یه شخص بیشتر 1 ثانیه دستش روی کلید نیستش که من تا 3.6 ثانیه رو به منزله یه بار فشار دادن قرار دادم.
              و اگه بیشتر از 5 ثانیه فشار بده باید تمام متغییر های مورد نظر رو صفر کنه.در واقع این کار به منزله ریست هستش.

              برای این کار من با زدن کلید تایمر 0 رو استارت کردم. و در هر بار سرریز شدن تایمر یکی به متغییر OP1 اضافه میکنم و دوباره با برنامه Return میشه اگه مقدار OP1 کمتر از 120 باشه یعنی 120 بار تایمر سرریز شده و زمان 3.6 سپری یا کمتر از آن گذشته که در این حالت به برچسب مورد نظر میپره.
              و اگه مقدار OP1 بیشتر از این باشه به منزله ریست در نظر گرفتم .

              البته یکمی برنامه رو تغییر دادم و تست کردم. 1 بار بیشتر کار نمیکنه .یعنی وقتی متغییر کمتر از 120 هستش و به برچسب مورد نظر میپره دیگه کلید کار نمیکنه در واقع تایمر دیگه کار نمیکنه.تایمر هم دوباره پر میکنم.نمیدونم چرا؟؟؟

              این برنامه ای که گذاشتم اشکال داره.
              www.icesi.ir

              دیدگاه


                #22
                پاسخ : استفاده از یک کلید برای 2 کار

                سلام

                آقای میلاد برنامه تون مشکلش حل شد درسته؟

                خواستم بگم نتیجه رو اینجا بذاری که بقیه ی دوستانی که دنبال کننده ی تاپیک بودن ، نتیجه رو ببینن

                موفق باشی
                ِِDie for Life, Not Live to Die
                Freedom Fighter
                " ناخود گاه، هریک از ما ، از نامیرائی خود یقین دارد " . فروید

                دیدگاه


                  #23
                  پاسخ : استفاده از یک کلید برای 2 کار

                  آره آقا راه افتاد .کمکها و راهنمایی های شما و آقای حامد خان کمکمون کرد.

                  اینم برنامه.

                  $regfile = "m8def.dat"
                  $crystal = 8000000
                  Config Debounce = 2.5
                  Config Timer0 = Timer , Prescale = 1024
                  Enable Interrupts
                  Enable Timer0
                  Enable Ovf0
                  On Timer0 Timer1rutin
                  Timer0 = 238
                  Start Timer0



                  Dim Op1 As Integer
                  Dim Op2 As Integer
                  Dim Op As Word
                  Dim Lop As Word
                  Dim A1 As Word
                  Dim A2 As Word
                  Dim A3 As Word
                  Dim A4 As Word
                  Dim A5 As Word
                  Dim A6 As Word
                  Dim A7 As Word
                  Dim A8 As Word
                  Dim Clik As Bit
                  Dim Selec As Byte
                  Dim X As Integer

                  Config Portd.0 = Output
                  Config Portd.1 = Output
                  Config Portd.2 = Output
                  Config Portd.4 = Output
                  Config Portd.7 = Input
                  Config Portd.6 = Input
                  Config Portd.5 = Input
                  Config Portb = Output
                  Config Portc = Output

                  Selec = 1
                  A1 = 0
                  A2 = 0
                  A3 = 0
                  A4 = 0
                  A5 = 0
                  A6 = 0
                  A7 = 0
                  A8 = 0
                  Clik = 0
                  Op2 = 0

                  Readeeprom Op1 , 10
                  Readeeprom Op2 , 0

                  Milad:
                  Do

                  If Pind.5 = 1 Then
                  Waitms 20 'Debounce giri baraye klid
                  If Pind.5 = 1 Then 'mitoonid meghdare debounce ra taghir bedid


                  For X = 0 To 800
                  If Pind.5 = 0 Then Goto Cheng
                  Waitms 5
                  Next X

                  For X = 0 To 1000
                  If Pind.5 = 0 Then
                  Op2 = 0
                  Op1 = 0
                  End If
                  Waitms 3
                  Next X

                  End If
                  End If
                  Debounce Pind.6 , 1 , Down
                  Debounce Pind.7 , 1 , Up


                  Loop

                  Cheng:
                  Toggle Clik
                  jmp milad

                  Down:
                  If Clik = 0 Then
                  Decr Op2
                  Writeeeprom Op2 , 0
                  Waitms 4
                  End If

                  If Clik = 1 Then
                  Decr Op1
                  Writeeeprom Op1 , 10
                  Waitms 4
                  End If

                  jmp milad

                  Up:
                  If Clik = 0 Then
                  Incr Op2
                  Writeeeprom Op2 , 0
                  Waitms 4
                  End If

                  If Clik = 1 Then
                  Incr Op1
                  Writeeeprom Op1 , 10
                  Waitms 4
                  End If

                  jmp milad


                  '......zamane sar riz shodane TIMER0......'

                  Timer1rutin:
                  If Clik = 0 Then
                  Select Case Selec
                  Case 1 To 4 : Reset Portd.4
                  Case Else : Set Portd.4
                  End Select
                  End If

                  If Clik = 1 Then
                  Select Case Selec
                  Case 5 To 8 : Reset Portd.4
                  Case Else : Set Portd.4
                  End Select
                  End If


                  If Selec = 1 Then
                  Reset Portc.3
                  Set Portd.0
                  Portb = Lookup(a1 , 7segment)
                  End If

                  If Selec = 2 Then
                  Reset Portd.0
                  Set Portc.0
                  Portb = Lookup(a2 , 7segment)
                  End If

                  If Selec = 3 Then
                  Reset Portc.0
                  Set Portc.1
                  Portb = Lookup(a3 , 7segment)
                  End If

                  If Selec = 4 Then
                  Reset Portc.1
                  Set Portc.4
                  Portb = Lookup(a4 , 7segment)
                  End If

                  If Selec = 5 Then
                  Reset Portc.4
                  Set Portd.1
                  Portb = Lookup(a5 , 7segment)
                  End If

                  If Selec = 6 Then
                  Reset Portd.1
                  Set Portd.2
                  Portb = Lookup(a6 , 7segment)
                  End If

                  If Selec = 7 Then
                  Reset Portd.2
                  Set Portc.2
                  Portb = Lookup(a7 , 7segment)
                  End If

                  If Selec = 8 Then
                  Reset Portc.2
                  Set Portc.3
                  Portb = Lookup(a8 , 7segment)
                  End If
                  Incr Selec
                  If Selec = 9 Then Selec = 1

                  Op = Op1
                  A1 = Op Mod 10
                  Op = Op / 10
                  A2 = Op Mod 10
                  Op = Op / 10
                  A3 = Op Mod 10
                  A4 = Op / 10

                  Lop = Op2
                  A5 = Lop Mod 10
                  Lop = Lop / 10
                  A6 = Lop Mod 10
                  Lop = Lop / 10
                  A7 = Lop Mod 10
                  A8 = Lop / 10
                  Incr X
                  If X = 35 Then
                  Incr Op1
                  Incr Op2
                  X = 0
                  End If
                  If Op1 = 9999 Then
                  Op1 = 0
                  Op2 = 0
                  End If


                  Timer0 = 238
                  Return


                  7segment:
                  Data &B11000000 'number 0'
                  Data &B11111001 'number 1'
                  Data &B10100100 'number 2'
                  Data &B10110000 'number 3'
                  Data &B10011001 'number 4'
                  Data &B10010010 'number 5'
                  Data &B10000010 'number 6'
                  Data &B11111000 'number 7'
                  Data &B10000000 'number 8'
                  Data &B10010000 'number 9'

                  این سرور که خراب شد 70 تا از تایپک های من کم شده :agree:
                  www.icesi.ir

                  دیدگاه

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